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,