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  – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.