diff --git a/docs/upgrades/upgrade_6.8.8-6.99.0.pl b/docs/upgrades/upgrade_6.8.8-6.99.0.pl index 36fc27c12..432d349fd 100644 --- a/docs/upgrades/upgrade_6.8.8-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.8-6.99.0.pl @@ -95,6 +95,7 @@ sub changeCache { $session->db->write("alter table Folder add column visitorCacheTimeout int not null default 3600"); $session->db->write("alter table HttpProxy add column cacheTimeout int not null default 0"); $session->db->write("alter table SQLReport add column cacheTimeout int not null default 0"); + $session->db->write("alter table Snippet add column cacheTimeout int not null default 3600"); $session->db->write("alter table FileAsset add column cacheTimeout int not null default 3600"); $session->db->write("alter table Product add column cacheTimeout int not null default 3600"); $session->db->write("alter table SyndicatedContent add column cacheTimeout int not null default 3600"); diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index 92dd646fd..6c1bba3ba 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -319,7 +319,7 @@ sub www_view { } my $storage = $self->getStorageLocation; $self->session->http->setRedirect($storage->getUrl($self->get("filename"))); - return ""; + return "1"; } diff --git a/lib/WebGUI/Asset/File/ZipArchive.pm b/lib/WebGUI/Asset/File/ZipArchive.pm index 2972f4126..f3024c561 100644 --- a/lib/WebGUI/Asset/File/ZipArchive.pm +++ b/lib/WebGUI/Asset/File/ZipArchive.pm @@ -309,7 +309,7 @@ sub www_view { return $self->getContainer->www_view; } $self->session->http->setRedirect($self->getFileUrl($self->getValue("showPage"))); - return ""; + return "1"; } diff --git a/lib/WebGUI/Asset/Snippet.pm b/lib/WebGUI/Asset/Snippet.pm index 00dbcc42b..c565698fa 100644 --- a/lib/WebGUI/Asset/Snippet.pm +++ b/lib/WebGUI/Asset/Snippet.pm @@ -18,6 +18,7 @@ use strict; use WebGUI::Asset; use WebGUI::Asset::Template; use WebGUI::Macro; +use HTTP::Date; our @ISA = qw(WebGUI::Asset); @@ -71,6 +72,14 @@ sub definition { fieldType=>'codearea', defaultValue=>undef }, + cacheTimeout => { + tab => "display", + fieldType => "interval", + defaultValue => 3600, + uiLevel => 8, + label => $i18n->get("cache timeout"), + hoverHelp => $i18n->get("cache timeout help") + }, processAsTemplate=>{ fieldType=>'yesNo', defaultValue=>0 @@ -157,11 +166,20 @@ sub indexContent { sub view { my $self = shift; my $calledAsWebMethod = shift; + if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10) { + my $out = WebGUI::Cache->new($self->session,"view_".$calledAsWebMethod."_".$self->getId)->get; + return $out if $out; + } my $output = $self->get("snippet"); WebGUI::Macro::process($self->session,\$output); $output = $self->getToolbar.$output if ($self->session->var->get("adminOn") && !$calledAsWebMethod); - return $output unless ($self->getValue("processAsTemplate")); - return WebGUI::Asset::Template->processRaw($self->session, $output); + unless ($self->getValue("processAsTemplate")) { + $output = WebGUI::Asset::Template->processRaw($self->session, $output); + } + if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10) { + WebGUI::Cache->new($self->session,"view_".$calledAsWebMethod."_".$self->getId)->set($output,$self->get("cacheTimeout")); + } + return $output; } #------------------------------------------------------------------- @@ -185,6 +203,12 @@ sub www_view { my $self = shift; my $mimeType=$self->getValue('mimeType'); $self->session->http->setMimeType($mimeType || 'text/html'); + my $request = $self->session->request; + if (defined $request && $request->protocol =~ /(\d\.\d)/ && $1 >= 1.1){ + $request->header_out('Cache-Control', "max-age=" . $self->get("cacheTimeout")); + } elsif (defined $request) { + $request->header_out('Expires', HTTP::Date::time2str(time + $self->get("cacheTimeout"))); + } return $self->view(1); } diff --git a/lib/WebGUI/Help/Asset_Snippet.pm b/lib/WebGUI/Help/Asset_Snippet.pm index 088f98548..10fd6468b 100644 --- a/lib/WebGUI/Help/Asset_Snippet.pm +++ b/lib/WebGUI/Help/Asset_Snippet.pm @@ -6,6 +6,11 @@ our $HELP = { title => 'snippet add/edit title', body => 'snippet add/edit body', fields => [ + { + title => 'cache timeout', + namespace => 'Asset_File', + description => 'cache timeout help' + }, { title => 'assetName', description => 'snippet description', diff --git a/lib/WebGUI/Session/Style.pm b/lib/WebGUI/Session/Style.pm index cb9b77b33..b4d48a95b 100644 --- a/lib/WebGUI/Session/Style.pm +++ b/lib/WebGUI/Session/Style.pm @@ -187,6 +187,7 @@ if ($self->session->user->isInGroup(2)) { '; + $self->session->request->no_cache(1) if ($self->session->request); } my $style = WebGUI::Asset::Template->new($self->session,$templateId); my $output; diff --git a/lib/WebGUI/i18n/English/Asset_Snippet.pm b/lib/WebGUI/i18n/English/Asset_Snippet.pm index bb35e3e05..c68d0ff66 100644 --- a/lib/WebGUI/i18n/English/Asset_Snippet.pm +++ b/lib/WebGUI/i18n/English/Asset_Snippet.pm @@ -2,6 +2,16 @@ package WebGUI::i18n::English::Asset_Snippet; our $I18N = { + 'cache timeout' => { + message => q|Cache Timeout|, + lastUpdated => 0 + }, + + 'cache timeout help' => { + message => q|Since all users will see this asset the same way, we can cache it for long periods of time to increase performance. How long should we cache it?

UI Level: 8|, + lastUpdated => 0 + }, + 'assetName' => { message => q|Snippet|, lastUpdated => 1128830080,