Changeset 1904

Show
Ignore:
Timestamp:
04/15/08 02:35:24 (22 months ago)
Author:
fumiakiy
Message:

Restore userpic asset's physical files. BugId:75120

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-35/lib/MT/CMS/Tools.pm

    r1902 r1904  
    780780            $param->{tmp_dir} = $dir; 
    781781        } 
     782        elsif ( defined $asset_ids ) { 
     783            my %asset_ids = @$asset_ids; 
     784            my %error_assets; 
     785            _restore_non_blog_asset( $app, $dir, $asset_ids, \%error_assets ); 
     786            if (%error_assets) { 
     787                my $data; 
     788                while ( my ( $key, $value ) = each %error_assets ) { 
     789                    $data .= 
     790                      $app->translate( 'MT::Asset#[_1]: ', $key ) . $value . "\n"; 
     791                } 
     792                my $message = $app->translate( 
     793                    'Some of the actual files for assets could not be restored.'); 
     794                $app->log( 
     795                    { 
     796                        message  => $message, 
     797                        level    => MT::Log::WARNING(), 
     798                        class    => 'system', 
     799                        category => 'restore', 
     800                        metadata => $data, 
     801                    } 
     802                ); 
     803                $error .= $message; 
     804            } 
     805        } 
    782806    } 
    783807    else { 
     
    846870                $param->{tmp_dir} = $tmp; 
    847871            } 
     872            elsif ( defined $asset_ids ) { 
     873                my %asset_ids = @$asset_ids; 
     874                my %error_assets; 
     875                _restore_non_blog_asset( $app, $tmp, \%asset_ids, \%error_assets ); 
     876                if (%error_assets) { 
     877                    my $data; 
     878                    while ( my ( $key, $value ) = each %error_assets ) { 
     879                        $data .= 
     880                          $app->translate( 'MT::Asset#[_1]: ', $key ) . $value . "\n"; 
     881                    } 
     882                    my $message = $app->translate( 
     883                        'Some of the actual files for assets could not be restored.'); 
     884                    $app->log( 
     885                        { 
     886                            message  => $message, 
     887                            level    => MT::Log::WARNING(), 
     888                            class    => 'system', 
     889                            category => 'restore', 
     890                            metadata => $data, 
     891                        } 
     892                    ); 
     893                    $error .= $message; 
     894                } 
     895            } 
    848896        } 
    849897    } 
     
    915963} 
    916964 
     965sub _restore_non_blog_asset { 
     966    my ( $app, $tmp_dir, $asset_ids, $error_assets ) = @_; 
     967    require MT::FileMgr; 
     968    my $fmgr = MT::FileMgr->new('Local'); 
     969    foreach my $new_id ( keys %$asset_ids ) { 
     970        my $asset = $app->model('asset')->load($new_id); 
     971        next unless $asset; 
     972        my $old_id = $asset_ids->{$new_id}; 
     973        my $filename = $old_id . '-' . $asset->file_name; 
     974        my $file    = File::Spec->catfile( $tmp_dir, $filename ); 
     975        MT::BackupRestore->restore_asset( $file, $asset, $old_id, $fmgr, 
     976            $error_assets, sub { $app->print(@_); } ); 
     977    } 
     978} 
     979 
    917980sub adjust_sitepath { 
    918981    my $app  = shift; 
     
    935998    $app->print( $app->build_page( 'dialog/restore_start.tmpl', {} ) ); 
    936999 
     1000    my $asset_class = $app->model('asset'); 
    9371001    my %error_assets; 
    9381002    my %blogs_meta; 
     
    10111075 
    10121076        my @assets = 
    1013           $app->model('asset')->load( { blog_id => $id, class => '*' } ); 
     1077          $asset_class->load( { blog_id => $id, class => '*' } ); 
    10141078        foreach my $asset (@assets) { 
    10151079            my $path = $asset->column('file_path'); 
     
    10411105            $app->print( $app->translate("ok") . "\n" ); 
    10421106            unless ( $q->param('redirect') ) { 
    1043                 my $old_id   = $asset_ids{ $asset->id }; 
     1107                my $old_id   = delete $asset_ids{ $asset->id }; 
    10441108                my $filename = "$old_id-" . $asset->file_name; 
    10451109                my $file     = File::Spec->catfile( $tmp_dir, $filename ); 
     
    10481112            } 
    10491113        } 
     1114    } 
     1115    unless ( $q->param('redirect') ) { 
     1116        _restore_non_blog_asset( $app, $tmp_dir, \%asset_ids, \%error_assets ); 
    10501117    } 
    10511118    if (%error_assets) {