Show
Ignore:
Timestamp:
04/17/08 12:38:52 (2 years ago)
Author:
fumiakiy
Message:

New metadata structure is now backup- and restore-able. BugId:79317

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-35/lib/MT/BackupRestore/BackupFileHandler.pm

    r1905 r1948  
    99use strict; 
    1010use XML::SAX::Base; 
     11use MIME::Base64; 
    1112 
    1213@MT::BackupRestore::BackupFileHandler::ISA = qw(XML::SAX::Base); 
     
    9192                    $obj = $class->load({ name => $column_data{name} }); 
    9293                    if ($obj) { 
    93                         if ( $obj->id == MT->instance->user->id ) { 
     94                        if ( UNIVERSAL::isa('MT::App', MT->instance) 
     95                          && ( $obj->id == MT->instance->user->id ) ) { 
    9496                            MT->log({ message => MT->translate( 
    9597                                "User with the same name as the name of the currently logged in ([_1]) found.  Skipped the record.", $obj->name), 
     
    153155                    my $success = $obj->restore_parent_ids(\%column_data, $objects); 
    154156                    if ($success) { 
    155                         $obj->set_values(\%column_data); 
     157                        require MT::Meta; 
     158                        my @metacolumns = MT::Meta->metadata_by_class( ref($obj) ); 
     159                        my %metacolumns = map { $_->{name} => $_->{type} } @metacolumns; 
     160                        $self->{metacolumns}{ref($obj)} = \%metacolumns; 
     161                        my %realcolumn_data = map { $_ => $column_data{$_} } 
     162                            grep { !exists($metacolumns{$_}) } 
     163                                keys %column_data; 
     164                        $obj->set_values(\%realcolumn_data); 
     165                        foreach my $metacol ( keys %metacolumns ) { 
     166                            next if ( 'vclob' eq $metacolumns{$metacol} ) 
     167                                 || ( 'vblob' eq $metacolumns{$metacol} ); 
     168                            $obj->$metacol( $column_data{$metacol} ); 
     169                        } 
    156170                        $self->{current} = $obj; 
    157171                    } else { 
     
    202216             
    203217            my $defs = $obj->column_defs; 
    204             if ('blob' eq $defs->{$column_name}->{type}) { 
    205                 require MIME::Base64; 
    206                 $obj->column($column_name, MIME::Base64::decode_base64($text)); 
    207             } else { 
    208                 $text = MT::I18N::encode_text($text, 'utf-8'); 
    209                 $obj->column($column_name, $text); 
     218            if ( exists( $defs->{$column_name} ) ) { 
     219                if ('blob' eq $defs->{$column_name}->{type}) { 
     220                    $obj->column($column_name, MIME::Base64::decode_base64($text)); 
     221                } else { 
     222                    $text = MT::I18N::encode_text($text, 'utf-8'); 
     223                    $obj->column($column_name, $text); 
     224                } 
     225            } 
     226            elsif ( my $metacolumns = $self->{metacolumns}{ref($obj)} ) { 
     227                if ( my $type = $metacolumns->{$column_name} ) { 
     228                    if ( 'vblob' eq $type ) { 
     229                        $self->{callback}->($text); 
     230                        $text = MIME::Base64::decode_base64($text); 
     231                        $self->{callback}->($text); 
     232                        $obj->$column_name( $text ); 
     233                    } 
     234                    else { 
     235                        $text = MT::I18N::encode_text($text, 'utf-8'); 
     236                        $obj->$column_name( $text ); 
     237                    } 
     238                } 
    210239            } 
    211240        } else {