Refactor duplicated asset export code. Fix asset context error
in the process, which should in turn fix a few related bugs with static export.
This commit is contained in:
parent
8ffc2f57c2
commit
1dd24dd6b7
2 changed files with 53 additions and 79 deletions
|
|
@ -19,6 +19,7 @@
|
||||||
- fix: Collaboration System packages do not deploy
|
- fix: Collaboration System packages do not deploy
|
||||||
- fix: robots.txt returns wrong MIME type
|
- fix: robots.txt returns wrong MIME type
|
||||||
- change: overlong alternate text for Weather Data icons shortened to basename
|
- change: overlong alternate text for Weather Data icons shortened to basename
|
||||||
|
- fix: multiple problems with static export, including wrong asset context and wrong status messages
|
||||||
|
|
||||||
7.0.7
|
7.0.7
|
||||||
- rfe: Image Management (funded by Formation Design Systems)
|
- rfe: Image Management (funded by Formation Design Systems)
|
||||||
|
|
|
||||||
|
|
@ -69,32 +69,44 @@ sub checkExportPath {
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
=head2 exportAsHtml
|
# Private method to do most of the work for exporting. Returns
|
||||||
|
# ($success_flag, $description).
|
||||||
|
|
||||||
Same as www_exportGenerate except without the output. Returns "success" if successful, otherwise returns an error message.
|
# Buggo: probably shouldn't be doing i18n stuff here; refactor this
|
||||||
|
# further
|
||||||
|
|
||||||
=cut
|
sub _exportAsHtml {
|
||||||
|
|
||||||
sub exportAsHtml {
|
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $error = $self->checkExportPath();
|
my $quiet = shift;
|
||||||
if ($error) {
|
my $userId = shift;
|
||||||
return $error;
|
my $index = shift;
|
||||||
|
my $startTime = $self->session->datetime->time();
|
||||||
|
|
||||||
|
my $exportPathError = $self->checkExportPath();
|
||||||
|
if ($exportPathError) {
|
||||||
|
return (0, $exportPathError);
|
||||||
}
|
}
|
||||||
my $userId = '1';
|
|
||||||
my $index = "index.html";
|
my $i18n = WebGUI::International->new($self->session, 'Asset');
|
||||||
# Change the stuff we need to change to do the export
|
|
||||||
my $newSession = WebGUI::Session->open($self->session->config->getWebguiRoot, $self->session->config->getFilename);
|
my $newSession = WebGUI::Session->open($self->session->config->getWebguiRoot, $self->session->config->getFilename);
|
||||||
|
$newSession->user({userId=>$userId});
|
||||||
|
|
||||||
my $newSelf = WebGUI::Asset->new($newSession, $self->getId, $self->get("className"), $self->get("revisionDate"));
|
my $newSelf = WebGUI::Asset->new($newSession, $self->getId, $self->get("className"), $self->get("revisionDate"));
|
||||||
my $assets = $newSelf->getLineage(["self","descendants"],{returnObjects=>1,endingLineageLength=>$newSelf->getLineageLength+$self->session->form->process("depth")});
|
my $assets = $newSelf->getLineage(["self","descendants"],{returnObjects=>1,endingLineageLength=>$newSelf->getLineageLength+$self->session->form->process("depth")});
|
||||||
$newSession->user({userId=>$userId});
|
|
||||||
foreach my $asset (@{$assets}) {
|
foreach my $asset (@{$assets}) {
|
||||||
my $url = $asset->get("url");
|
my $url = $asset->get("url");
|
||||||
|
$self->session->output->print(sprintf($i18n->get('exporting page'), $url)) unless $quiet;
|
||||||
|
|
||||||
unless ($asset->canView($userId)) {
|
unless ($asset->canView($userId)) {
|
||||||
|
$self->session->output->print(sprintf($i18n->get('bad user privileges')."\n")) unless $quiet;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $path;
|
my $path;
|
||||||
my $filename;
|
my $filename;
|
||||||
|
|
||||||
if ($url =~ /\./) {
|
if ($url =~ /\./) {
|
||||||
$url =~ /^(.*)\/(.*)$/;
|
$url =~ /^(.*)\/(.*)$/;
|
||||||
$path = $1;
|
$path = $1;
|
||||||
|
|
@ -107,33 +119,48 @@ sub exportAsHtml {
|
||||||
$path = $url;
|
$path = $url;
|
||||||
$filename = $index;
|
$filename = $index;
|
||||||
}
|
}
|
||||||
if($path) {
|
|
||||||
|
if ($path) {
|
||||||
$path = $self->session->config->get("exportPath") . "/" . $path;
|
$path = $self->session->config->get("exportPath") . "/" . $path;
|
||||||
eval { mkpath($path) };
|
eval { mkpath($path) };
|
||||||
if($@) {
|
if($@) {
|
||||||
return "Couldn't create path";
|
return (0, sprintf($i18n->get('could not create path'), $path, $@));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$path .= "/".$filename;
|
$path .= "/".$filename;
|
||||||
|
|
||||||
my $file = eval { FileHandle->new(">".$path) or die "$!" };
|
my $file = eval { FileHandle->new(">".$path) or die "$!" };
|
||||||
if ($@) {
|
if ($@) {
|
||||||
return "couldn't open path";
|
return (0, sprintf($i18n->get('could not open path'), $path, $@));
|
||||||
} else {
|
} else {
|
||||||
$newSession->output->setHandle($file);
|
$newSession->output->setHandle($file);
|
||||||
|
$newSession->asset($asset);
|
||||||
my $content = $asset->www_view;
|
my $content = $asset->www_view;
|
||||||
unless ($content eq "chunked") {
|
unless ($content eq "chunked") {
|
||||||
$newSession->output->print($content);
|
$newSession->output->print($content);
|
||||||
}
|
}
|
||||||
$file->close;
|
$file->close;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$self->session->output->print($i18n->get('done')) unless $quiet;
|
||||||
}
|
}
|
||||||
$newSession->var->end;
|
$newSession->var->end;
|
||||||
$newSession->close;
|
$newSession->close;
|
||||||
return "success";
|
return (1, sprintf($i18n->get('export information'), scalar(@{$assets}), ($self->session->datetime->time()-$startTime)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=head2 exportAsHtml
|
||||||
|
|
||||||
|
Same as www_exportGenerate except without the output. Returns
|
||||||
|
"success" if successful, otherwise returns an error message.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub exportAsHtml {
|
||||||
|
my $self = shift;
|
||||||
|
my ($success, $description) = $self->_exportAsHtml(1, '1', 'index.html');
|
||||||
|
return $success? "success" : $description;
|
||||||
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -211,73 +238,19 @@ sub www_exportGenerate {
|
||||||
# This routine is called in an IFRAME and prints status output directly to the browser.
|
# This routine is called in an IFRAME and prints status output directly to the browser.
|
||||||
$|++; # Unbuffered data output
|
$|++; # Unbuffered data output
|
||||||
$self->session->http->sendHeader;
|
$self->session->http->sendHeader;
|
||||||
my $startTime =$self->session->datetime->time();
|
|
||||||
my $error = $self->checkExportPath();
|
my $i18n = WebGUI::International->new($self->session, 'Asset');
|
||||||
if ($error) {
|
my ($success, $description) =
|
||||||
$self->session->output->print($error,1);
|
$self->_exportAsHtml(0, $self->session->form->process('userId'),
|
||||||
|
$self->session->form->process('index'));
|
||||||
|
if (!$success) {
|
||||||
|
$self->session->output->print($description,1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
my $i18n = WebGUI::International->new($self->session, 'Asset');
|
|
||||||
my $userId = $self->session->form->process("userId");
|
$self->session->output->print($description,1);
|
||||||
my $index = $self->session->form->process("index");
|
|
||||||
# Change the stuff we need to change to do the export
|
|
||||||
my $newSession = WebGUI::Session->open($self->session->config->getWebguiRoot, $self->session->config->getFilename);
|
|
||||||
my $newSelf = WebGUI::Asset->new($newSession, $self->getId, $self->get("className"), $self->get("revisionDate"));
|
|
||||||
my $assets = $newSelf->getLineage(["self","descendants"],{returnObjects=>1,endingLineageLength=>$newSelf->getLineageLength+$self->session->form->process("depth")});
|
|
||||||
$newSession->user({userId=>$userId});
|
|
||||||
foreach my $asset (@{$assets}) {
|
|
||||||
my $url = $asset->get("url");
|
|
||||||
$self->session->output->print ( sprintf($i18n->get('exporting page')), $url);
|
|
||||||
unless ($asset->canView($userId)) {
|
|
||||||
$self->session->output->print ($i18n->get('bad user privileges')."\n");
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
my $path;
|
|
||||||
my $filename;
|
|
||||||
if ($url =~ /\./) {
|
|
||||||
$url =~ /^(.*)\/(.*)$/;
|
|
||||||
$path = $1;
|
|
||||||
$filename = $2;
|
|
||||||
if ($filename eq "") {
|
|
||||||
$filename = $path;
|
|
||||||
$path = undef;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$path = $url;
|
|
||||||
$filename = $index;
|
|
||||||
}
|
|
||||||
if($path) {
|
|
||||||
$path = $self->session->config->get("exportPath") . "/" . $path;
|
|
||||||
eval { mkpath($path) };
|
|
||||||
if($@) {
|
|
||||||
$self->session->output->print(sprintf($i18n->get('could not create path'), $path, $@), 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$path .= "/".$filename;
|
|
||||||
my $file = eval { FileHandle->new(">".$path) or die "$!" };
|
|
||||||
if ($@) {
|
|
||||||
$self->session->output->print(sprintf($i18n->get('could not open path'), $path, $@),1);
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
$newSession->output->setHandle($file);
|
|
||||||
my $content = $asset->www_view;
|
|
||||||
unless ($content eq "chunked") {
|
|
||||||
$newSession->output->print($content);
|
|
||||||
}
|
|
||||||
$file->close;
|
|
||||||
}
|
|
||||||
$self->session->output->print($i18n->get('done'));
|
|
||||||
}
|
|
||||||
$newSession->var->end;
|
|
||||||
$newSession->close;
|
|
||||||
$self->session->output->print(sprintf($i18n->get('export information'), scalar(@{$assets}), ($self->session->datetime->time()-$startTime)),1);
|
|
||||||
$self->session->output->print('<a target="_parent" href="'.$self->getUrl.'">'.$i18n->get(493,'WebGUI').'</a>');
|
$self->session->output->print('<a target="_parent" href="'.$self->getUrl.'">'.$i18n->get(493,'WebGUI').'</a>');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue