' . getHeader( $session );
+
+ ### Crumbtrail
+ my $crumb_markup = '
> %s';
+ my $ancestors = $currentAsset->getLineage( ['ancestors'], { returnObjects => 1 } );
+
+ $output .= '
';
+ for my $asset ( @{ $ancestors } ) {
+ $output .= sprintf $crumb_markup,
+ $asset->getUrl( 'op=assetManager;method=manage' ),
+ $asset->get( "menuTitle" ),
+ ;
+ }
+
+ # And ourself
+ $output .= sprintf '- > %s
',
+ getMoreMenu( $currentAsset, $currentAsset->get( "menuTitle" ) ),
+ ;
+ $output .= '
';
+
+ ### The page of assets
+ $output .= q{
}
+ ;
+
+ ### Page links
+ $output .= q{
} . $p->getBarAdvanced . q{
};
+
+ ### Page description
+ $output .= sprintf q{
} . $i18n->get( 'page indicator' ) . q{
},
+ $p->getPageNumber,
+ $p->getNumberOfPages,
+ ;
+
+ ### Clearing div
+ $output .= q{
};
+
+ ### New Content
+ $output .= q{
';
+
+ tie my %options, 'Tie::IxHash';
+ my $hasClips = 0;
+ foreach my $asset (@{$currentAsset->getAssetsInClipboard(1)}) {
+ $options{$asset->getId} = '
.')
'.$asset->getTitle;
+ $hasClips = 1;
+ }
+ if ($hasClips) {
+ $output .= '
'
+ .'';
+ }
+
+ ## Packages
+ $output .= '
';
+
+ ### Clearing div
+ $output .= q{
};
+ $output .= q{
};
+
+ return $ac->render( $output );
+}
+
+#----------------------------------------------------------------------------
+
+=head2 www_search ( session )
+
+Search assets underneath this asset.
+
+=cut
+
+sub www_search {
+ my $session = shift;
+ my $ac = WebGUI::AdminConsole->new( $session, "assets" );
+ my $i18n = WebGUI::International->new( $session, "Asset" );
+ my $output = '' . getHeader( $session );
+
+ $session->style->setLink( $session->url->extras( 'yui-webgui/build/assetManager/assetManager.css' ), { rel => "stylesheet", type => 'text/css' } );
+ $session->style->setScript( $session->url->extras( 'yui/build/yahoo-dom-event/yahoo-dom-event.js' ) );
+ $session->style->setScript( $session->url->extras( 'yui-webgui/build/assetManager/assetManager.js' ) );
+ $session->style->setScript( $session->url->extras( 'yui-webgui/build/form/form.js' ) );
+ $session->style->setRawHeadTags( <<'ENDHTML' );
+
+ENDHTML
+
+ ### Show the form
+ $output .= q{
}
+ ;
+
+ ### Actions
+ if ( my $action = $session->form->get( 'action' ) ) {
+ my @assetIds = $session->form->get( 'assetId' );
+
+ if ( $action eq "trash" ) {
+ for my $assetId ( @assetIds ) {
+ my $asset = WebGUI::Asset->newByDynamicClass( $session, $assetId );
+ next unless $asset;
+ $asset->trash;
+ }
+ }
+ elsif ( $action eq "cut" ) {
+ for my $assetId ( @assetIds ) {
+ my $asset = WebGUI::Asset->newByDynamicClass( $session, $assetId );
+ next unless $asset;
+ $asset->cut;
+ }
+ }
+ elsif ( $action eq "copy" ) {
+ for my $assetId ( @assetIds ) {
+ # Copy == Duplicate + Cut
+ my $asset = WebGUI::Asset->newByDynamicClass( $session, $assetId);
+ my $newAsset = $asset->duplicate( { skipAutoCommitWorkflows => 1 } );
+ $newAsset->update( { title => $newAsset->getTitle . ' (copy)' } );
+ $newAsset->cut;
+ }
+ }
+ }
+
+ ### Run the search
+ if ( $session->form->get( 'keywords' ) || $session->form->get( 'class' ) ) {
+ my $keywords = $session->form->get( 'keywords' );
+ my @classes = $session->form->get( 'class' );
+
+ my $p = getSearchPaginator( $session, {
+ keywords => $keywords,
+ classes => \@classes,
+ orderByColumn => $session->form->get( 'orderByColumn' ),
+ orderByDirection => $session->form->get( 'orderByDirection' ),
+ } );
+
+ if ( $p->getRowCount == 0 ) {
+ $output .= q{
} . $i18n->get( 'no results' ) . q{
};
+ }
+ else {
+ ### Display the search results
+ $output .= q{
}
+ ;
+
+ ### Page links
+ $output .= q{
} . $p->getBarAdvanced . q{
};
+
+ ### Page description
+ $output .= sprintf q{
} . $i18n->get( 'page indicator' ) . q{
},
+ $p->getPageNumber,
+ $p->getNumberOfPages,
+ ;
+
+ ### Clearing div
+ $output .= q{
};
+ }
+ }
+
+ $output .= '
';
+
+ return $ac->render( $output );
+}
+
+1;
diff --git a/lib/WebGUI/Form/Template.pm b/lib/WebGUI/Form/Template.pm
index bb853d55e..ad1c59e69 100644
--- a/lib/WebGUI/Form/Template.pm
+++ b/lib/WebGUI/Form/Template.pm
@@ -176,7 +176,7 @@ sub toHtmlWithWrapper {
$returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl);
}
my $buttons = $self->session->icon->edit("func=edit".$returnUrl,$template->get("url"));
- $buttons .= $self->session->icon->manage("func=manageAssets",$template->getParent->get("url"));
+ $buttons .= $self->session->icon->manage("op=manageAssets",$template->getParent->get("url"));
$self->set("subtext",$buttons . $self->get("subtext"));
}
return $self->SUPER::toHtmlWithWrapper;
diff --git a/lib/WebGUI/Search.pm b/lib/WebGUI/Search.pm
index 544596428..8cdab0d3c 100644
--- a/lib/WebGUI/Search.pm
+++ b/lib/WebGUI/Search.pm
@@ -398,7 +398,7 @@ sub search {
if ($rules->{classes}) {
my @phrases = ();
foreach my $class (@{$rules->{classes}}) {
- next unless defined $class;
+ next unless $class;
push(@params, $class);
push(@phrases, "className=?");
}
diff --git a/lib/WebGUI/URL/Content.pm b/lib/WebGUI/URL/Content.pm
index 9ae6b9c82..5566ba52c 100644
--- a/lib/WebGUI/URL/Content.pm
+++ b/lib/WebGUI/URL/Content.pm
@@ -53,11 +53,14 @@ sub handler {
$request->push_handlers(PerlResponseHandler => sub {
my $session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request, $server);
foreach my $handler (@{$config->get("contentHandlers")}) {
- my $output = eval { WebGUI::Pluggable::run($handler, "handler", [ $session ] ) };
+ my $output = WebGUI::Pluggable::run($handler, "handler", [ $session ] );
if ( my $e = WebGUI::Error->caught ) {
$session->errorHandler->error($e->package.":".$e->line." - ".$e->error);
$session->errorHandler->debug($e->package.":".$e->line." - ".$e->trace);
}
+ elsif ( $@ ) {
+ $session->errorHandler->error( $@ );
+ }
else {
if ($output eq "chunked") {
if ($session->errorHandler->canShowDebug()) {
diff --git a/lib/WebGUI/i18n/English/Asset.pm b/lib/WebGUI/i18n/English/Asset.pm
index 5e1921c68..31dce68f7 100644
--- a/lib/WebGUI/i18n/English/Asset.pm
+++ b/lib/WebGUI/i18n/English/Asset.pm
@@ -1048,6 +1048,42 @@ Couldn't open %-s because %-s