diff --git a/lib/WebGUI/Content/Asset.pm b/lib/WebGUI/Content/Asset.pm index 36c00d381..d7b495ed4 100644 --- a/lib/WebGUI/Content/Asset.pm +++ b/lib/WebGUI/Content/Asset.pm @@ -168,7 +168,7 @@ sub handler { my $output = ""; if ($errorHandler->canShowPerformanceIndicators) { #show performance indicators if required my $t = [Time::HiRes::gettimeofday()]; - $output = page($session); + $output = dispatch($session, getRequestedUrl($session)); $t = Time::HiRes::tv_interval($t) ; if ($output =~ /<\/title>/) { $output =~ s/<\/title>/ : ${t} seconds<\/title>/i; @@ -189,23 +189,7 @@ sub handler { } } else { - - my $asset = getAsset($session, getRequestedAssetUrl($session)); - - # display from cache if page hasn't been modified. - if ($var->get("userId") eq "1" - && defined $asset - && !$http->ifModifiedSince($asset->getContentLastModified, $session->setting->get('maxCacheTimeout'))) { - $http->setStatus("304","Content Not Modified"); - $http->sendHeader; - $session->close; - return "chunked"; - } - - # return the page. - else { - $output = page($session, undef, $asset); - } + $output = dispatch($session, getRequestedUrl($session)); } my $filename = $http->getStreamedFile(); @@ -224,86 +208,4 @@ sub handler { return $output; } -#------------------------------------------------------------------- - -=head2 page ( session , [ assetUrl ] ) - -Processes operations (if any), then tries the requested method on the asset corresponding to the requested URL. If that asset fails to be created, it tries the default page. - -=head3 session - -The current WebGUI::Session object. - -=head3 assetUrl - -Optionally pass in a URL to be loaded. - -=cut - -sub page { - my $session = shift; - my $assetUrl = getRequestedAssetUrl($session, shift); - my $asset = shift || getAsset($session, $assetUrl); - my $output = undef; - if (defined $asset) { - my $method = "view"; - if ($session->form->param("func")) { - $method = $session->form->param("func"); - unless ($method =~ /^[A-Za-z0-9]+$/) { - $session->errorHandler->security("to call a non-existent method $method on $assetUrl"); - $method = "view"; - } - } - ##Passive Analytics Logging - WebGUI::PassiveAnalytics::Logging::log($session, $asset); - - $output = tryAssetMethod($session,$asset,$method); - $output = tryAssetMethod($session,$asset,"view") unless ($output || ($method eq "view")); - } - if ($output eq "") { - if ($session->var->isAdminOn) { # they're expecting it to be there, so let's help them add it - my $asset = WebGUI::Asset->newByUrl($session, $session->url->getRefererUrl) || WebGUI::Asset->getDefault($session); - $output = $asset->addMissing($assetUrl); - } - } - return $output; -} - -#------------------------------------------------------------------- - -=head2 tryAssetMethod ( session ) - -Tries an asset method on the requested asset. Tries the "view" method if that method fails. - -=head3 session - -The current WebGUI::Session object. - -=cut - -sub tryAssetMethod { - my $session = shift; - my $asset = shift; - my $method = shift; - my $state = $asset->get("state"); - return undef if ($state ne "published" && $state ne "archived" && !$session->var->isAdminOn); # can't interact with an asset if it's not published - $session->asset($asset); - my $methodToTry = "www_".$method; - my $output = eval{$asset->$methodToTry()}; - if (my $e = Exception::Class->caught('WebGUI::Error::ObjectNotFound::Template')) { - $session->errorHandler->error(sprintf "%s templateId: %s assetId: %s", $e->error, $e->templateId, $e->assetId); - } - elsif ($@) { - $session->errorHandler->warn("Couldn't call method ".$method." on asset for url: ".$session->url->getRequestedUrl." Root cause: ".$@); - if ($method ne "view") { - $output = tryAssetMethod($session,$asset,'view'); - } else { - # fatals return chunked - $output = 'chunked'; - } - } - return $output; -} - 1; -