92 lines
2.4 KiB
Perl
92 lines
2.4 KiB
Perl
=head1 LEGAL
|
|
|
|
-------------------------------------------------------------------
|
|
WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
|
-------------------------------------------------------------------
|
|
Please read the legal notices (docs/legal.txt) and the license
|
|
(docs/license.txt) that came with this distribution before using
|
|
this software.
|
|
-------------------------------------------------------------------
|
|
http://www.plainblack.com info@plainblack.com
|
|
-------------------------------------------------------------------
|
|
|
|
=head1 NAME
|
|
|
|
WebGUI::Upgrade::File::wgpkg - Upgrade class for WebGUI packages
|
|
|
|
=cut
|
|
|
|
package WebGUI::Upgrade::File::wgpkg;
|
|
use Moose;
|
|
with 'WebGUI::Upgrade::File';
|
|
|
|
use WebGUI::Asset;
|
|
use WebGUI::Session;
|
|
use WebGUI::Storage;
|
|
use WebGUI::VersionTag;
|
|
use File::Spec;
|
|
use Try::Tiny;
|
|
use namespace::clean;
|
|
|
|
sub run {
|
|
my $self = shift;
|
|
my $configFile = shift;
|
|
|
|
my $session = WebGUI::Session->open($configFile);
|
|
$session->user({userId => 3});
|
|
|
|
my $versionTag = WebGUI::VersionTag->getWorking($session);
|
|
(undef, undef, my $shortname) = File::Spec->splitpath($self->file);
|
|
$shortname =~ s/\.[^.]*$//;
|
|
$versionTag->set({name => "Upgrade to @{[$self->version]} - $shortname"});
|
|
$versionTag->setWorking;
|
|
|
|
my $package = $self->import_package($session, $self->file);
|
|
if (! $self->quiet) {
|
|
printf "\tImported '%s'\n", $package->title;
|
|
}
|
|
|
|
$versionTag->commit;
|
|
$session->end;
|
|
$session->close;
|
|
|
|
return $package;
|
|
}
|
|
|
|
sub import_package {
|
|
my $class = shift;
|
|
my ($session, $file) = @_;
|
|
|
|
my $versionTag = WebGUI::VersionTag->getWorking( $session, "nocreate" );
|
|
|
|
# Make a storage location for the package
|
|
my $storage = WebGUI::Storage->createTemp( $session );
|
|
$storage->addFileFromFilesystem( $file );
|
|
|
|
# Import the package into the import node
|
|
my $package = try {
|
|
my $node = WebGUI::Asset->getImportNode($session);
|
|
$node->importPackage( $storage, {
|
|
overwriteLatest => 1,
|
|
clearPackageFlag => 1,
|
|
setDefaultTemplate => 1,
|
|
tagId => ( $versionTag ? $versionTag->getId : undef ),
|
|
} );
|
|
}
|
|
catch {
|
|
$storage->delete;
|
|
die "Error during package import on $file: $_";
|
|
};
|
|
|
|
$storage->delete;
|
|
|
|
if ($package eq 'corrupt') {
|
|
die "Corrupt package found in $file.\n";
|
|
}
|
|
|
|
return $package;
|
|
}
|
|
|
|
__PACKAGE__->meta->make_immutable;
|
|
1;
|
|
|