From d6400799aa17e150a3a524f5b4f55a95d4624095 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 6 Jul 2009 19:35:00 +0000 Subject: [PATCH] Allow snippets to be really empty, without showing the Page Not Found screen. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Snippet.pm | 8 ++++++-- lib/WebGUI/URL/Content.pm | 18 ++++++++++++++++++ t/Asset/Snippet.t | 24 ++++++++---------------- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 3033bb470..b7c91454e 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -3,6 +3,7 @@ - fixed: Have just 1 list of protected groups. Use that everywhere. - fixed #10488: Map.gif is missing for Map wobject - fixed #10553: WebGUI vulnerable to CSRF attacks + - fixed #10607: snippets empty 7.7.13 - fixed #10574: Creating Calendar Entry diff --git a/lib/WebGUI/Asset/Snippet.pm b/lib/WebGUI/Asset/Snippet.pm index 283d52b8d..6ff5d2c55 100644 --- a/lib/WebGUI/Asset/Snippet.pm +++ b/lib/WebGUI/Asset/Snippet.pm @@ -294,7 +294,7 @@ sub view { unless ($noCache) { WebGUI::Cache->new($session,"view_".$calledAsWebMethod."_".$self->getId)->set($output,$self->get("cacheTimeout")); } - return $output; + return $output; } #------------------------------------------------------------------- @@ -311,7 +311,11 @@ sub www_view { my $mimeType=$self->getValue('mimeType'); $self->session->http->setMimeType($mimeType || 'text/html'); $self->session->http->setCacheControl($self->get("cacheTimeout")); - return $self->view(1); + my $output = $self->view(1); + if (!defined $output) { + $output = 'empty'; + } + return $output; } diff --git a/lib/WebGUI/URL/Content.pm b/lib/WebGUI/URL/Content.pm index 3c3ef874a..14a2d8fd4 100644 --- a/lib/WebGUI/URL/Content.pm +++ b/lib/WebGUI/URL/Content.pm @@ -46,6 +46,18 @@ These subroutines are available from this package: The Apache request handler for this package. +This handler takes care of certain special tokens returns by a sub-handler. + +=head3 chunked + +This indicates that the handler has already returned the output to Apache. Commonly +used in Assets to get head tags back to the user to speed up the rendering process. + +=head3 empty + +This token indicates that the asset is legitimatally empty. Returns nothing +to the user, instead of displaying the Page Not Found page. + =cut sub handler { @@ -71,6 +83,12 @@ sub handler { } last; } + if ($output eq "empty") { + if ($session->errorHandler->canShowDebug()) { + $session->output->print($session->errorHandler->showDebug(),1); + } + last; + } elsif (defined $output && $output ne "") { $session->http->sendHeader; $session->output->print($output); diff --git a/t/Asset/Snippet.t b/t/Asset/Snippet.t index 4dc9f8c7e..e76527b81 100644 --- a/t/Asset/Snippet.t +++ b/t/Asset/Snippet.t @@ -16,13 +16,14 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 15; # increment this value for each test you create +use Test::More tests => 16; # increment this value for each test you create use WebGUI::Asset::Snippet; my $session = WebGUI::Test->session; my $node = WebGUI::Asset->getImportNode($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->set({name=>"Snippet Test"}); +WebGUI::Test->tagsToRollback($versionTag); my $snippet = $node->addChild({className=>'WebGUI::Asset::Snippet'}); # Test for a sane object type @@ -77,24 +78,15 @@ $snippet->update({ snippet => q|^SQL(select value from settings where name="");| }); -my $sqlMacroAdded = exists $session->config->get('macros')->{'SQL'}; -if (! $sqlMacroAdded) { - $session->config->addToHash('macros', 'SQL', 'SQL'); -} +WebGUI::Test->originalConfig('macros'); +$session->config->addToHash('macros', 'SQL', 'SQL'); is($snippet->view(), 'WebGUI', 'Interpolating macros in works with template in the correct order'); -if (! $sqlMacroAdded) { - $session->config->deleteFromHash('macros', 'SQL'); -} +my $empty = $node->addChild( { className => 'WebGUI::Asset::Snippet', } ); +is($empty->www_view, 'empty', 'www_view: snippet with no content returns "empty"'); TODO: { - local $TODO = "Tests to make later"; - ok(0, 'Test indexContent method'); + local $TODO = "Tests to make later"; + ok(0, 'Test indexContent method'); } - -END { - # Clean up after thy self - $versionTag->rollback(); -} -