• set_properties.msn

    113 114  
    5 5
    6 6 </%ARGS>
    7 7 <%INIT>
    8 use Contenido::File;
    9 use vars qw($keeper $request );
    10 8
    11 $request->{local_codepage} = 'KOI8';
    12 $request->{local_codepage} = 'WIN' if Convert::Cyrillic::cstocs('WIN', 'KOI8', $SETS->{control_charset}) eq '��������';
    13 $request->{local_codepage} = 'UTF8' if Convert::Cyrillic::cstocs('UTF8', 'KOI8', $SETS->{control_charset}) eq '��������';
    9 use Contenido::File;
    10 use vars qw($keeper $request );
    14 11
    15 warn "Contenido Debug: ����� ��� �������������� ������ � ��������� ".$request->{local_codepage}."\n" if ($state->debug());
    12 $request->{local_codepage} = 'KOI8';
    13 $request->{local_codepage} = 'WIN' if Convert::Cyrillic::cstocs('WIN', 'KOI8', $SETS->{control_charset}) eq '��������';
    14 $request->{local_codepage} = 'UTF8' if Convert::Cyrillic::cstocs('UTF8', 'KOI8', $SETS->{control_charset}) eq '��������';
    16 15
    17 my @properties = $object->structure();
    18 for (0..$#properties) {
    19 my $prop = $properties[$_];
    20 my $name = $prop->{attr};
    21 my $type = $prop->{type};
    16 warn "Contenido Debug: ����� ��� �������������� ������ � ��������� ".$request->{local_codepage}."\n" if ($state->debug());
    22 17
    23 next if ($name eq 'sections');
    24 next if ($name eq 'id');
    18 my @properties = $object->structure();
    19 for (0..$#properties)
    20 {
    21 my $prop = $properties[$_];
    22 my $name = $prop->{attr};
    23 my $type = $prop->{type};
    25 24
    26 if ($m->comp_exists("/contenido/components/outputs/$type.msn")) {
    27 $object->{$name} = $m->comp("/contenido/components/outputs/$type.msn", SETS => $SETS, name => $name, object => $object );
    25 next if ($name eq 'sections');
    26 next if ($name eq 'id');
    28 27
    29 } elsif ( $prop->{type} eq 'image' ) {
    30 # --------------------------------------------------------------------------------------
    31 # ���������� �����, �������� ������� ��������...
    28 if ($m->comp_exists("/contenido/components/outputs/$type.msn")) {
    29 $object->{$name} = $m->comp("/contenido/components/outputs/$type.msn", SETS => $SETS, name => $name, object => $object );
    32 30
    33 if ($SETS->{'_delete_image.'.$name} == 1) {
    34 my $IMAGE = eval ('my '.$object->{ $name });
    35 Contenido::File::remove($IMAGE->{'filename'});
    36 Contenido::File::remove($IMAGE->{'mini'}{'filename'});
    37 foreach my $key (keys %{$IMAGE->{'mini'}}) {
    38 if (ref $IMAGE->{'mini'}{$key} && ref $IMAGE->{'mini'}{$key} eq 'HASH' && $IMAGE->{'mini'}{$key}->{'filename'}) {
    39 Contenido::File::remove($IMAGE->{'mini'}{$key}->{'filename'}) if $IMAGE->{'mini'}{$key}->{'filename'} ne $IMAGE->{'mini'}{'filename'};
    40 }
    41 }
    42 $object->{$name} = '';
    43 } else {
    44 my $IMAGE = undef;
    45 if (length($object->{ $name }) > 8)
    46 {
    47 $IMAGE = eval ('my '.$object->{ $name });
    48 if (ref($IMAGE) ne 'HASH') { $IMAGE = {} };
    49 }
    50 $IMAGE = $m->comp('/contenido/components/set_image.msn', default=>$IMAGE, field=>$name, SETS=>$SETS, object=>$object, prop => $prop);
    51 if (exists($IMAGE->{filename}))
    52 {
    53 local $Data::Dumper::Indent = 0;
    54 $object->{$name} = Data::Dumper::Dumper($IMAGE);
    55 }
    56 }
    31 } elsif ( $prop->{type} eq 'image' ) {
    32 # --------------------------------------------------------------------------------------
    33 # ���������� �����, �������� ������� ��������...
    57 34
    58 } elsif ($prop->{type} =~ /^images/) {
    59 # --------------------------------------------------------------------------------------
    60 # � ��� ��� ��� ������� - ����������� ����� �� ���� ��������...
    35 if ($SETS->{'_delete_image.'.$name} == 1)
    36 {
    37 my $IMAGE = $object->get_image( $name );
    38 $object->_delete_image( $IMAGE );
    39 $object->$name('');
    40 } else {
    41 my $IMAGE = $object->get_image( $name );
    42 $IMAGE = ref $IMAGE ? $IMAGE : {};
    43 $IMAGE = $m->comp('/contenido/components/set_image.msn', default=>$IMAGE, field=>$name, SETS=>$SETS, object=>$object, prop => $prop);
    44 if ( exists $IMAGE->{filename} ) {
    45 local $Data::Dumper::Indent = 0;
    46 $object->$name( Data::Dumper::Dumper($IMAGE) );
    47 }
    48 }
    61 49
    62 my $IMAGES = {};
    63 if (length($object->{ $name }) > 10)
    64 {
    65 $IMAGES = eval ('my '.$object->{ $prop->{attr} });
    66 if (ref($IMAGES) ne 'HASH')
    67 {
    68 $IMAGES = {};
    69 $IMAGES->{maxnumber} = 0;
    70 };
    71 }
    50 } elsif ($prop->{type} =~ /^images/) {
    51 # --------------------------------------------------------------------------------------
    52 # � ��� ��� ��� ������� - ����������� ����� �� ���� ��������...
    72 53
    73 # ������ ���� ����������� ��� ��������� - � ����� ��� ��, ��� ��� �����...
    74 foreach my $arg (keys(%{ $SETS })) {
    75 # ��������� ��� �� �����, ��������...
    76 my ($partname,undef) = split(/\./,$arg);
    77 $partname =~ /^(.+)_(\d+)$/;
    78 my ($localname,$number) = ($1, $2);
    79 if ( ($localname eq $prop->{attr}) && ($number > 0) && ( $arg eq $localname.'_'.$number ))
    80 {
    81 # ���! ����� �������!
    54 my $IMAGES = $object->get_image( $name );
    55 if (ref($IMAGES) ne 'HASH') {
    56 $IMAGES = {};
    57 $IMAGES->{maxnumber} = 0;
    58 };
    82 59
    83 my $partname = $localname.'_'.$number;
    60 # ������ ���� ����������� ��� ��������� - � ����� ��� ��, ��� ��� �����...
    61 foreach my $arg (keys(%{ $SETS }))
    62 {
    63 # ��������� ��� �� �����, ��������...
    64 my ($partname,undef) = split(/\./,$arg);
    65 $partname =~ /^(.+)_(\d+)$/;
    66 my ($localname,$number) = ($1, $2);
    67 if ( ($localname eq $prop->{attr}) && ($number > 0) && ( $arg eq $localname.'_'.$number )) {
    68 # ���! ����� �������!
    84 69
    85 if ($SETS->{'_delete_image.'.$partname} == 1) {
    86 Contenido::File::remove($IMAGES->{'image_'.$number}{"filename"});
    87 Contenido::File::remove($IMAGES->{'image_'.$number}{"mini"}{"filename"});
    88 foreach my $key (keys %{$IMAGES->{'image_'.$number}{'mini'}}) {
    89 if (ref $IMAGES->{'image_'.$number}{'mini'}{$key} && ref $IMAGES->{'image_'.$number}{'mini'}{$key} eq 'HASH' && $IMAGES->{'image_'.$number}{'mini'}{$key}->{'filename'}) {
    90 Contenido::File::remove($IMAGES->{'image_'.$number}{'mini'}{$key}->{'filename'}) if $IMAGES->{'image_'.$number}{'mini'}{$key}->{'filename'} ne $IMAGES->{'image_'.$number}{'mini'}{'filename'};
    91 }
    92 }
    93 delete $IMAGES->{'image_'.$number};
    94 } else {
    95 my $IMAGE = undef;
    96 if (exists($IMAGES->{'image_'.$number})) {
    97 $IMAGE = $IMAGES->{'image_'.$number};
    98 };
    99 $IMAGE = $m->comp('/contenido/components/set_image.msn', default=>$IMAGE, field=>$partname, SETS=>$SETS, object=>$object, prop => $prop);
    100 if (exists($IMAGE->{filename})) {
    101 local $Data::Dumper::Indent = 0;
    102 $IMAGE->{number} = $number;
    103 $IMAGES->{'image_'.$number} = $IMAGE;
    104 $IMAGES->{maxnumber} = $number if ($number > $IMAGES->{maxnumber});
    105 }
    106 }
    107 }
    70 my $partname = $localname.'_'.$number;
    108 71
    109 }
    110
    111 if ( scalar(keys(%{ $IMAGES })) > 0) {
    112 my $maxnumber = 0;
    113 for ( 1..100 ) {
    114 $maxnumber = $_ if exists $IMAGES->{"image_$_"} && $_ > $maxnumber;
    115 }
    116 $IMAGES->{maxnumber} = $maxnumber;
    72 if ($SETS->{'_delete_image.'.$partname} == 1) {
    73 $object->_delete_image( $IMAGES->{'image_'.$number} );
    74 delete $IMAGES->{'image_'.$number};
    75 } else {
    76 my $IMAGE = undef;
    77 if (exists($IMAGES->{'image_'.$number})) {
    78 $IMAGE = $IMAGES->{'image_'.$number};
    79 };
    80 $IMAGE = $m->comp('/contenido/components/set_image.msn', default=>$IMAGE, field=>$partname, SETS=>$SETS, object=>$object, prop => $prop);
    81 if (exists($IMAGE->{filename})) {
    117 82 local $Data::Dumper::Indent = 0;
    118 $object->{$name} = Data::Dumper::Dumper($IMAGES);
    83 $IMAGE->{number} = $number;
    84 $IMAGES->{'image_'.$number} = $IMAGE;
    85 $IMAGES->{maxnumber} = $number if ($number > $IMAGES->{maxnumber});
    119 86 }
    87 }
    88 }
    89 }
    120 90
    121 } elsif ( $prop->{type} eq 'multimedia' ) {
    122 # --------------------------------------------------------------------------------------
    123 # ���������� ������ ������ �����������
    91 if ( scalar(keys(%{ $IMAGES })) > 0) {
    92 my $maxnumber = 0;
    93 for ( 1..100 ) {
    94 $maxnumber = $_ if exists $IMAGES->{"image_$_"} && $_ > $maxnumber;
    95 }
    96 $IMAGES->{maxnumber} = $maxnumber;
    97 local $Data::Dumper::Indent = 0;
    98 $object->$name( Data::Dumper::Dumper($IMAGES) );
    99 }
    124 100
    125 if ($SETS->{'_delete_multi.'.$name} == 1)
    126 {
    127 my $BINARY = eval ('my '.$object->{ $name });
    128 Contenido::File::remove($BINARY->{"filename"});
    129 $object->{$name} = '';
    130 } else {
    131 my $MULTI = undef;
    132 if (length($object->{ $name }) > 8)
    133 {
    134 $MULTI = eval ('my '.$object->{ $name });
    135 if (ref($MULTI) ne 'HASH') { $MULTI = {} };
    136 }
    137 $MULTI = $m->comp('/contenido/components/set_multi.msn', default=>$MULTI, field=>$name, SETS=>$SETS, object=>$object);
    138 if (exists($MULTI->{filename}))
    139 {
    140 local $Data::Dumper::Indent = 0;
    141 $object->{$name} = Data::Dumper::Dumper($MULTI);
    142 }
    143 }
    101 } elsif ( $prop->{type} eq 'multimedia' ) {
    102 # --------------------------------------------------------------------------------------
    103 # ���������� ������ ������ �����������
    144 104
    145 } elsif ( $prop->{type} eq 'multimedia_new' ) {
    146 # --------------------------------------------------------------------------------------
    147 # ���������� ������ ������ �����������
    105 if ($SETS->{'_delete_multi.'.$name} == 1)
    106 {
    107 my $BINARY = eval ('my '.$object->{ $name });
    108 Contenido::File::remove($BINARY->{"filename"});
    109 $object->{$name} = '';
    110 } else {
    111 my $MULTI = undef;
    112 if (length($object->{ $name }) > 8)
    113 {
    114 $MULTI = eval ('my '.$object->{ $name });
    115 if (ref($MULTI) ne 'HASH') { $MULTI = {} };
    116 }
    117 $MULTI = $m->comp('/contenido/components/set_multi.msn', default=>$MULTI, field=>$name, SETS=>$SETS, object=>$object);
    118 if (exists($MULTI->{filename}))
    119 {
    120 local $Data::Dumper::Indent = 0;
    121 $object->{$name} = Data::Dumper::Dumper($MULTI);
    122 }
    123 }
    148 124
    149 if ($SETS->{'_delete_multi.'.$name} == 1)
    150 {
    151 my $BINARY = eval ('my '.$object->{ $name });
    152 Contenido::File::remove($BINARY->{"filename"});
    153 $object->{$name} = '';
    154 } else {
    155 my $MULTI = undef;
    156 if (length($object->{ $name }) > 8)
    157 {
    158 $MULTI = eval ('my '.$object->{ $name });
    159 if (ref($MULTI) ne 'HASH') { $MULTI = {} };
    160 }
    161 $MULTI = $m->comp('/contenido/components/set_multimedia_new.msn', default=>$MULTI, field=>$name, SETS=>$SETS, object=>$object, prop => $prop);
    162 if (exists($MULTI->{filename}))
    163 {
    164 local $Data::Dumper::Indent = 0;
    165 $object->{$name} = Data::Dumper::Dumper($MULTI);
    166 }
    167 }
    125 } elsif ( $prop->{type} eq 'multimedia_new' ) {
    126 # --------------------------------------------------------------------------------------
    127 # ���������� ������ ������ �����������
    168 128
    169 } elsif ( $prop->{type} eq 'audio' ) {
    170 # --------------------------------------------------------------------------------------
    171 # ���������� ������ ������ �����������
    129 if ($SETS->{'_delete_multi.'.$name} == 1)
    130 {
    131 my $BINARY = eval ('my '.$object->{ $name });
    132 Contenido::File::remove($BINARY->{"filename"});
    133 $object->{$name} = '';
    134 } else {
    135 my $MULTI = undef;
    136 if (length($object->{ $name }) > 8)
    137 {
    138 $MULTI = eval ('my '.$object->{ $name });
    139 if (ref($MULTI) ne 'HASH') { $MULTI = {} };
    140 }
    141 $MULTI = $m->comp('/contenido/components/set_multimedia_new.msn', default=>$MULTI, field=>$name, SETS=>$SETS, object=>$object, prop => $prop);
    142 if (exists($MULTI->{filename}))
    143 {
    144 local $Data::Dumper::Indent = 0;
    145 $object->{$name} = Data::Dumper::Dumper($MULTI);
    146 }
    147 }
    172 148
    173 if ($SETS->{'_delete_multi.'.$name} == 1) {
    174 my $VAR1 = undef;
    175 eval "\$object->{$name}";
    176 my $BINARY = $VAR1;
    177 if (ref $BINARY) {$BINARY->remove}
    178 $object->{$name} = '';
    179 } else {
    180 my $MULTI = undef;
    181 if (length($object->$name) > 8) {
    182 my $VAR1 = undef;
    183 eval "\$object->{$name}";
    184 $MULTI = $VAR1;
    185 unless (ref $MULTI) {$MULTI = undef};
    186 }
    187 $MULTI = $m->comp('/contenido/components/set_audio.msn', default=>$MULTI, field=>$name, SETS=>$SETS, object=>$object, prop => $prop);
    188 if (exists($MULTI->{filename})) {
    189 local $Data::Dumper::Indent = 0;
    190 $object->{$name} = Data::Dumper::Dumper($MULTI);
    191 }
    192 }
    149 } elsif ( $prop->{type} eq 'audio' ) {
    150 # --------------------------------------------------------------------------------------
    151 # ���������� ������ ������ �����������
    193 152
    194 } else {
    195 $object->{$name} = $m->comp('/contenido/components/filter.msn', str => $SETS->{$name} );
    196 }
    153 if ($SETS->{'_delete_multi.'.$name} == 1)
    154 {
    155 my $VAR1 = undef;
    156 eval "\$object->{$name}";
    157 my $BINARY = $VAR1;
    158 if (ref $BINARY) {$BINARY->remove}
    159 $object->{$name} = '';
    160 } else {
    161 my $MULTI = undef;
    162 if (length($object->$name) > 8)
    163 {
    164 my $VAR1 = undef;
    165 eval "\$object->{$name}";
    166 $MULTI = $VAR1;
    167 unless (ref $MULTI) {$MULTI = undef};
    168 }
    169 $MULTI = $m->comp('/contenido/components/set_audio.msn', default=>$MULTI, field=>$name, SETS=>$SETS, object=>$object, prop => $prop);
    170 if (exists($MULTI->{filename}))
    171 {
    172 local $Data::Dumper::Indent = 0;
    173 $object->{$name} = Data::Dumper::Dumper($MULTI);
    174 }
    175 }
    197 176
    198 }
    177 } else {
    178 $object->{$name} = $m->comp('/contenido/components/filter.msn', str => $SETS->{$name} );
    179 }
    199 180
    200 # �� ���� - �� �������� � �������, ��� ��� ������ �� ���� ����������!
    201 # O-��! �-��! �-��!
    202 return 1;
    181 }
    203 182
    183 # �� ���� - �� �������� � �������, ��� ��� ������ �� ���� ����������!
    184 # O-��! �-��! �-��!
    185 return 1;
    186
    204 187 </%INIT>