Revision 129

Date:
2011/08/27 12:01:02
Author:
ahitrov
Revision Log:
New multimedia control
Files:

Legend:

 
Added
 
Removed
 
Modified
  • koi8/core/comps/contenido/components/set_multimedia_new.msn

     
    1 <%once>
    2
    3 my %translit = (
    4 '�' => 'a',
    5 '�' => 'b',
    6 '�' => 'v',
    7 '�' => 'g',
    8 '�' => 'd',
    9 '�' => 'e',
    10 '�' => 'e',
    11 '�' => 'zh',
    12 '�' => 'z',
    13 '�' => 'i',
    14 '�' => 'y',
    15 '�' => 'k',
    16 '�' => 'l',
    17 '�' => 'm',
    18 '�' => 'n',
    19 '�' => 'o',
    20 '�' => 'p',
    21 '�' => 'r',
    22 '�' => 's',
    23 '�' => 't',
    24 '�' => 'u',
    25 '�' => 'f',
    26 '�' => 'h',
    27 '�' => 'ts',
    28 '�' => '4',
    29 '�' => 'sh',
    30 '�' => 'sch',
    31 '�' => 'y',
    32 '�' => 'i',
    33 '�' => 'y',
    34 '�' => 'e',
    35 '�' => 'u',
    36 '�' => 'a',
    37 '�' => 'A',
    38 '�' => 'B',
    39 '�' => 'V',
    40 '�' => 'G',
    41 '�' => 'D',
    42 '�' => 'E',
    43 '�' => 'E',
    44 '�' => 'ZH',
    45 '�' => 'Z',
    46 '�' => 'I',
    47 '�' => 'Y',
    48 '�' => 'K',
    49 '�' => 'L',
    50 '�' => 'M',
    51 '�' => 'N',
    52 '�' => 'O',
    53 '�' => 'P',
    54 '�' => 'R',
    55 '�' => 'S',
    56 '�' => 'T',
    57 '�' => 'U',
    58 '�' => 'F',
    59 '�' => 'H',
    60 '�' => 'TS',
    61 '�' => '4',
    62 '�' => 'SH',
    63 '�' => 'SCH',
    64 '�' => 'Y',
    65 '�' => 'I',
    66 '�' => 'Y',
    67 '�' => 'E',
    68 '�' => 'U',
    69 '�' => 'YA',
    70 );
    71
    72 </%once>
    73 1 <%args>
    74 2
    75 3 $SETS => undef
     
    81 9 </%args>
    82 10 <%init>
    83 11
    84 use IO::File;
    85
    86 12 return undef unless defined $SETS and defined $field;
    87 13 #use vars qw($keeper);
    88 14
     
    91 17
    92 18 my $BINARY = $default;
    93 19
    94 if ($SETS->{$field}) {
    95 my $filename = "/binary/".$object->get_file_name() || return;
    96 my $upload = $r->upload($field);
    97 if ( $prop->{softrename} ) {
    98 my $oid = $object->id || int(rand(10000));
    99 my $orig_name = $upload->filename();
    100 if ( $orig_name =~ /\\([^\\]+)$/ ) {
    101 $orig_name = $1;
    102 } elsif ( $orig_name =~ /\/([^\/]+)$/ ) {
    103 $orig_name = $1;
    104 }
    105 $orig_name =~ s/[\ \t]/_/g;
    106 $orig_name = $oid.'_'.$orig_name;
    107 $filename =~ s/\/([^\/]+)$//;
    108 my $fname = $1;
    109 unless ( $orig_name =~ /^[a-zA-Z_\d\.\-\,]+$/ ) {
    110 $orig_name = $m->comp('.translit', str => $orig_name);
    111 }
    112 warn "\n\n\n\n\nNew Name: [$orig_name]\n\n\n\n\n";
    113 unless ( $orig_name =~ /^[a-zA-Z_\d\.\-\,]+$/ ) {
    114 $orig_name = $fname;
    115 }
    116 $filename .= '/'.$orig_name;
    117 $filename =~ s/\.([^\.]+)$//;
    20 if ($SETS->{$field} || $SETS->{"$field.ext_url"}) {
    21
    22 my $upload;
    23 if ( $SETS->{$field} ) {
    24 $upload = $r->upload($field);
    25 } elsif ( $SETS->{"$field.ext_url"} && $SETS->{"$field.ext_url"} =~ /^(http|https|ftp):\/\/.*/ ) {
    26 $upload = $SETS->{"$field.ext_url"};
    118 27 }
    119 my $filename_tmp = $state->{"tmp_dir"}."/".join("_", split("/", $filename));
    28 if ($upload) {
    120 29
    121 my $suffix = $upload->filename() =~ /\.([^\.]+)$/ ? lc($1) : 'bin';
    122 my $fh = $upload->fh();
    123 my $size = (stat $fh)[7];
    30 my $BIN = $object->_store_binary( $upload, attr => $prop->{attr} );
    124 31
    125 my $fh_tmp = IO::File->new(">".$filename_tmp.".".$suffix) || die "Can't open temporary file";
    32 if ( ref $BIN eq 'HASH' && exists $BIN->{filename} ) {
    33 $object->_delete_binary( $default );
    34 %$BINARY = %$BIN;
    35 }
    126 36
    127 my $buffer;
    128
    129 $size = sysread $fh, $buffer, $size;
    130 syswrite $fh_tmp, $buffer, $size;
    131
    132 undef $fh_tmp;
    133
    134 if (Contenido::File::store($filename.".".$suffix, $filename_tmp.".".$suffix)) {
    135 if (ref $BINARY eq "HASH" and $BINARY->{"filename"}) {
    136 Contenido::File::remove($BINARY->{"filename"});
    137 }
    138
    139 @{$BINARY}{"filename", "ext", "size"} = (
    140 $filename.".".$suffix,
    141 $suffix,
    142 $size
    143 );
    37 } else {
    38 warn 'ERROR in incoming POST form: "'.$field.' is not file upload (value: "'.$SETS->{$field}.'")';
    144 39 }
    145 40
    146 unlink $filename_tmp.".".$suffix if -e $filename_tmp.".".$suffix;
    147 if ( $suffix =~ /(rar|7z|zip|arc|lha|arj|cab)/ ) {
    148 $BINARY->{type} = 'archive';
    149 } elsif ( $suffix =~ /(doc|rtf)/ ) {
    150 $BINARY->{type} = 'doc';
    151 } elsif ( $suffix eq 'xls' ) {
    152 $BINARY->{type} = 'xls';
    153 } elsif ( $suffix =~ /(mdb|ppt)/ ) {
    154 $BINARY->{type} = 'msoffice';
    155 } elsif ( $suffix =~ /(pdf)/ ) {
    156 $BINARY->{type} = 'ebook';
    157 } elsif ( $suffix eq 'psd' ) {
    158 $BINARY->{type} = 'psd';
    159 } elsif ( $suffix =~ /(exe|msi|cab)/ ) {
    160 $BINARY->{type} = 'executable';
    161 } else {
    162 $BINARY->{type} = 'unknown';
    163 }
    164 41 }
    165 42
    166 43 # �������������� ���� - ����� ���, ��� ������...
     
    169 46
    170 47 foreach my $localfield (keys(%{ $SETS })) {
    171 48 if ($localfield =~ /$pattern/) {
    172 my $imagefield = $1;
    173 $BINARY->{$imagefield} = $m->comp("/contenido/components/filter.msn", str => $SETS->{$localfield});
    49 my $imagefield = $1;
    50 $BINARY->{$imagefield} = $m->comp("/contenido/components/filter.msn", str => $SETS->{$localfield});
    174 51 }
    175 52 }
    176 53
    177 54 return $BINARY;
    178 55
    179 56 </%init>
    180
    181
    182 <%def .translit>
    183 <%args>
    184 $str => undef
    185 </%args>
    186 <%init>
    187
    188 my @str = split (//, $str);
    189 my $res = '';
    190 while ( scalar @str ) {
    191 my $alpha = shift @str;
    192 if ( exists $translit{$alpha} ) {
    193 $res .= $translit{$alpha};
    194 } else {
    195 $res .= $alpha;
    196 }
    197 }
    198 return $res;
    199
    200 </%init>
    201 </%def>
  • utf8/core/comps/contenido/components/set_multimedia_new.msn

     
    1 <%once>
    2
    3 my %translit = (
    4 'а' => 'a',
    5 'б' => 'b',
    6 'в' => 'v',
    7 'г' => 'g',
    8 'д' => 'd',
    9 'е' => 'e',
    10 'ё' => 'e',
    11 'ж' => 'zh',
    12 'з' => 'z',
    13 'и' => 'i',
    14 'й' => 'y',
    15 'к' => 'k',
    16 'л' => 'l',
    17 'м' => 'm',
    18 'н' => 'n',
    19 'о' => 'o',
    20 'п' => 'p',
    21 'р' => 'r',
    22 'с' => 's',
    23 'т' => 't',
    24 'у' => 'u',
    25 'ф' => 'f',
    26 'х' => 'h',
    27 'ц' => 'ts',
    28 'ч' => '4',
    29 'ш' => 'sh',
    30 'щ' => 'sch',
    31 'ъ' => 'y',
    32 'ы' => 'i',
    33 'ь' => 'y',
    34 'э' => 'e',
    35 'ю' => 'u',
    36 'я' => 'a',
    37 'А' => 'A',
    38 'Б' => 'B',
    39 'В' => 'V',
    40 'Г' => 'G',
    41 'Д' => 'D',
    42 'Е' => 'E',
    43 'Ё' => 'E',
    44 'Ж' => 'ZH',
    45 'З' => 'Z',
    46 'И' => 'I',
    47 'Й' => 'Y',
    48 'К' => 'K',
    49 'Л' => 'L',
    50 'М' => 'M',
    51 'Н' => 'N',
    52 'О' => 'O',
    53 'П' => 'P',
    54 'Р' => 'R',
    55 'С' => 'S',
    56 'Т' => 'T',
    57 'У' => 'U',
    58 'Ф' => 'F',
    59 'Х' => 'H',
    60 'Ц' => 'TS',
    61 'Ч' => '4',
    62 'Ш' => 'SH',
    63 'Щ' => 'SCH',
    64 'Ъ' => 'Y',
    65 'Ы' => 'I',
    66 'Ь' => 'Y',
    67 'Э' => 'E',
    68 'Ю' => 'U',
    69 'Я' => 'YA',
    70 );
    71
    72 </%once>
    73 1 <%args>
    74 2
    75 3 $SETS => undef
     
    126 54 return $BINARY;
    127 55
    128 56 </%init>
    129
    130
    131 <%def .translit>
    132 <%args>
    133 $str => undef
    134 </%args>
    135 <%init>
    136
    137 my @str = split (//, $str);
    138 my $res = '';
    139 while ( scalar @str ) {
    140 my $alpha = shift @str;
    141 if ( exists $translit{$alpha} ) {
    142 $res .= $translit{$alpha};
    143 } else {
    144 $res .= $alpha;
    145 }
    146 }
    147 return $res;
    148
    149 </%init>
    150 </%def>

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.