Revision 526

Date:
2015/11/25 16:12:34
Author:
ahitrov
Revision Log:
multimedia_multi - multifile field type

Files:

Legend:

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

     
    39 39 {
    40 40
    41 41 my $prop = $properties[$_];
    42 next if ($prop->{hidden} == 1) || ($prop->{type} eq 'image') || ($prop->{type} eq 'external') || ($prop->{type} =~ /^array/i) || ($prop->{type} =~ /^image/) || ($prop->{type} eq 'multimedia') || ($prop->{type} eq 'multimedia_new') || ($prop->{type} eq 'audio');
    42 next if ($prop->{hidden} == 1) || ($prop->{type} eq 'image') || ($prop->{type} eq 'external') || ($prop->{type} =~ /^array/i) || ($prop->{type} =~ /^image/) || ($prop->{type} eq 'multimedia') || ($prop->{type} eq 'multimedia_new ') || ($prop->{type} eq 'multimedia_multi') || ($prop->{type} eq 'audio');
    43 43
    44 44 </%perl>
    45 45 <tr><td height="8"></td></tr>
     
    161 161 MULTI => $MULTI,
    162 162 options => $options,
    163 163 &>
    164 % } elsif ($prop->{type} eq 'multimedia_new')
    165 % {
    164 % } elsif ($prop->{type} eq 'multimedia_new') {
    166 165 % my $MULTI = $object->get_image( $prop->{attr} );
    167 166
    168 167 <& "/contenido/components/inputs/multimedia_new.msn",
     
    172 171 MULTI => $MULTI,
    173 172 options => $options,
    174 173 &>
    175 % } elsif ($prop->{type} eq 'audio')
    176 % {
    174 % } elsif ($prop->{type} eq 'multimedia_multi') {
    175 % my $FILES = $object->get_image( $prop->{attr} );
    176 % if (ref($FILES) ne 'HASH') { next };
    177 % my $MN = $FILES->{maxnumber}+0;
    178 % for my $mn (1..$MN) {
    179 % my $MULTI = $FILES->{'file_'.$mn};
    180 <& "/contenido/components/inputs/multimedia_new.msn",
    181 rusname => $prop->{rusname},
    182 prop => $prop, object=>$object,
    183 attr => $prop->{attr}.'_'.$mn,
    184 MULTI => $MULTI,
    185 options => $options,
    186 &>
    187
    188 % }
    189 % my $ME = exists $prop->{empty_slots} ? $prop->{empty_slots} : 3;
    190 % $ME = ($ME + $FILES->{maxnumber}) >= 100 ? 0 : (100 - $FILES->{maxnumber} < $ME ? 100 - $FILES->{maxnumber} : $ME );
    191 % for my $mn (1..$ME) {
    192
    193 <& "/contenido/components/inputs/multimedia_new.msn",
    194 rusname => $prop->{rusname},
    195 prop => $prop, object=>$object,
    196 attr => $prop->{attr}.'_'.($MN+$mn),
    197 MULTI => {},
    198 options => $options,
    199 &>
    200
    201 % }
    202 % } elsif ($prop->{type} eq 'audio') {
    177 203 % my $MULTI = $object->get_image( $prop->{attr} );
    178 204
    179 205 <& "/contenido/components/inputs/audio.msn",
  • koi8/core/comps/contenido/components/set_properties.msn

     
    146 146 }
    147 147 }
    148 148
    149 } elsif ($prop->{type} eq 'multimedia_multi') {
    150 # --------------------------------------------------------------------------------------
    151 # � ��� ��� ��� ������� - ����������� ����� �� ���� ������...
    152
    153 my $FILES = $object->get_image( $name );
    154 if ( ref($FILES) ne 'HASH' ) {
    155 $FILES = {};
    156 $FILES->{maxnumber} = 0;
    157 };
    158
    159 # ������ ���� ����������� ��� ��������� - � ����� ��� ��, ��� ��� �����...
    160 foreach my $arg (keys(%{ $SETS }))
    161 {
    162 # ��������� ��� �� �����, ��������...
    163 my ($partname,undef) = split(/\./,$arg);
    164 $partname =~ /^(.+)_(\d+)$/;
    165 my ($localname,$number) = ($1, $2);
    166 if ( ($localname eq $prop->{attr}) && ($number > 0) && ( $arg eq $localname.'_'.$number )) {
    167 # ���! ����� �������!
    168
    169 my $partname = $localname.'_'.$number;
    170
    171 if ($SETS->{'_delete_multi.'.$partname} == 1) {
    172 $object->_delete_binary( $FILES->{'file_'.$number} );
    173 delete $FILES->{'file_'.$number};
    174 } else {
    175 my $MULTI = undef;
    176 if (exists($FILES->{'file_'.$number})) {
    177 $MULTI = $FILES->{'file_'.$number};
    178 };
    179 $MULTI = $m->comp('/contenido/components/set_multimedia_new.msn', default=>$MULTI, field=>$partname, SETS=>$SETS, object=>$object, prop => $prop);
    180 if (exists($MULTI->{filename})) {
    181 $MULTI->{number} = $number;
    182 $FILES->{'file_'.$number} = $MULTI;
    183 $FILES->{maxnumber} = $number if ($number > $FILES->{maxnumber});
    184 }
    185 }
    186 }
    187 }
    188
    189 if ( scalar(keys(%{ $FILES })) > 0) {
    190 my $maxnumber = 0;
    191 for ( 1..100 ) {
    192 $maxnumber = $_ if exists $FILES->{"file_$_"} && $_ > $maxnumber;
    193 }
    194 $FILES->{maxnumber} = $maxnumber;
    195 $object->$name( $object->_serialize($FILES) );
    196 }
    197
    149 198 } elsif ( $prop->{type} eq 'audio' ) {
    150 199 # --------------------------------------------------------------------------------------
    151 200 # ���������� ������ ������ �����������
  • koi8/core/lib/Contenido/Object.pm

     
    608 608 if ( exists $opts{attachments} && $opts{attachments} ) {
    609 609 my @props = $self->structure();
    610 610 if ( @props ) {
    611 @props = grep { $_->{type} =~ /^(image|images|multimedia_new)$/ } @props;
    611 @props = grep { $_->{type} =~ /^(image|images|multimedia_new|multimedia_multi)$/ } @props;
    612 612 foreach my $prop ( @props ) {
    613 613 my $att = $self->get_image($prop->{attr});
    614 614 if ( $prop->{type} eq 'image' ) {
     
    644 644 if ( ref $att && exists $att->{filename} && $att->{filename} ) {
    645 645 Contenido::File::remove( $att->{filename} );
    646 646 }
    647 } elsif ( $prop->{type} eq 'multimedia_multi' ) {
    648 for ( 1..100 ) {
    649 next unless exists $att->{"file_$_"};
    650 my $file = $att->{"file_$_"};
    651 if ( ref $file && exists $file->{filename} && $file->{filename} ) {
    652 Contenido::File::remove( $file->{filename} );
    653 }
    654 }
    647 655 }
    648 656 }
    649 657 }
     
    1165 1173 }
    1166 1174
    1167 1175 # ----------------------------------------------------------------------------
    1168 # ����� _store_binary() ��������� ������������ �������� ����, ����������� � ���� multimedia ��� multimedia_new
    1176 # ����� _store_binary() ��������� ������������ �������� ����, ����������� � ���� multimedia_multi ��� multimedia_new
    1169 1177 #
    1170 1178 # ������ �������������:
    1171 1179 # $document->_store_binary( INPUT, attr => 'fieldname' )

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

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

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

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

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