files (and subclasses) and posts (and threads) can now export attachments in packages

fixed a couple of bugs
added some error handling and corruption detection
This commit is contained in:
JT Smith 2006-04-13 18:34:35 +00:00
parent e2109910fd
commit e262da13f8
4 changed files with 60 additions and 10 deletions

View file

@ -123,6 +123,22 @@ sub duplicate {
}
#-------------------------------------------------------------------
=head2 exportAssetData() ( )
See WebGUI::AssetPackage::exportAssetData() for details.
=cut
sub exportAssetData {
my $self = shift;
my $data = $self->SUPER::exportAssetData;
push(@{$data->{storage}}, $self->get("storageId")) if ($self->get("storageId") ne "");
return $data;
}
#-------------------------------------------------------------------
=head2 getEditForm ()

View file

@ -221,6 +221,21 @@ sub DESTROY {
}
#-------------------------------------------------------------------
=head2 exportAssetData() ( )
See WebGUI::AssetPackage::exportAssetData() for details.
=cut
sub exportAssetData {
my $self = shift;
my $data = $self->SUPER::exportAssetData;
push(@{$data->{storage}}, $self->get("storageId")) if ($self->get("storageId") ne "");
return $data;
}
#-------------------------------------------------------------------
=head2 formatContent ( [ content, contentType ])

View file

@ -45,7 +45,7 @@ Converts all the properties of this asset into a hash reference and then returns
=cut
sub exportData {
sub exportAssetData {
my $self = shift;
my %data = %{$self->get};
my %hash = ( properties => \%data, storage=>[] );
@ -64,7 +64,7 @@ sub exportPackage {
my $self = shift;
my $storage = WebGUI::Storage->createTemp($self->session);
foreach my $asset (@{$self->getLineage(["self","descendants"],{returnObjects=>1})}) {
my $data = $asset->exportData;
my $data = $asset->exportAssetData;
$storage->addFileFromScalar($data->{properties}{lineage}.".json", JSON::objToJson($data));
foreach my $storageId (@{$data->{storage}}) {
my $assetStorage = WebGUI::Storage->get($self->session, $storageId);
@ -160,14 +160,22 @@ sub importPackage {
my $self = shift;
my $storage = shift;
my $decompressed = $storage->untar($storage->getFiles->[0]);
foreach my $file (@{$decompressed->getFiles}) {
my $data = JSON::jsonToObj($decompressed->getFileContentsAsScalar($file));
my %assets = ();
foreach my $file (sort(@{$decompressed->getFiles})) {
next unless ($decompressed->getFileExtension($file) eq "json");
my $data = eval{JSON::jsonToObj($decompressed->getFileContentsAsScalar($file))};
if ($@ || $data->{properties}{assetId} eq "" || $data->{properties}{className} eq "" || $data->{properties}{revisionDate} eq "") {
$self->session->errorHandler->warn("package corruption: ".$@) if ($@);
return "corrupt";
}
foreach my $storageId (@{$data->{storage}}) {
my $assetStorage = WebGUI::Storage->get($self->session, $storageId);
$decompressed->untar($storageId.".storage", $assetStorage);
}
$self->importAssetData($data);
my $asset = $assets{$data->{parentId}} || $self;
$assets{$data->{assetId}} = $asset->importAssetData($data);
}
return undef;
}
#-------------------------------------------------------------------
@ -183,12 +191,12 @@ sub www_deployPackage {
# Must have edit rights to the asset deploying the package. Also, must be a Content Manager.
# This protects against non content managers deploying packages using a post or similar trickery.
return $self->session->privilege->insufficient() unless ($self->canEdit && $self->session->user->isInGroup(4));
my $packageMasterAssetId = $self->session->form->process("assetId");
my $packageMasterAssetId = $self->session->form->param("assetId");
if (defined $packageMasterAssetId) {
my $packageMasterAsset = WebGUI::Asset->newByDynamicClass($packageMasterAssetId);
my $packageMasterAsset = WebGUI::Asset->newByDynamicClass($self->session, $packageMasterAssetId);
unless ($packageMasterAsset->getValue('isPackage')) { #only deploy packages
WebGUI::ErrorHandler::security('deploy an asset as a package which was not set as a package.');
return;
$self->session->errorHandler->security('deploy an asset as a package which was not set as a package.');
return;
}
my $masterLineage = $packageMasterAsset->get("lineage");
if (defined $packageMasterAsset && $packageMasterAsset->canView && $self->get("lineage") !~ /^$masterLineage/) {
@ -211,6 +219,7 @@ sub www_exportPackage {
my $self = shift;
return $self->session->privilege->insufficient() unless ($self->get("isPackage") && $self->canEdit && $self->session->user->isInGroup(4));
my $storage = $self->exportPackage;
my $filename = $storage->getFiles->[0];
$self->session->http->setRedirect($storage->getUrl($storage->getFiles->[0]));
return "redirect";
}
@ -226,7 +235,11 @@ sub www_importPackage {
return $self->session->privilege->insufficient() unless ($self->canEdit && $self->session->user->isInGroup(4));
my $storage = WebGUI::Storage->createTemp($self->session);
$storage->addFileFromFormPost("packageFile",1);
$self->importPackage($storage) if ($storage->getFileExtension($storage->getFiles->[0]) eq "wgpkg");
my $error = $self->importPackage($storage) if ($storage->getFileExtension($storage->getFiles->[0]) eq "wgpkg");
if ($error) {
my $i18n = WebGUI::International->new($self->session, "Asset");
return $self->session->style->userStyle($i18n->get("package corrupt"));
}
return $self->www_manageAssets();
}

View file

@ -1,6 +1,12 @@
package WebGUI::i18n::English::Asset;
our $I18N = {
'package corrupt' => {
message => q|The package you tried to import appears to be corrupt. We imported up to the point where we detected corruption. If you won't want this portion, roll back your current version tag.|,
lastUpdated => 0,
context => q|error message about package corruption|
},
'import' => {
message => q|Import|,
lastUpdated => 0,