<%once>
my %translit = (
'�' => 'a',
'�' => 'b',
'�' => 'v',
'�' => 'g',
'�' => 'd',
'�' => 'e',
'�' => 'e',
'�' => 'zh',
'�' => 'z',
'�' => 'i',
'�' => 'y',
'�' => 'k',
'�' => 'l',
'�' => 'm',
'�' => 'n',
'�' => 'o',
'�' => 'p',
'�' => 'r',
'�' => 's',
'�' => 't',
'�' => 'u',
'�' => 'f',
'�' => 'h',
'�' => 'ts',
'�' => '4',
'�' => 'sh',
'�' => 'sch',
'�' => 'y',
'�' => 'i',
'�' => 'y',
'�' => 'e',
'�' => 'u',
'�' => 'a',
'�' => 'A',
'�' => 'B',
'�' => 'V',
'�' => 'G',
'�' => 'D',
'�' => 'E',
'�' => 'E',
'�' => 'ZH',
'�' => 'Z',
'�' => 'I',
'�' => 'Y',
'�' => 'K',
'�' => 'L',
'�' => 'M',
'�' => 'N',
'�' => 'O',
'�' => 'P',
'�' => 'R',
'�' => 'S',
'�' => 'T',
'�' => 'U',
'�' => 'F',
'�' => 'H',
'�' => 'TS',
'�' => '4',
'�' => 'SH',
'�' => 'SCH',
'�' => 'Y',
'�' => 'I',
'�' => 'Y',
'�' => 'E',
'�' => 'U',
'�' => 'YA',
);
</%once>
<%args>
$SETS => undef
$field => undef
$default=> undef
$object => undef
$prop => undef
</%args>
<%init>
use IO::File;
return undef unless defined $SETS and defined $field;
#use vars qw($keeper);
# --------------------------------------------------------------------------------------
# ���������� ����� ��������
my $BINARY = $default;
if ($SETS->{$field}) {
my $filename = "/binary/".$object->get_file_name() || return;
my $upload = $r->upload($field);
if ( $prop->{softrename} ) {
my $oid = $object->id || int(rand(10000));
my $orig_name = $upload->filename();
if ( $orig_name =~ /\\([^\\]+)$/ ) {
$orig_name = $1;
} elsif ( $orig_name =~ /\/([^\/]+)$/ ) {
$orig_name = $1;
}
$orig_name =~ s/[\ \t]/_/g;
$orig_name = $oid.'_'.$orig_name;
$filename =~ s/\/([^\/]+)$//;
my $fname = $1;
unless ( $orig_name =~ /^[a-zA-Z_\d\.\-\,]+$/ ) {
$orig_name = $m->comp('.translit', str => $orig_name);
}
warn "\n\n\n\n\nNew Name: [$orig_name]\n\n\n\n\n";
unless ( $orig_name =~ /^[a-zA-Z_\d\.\-\,]+$/ ) {
$orig_name = $fname;
}
$filename .= '/'.$orig_name;
$filename =~ s/\.([^\.]+)$//;
}
my $filename_tmp = $state->{"tmp_dir"}."/".join("_", split("/", $filename));
my $suffix = $upload->filename() =~ /\.([^\.]+)$/ ? lc($1) : 'bin';
my $fh = $upload->fh();
my $size = (stat $fh)[7];
my $fh_tmp = IO::File->new(">".$filename_tmp.".".$suffix) || die "Can't open temporary file";
my $buffer;
$size = sysread $fh, $buffer, $size;
syswrite $fh_tmp, $buffer, $size;
undef $fh_tmp;
if (Contenido::File::store($filename.".".$suffix, $filename_tmp.".".$suffix)) {
if (ref $BINARY eq "HASH" and $BINARY->{"filename"}) {
Contenido::File::remove($BINARY->{"filename"});
}
@{$BINARY}{"filename", "ext", "size"} = (
$filename.".".$suffix,
$suffix,
$size
);
}
unlink $filename_tmp.".".$suffix if -e $filename_tmp.".".$suffix;
if ( $suffix =~ /(rar|7z|zip|arc|lha|arj|cab)/ ) {
$BINARY->{type} = 'archive';
} elsif ( $suffix =~ /(doc|rtf)/ ) {
$BINARY->{type} = 'doc';
} elsif ( $suffix eq 'xls' ) {
$BINARY->{type} = 'xls';
} elsif ( $suffix =~ /(mdb|ppt)/ ) {
$BINARY->{type} = 'msoffice';
} elsif ( $suffix =~ /(pdf)/ ) {
$BINARY->{type} = 'ebook';
} elsif ( $suffix eq 'psd' ) {
$BINARY->{type} = 'psd';
} elsif ( $suffix =~ /(exe|msi|cab)/ ) {
$BINARY->{type} = 'executable';
} else {
$BINARY->{type} = 'unknown';
}
}
# �������������� ���� - ����� ���, ��� ������...
my $pattern = "^".$field.q|\.(.*)$|;
foreach my $localfield (keys(%{ $SETS })) {
if ($localfield =~ /$pattern/) {
my $imagefield = $1;
$BINARY->{$imagefield} = $m->comp("/contenido/components/filter.msn", str => $SETS->{$localfield});
}
}
return $BINARY;
</%init>
<%def .translit>
<%args>
$str => undef
</%args>
<%init>
my @str = split (//, $str);
my $res = '';
while ( scalar @str ) {
my $alpha = shift @str;
if ( exists $translit{$alpha} ) {
$res .= $translit{$alpha};
} else {
$res .= $alpha;
}
}
return $res;
</%init>
</%def>