Merge branch '8' into psgi

Conflicts:
	lib/WebGUI/Asset/Template.pm
	lib/WebGUI/Session/Scratch.pm
This commit is contained in:
Doug Bell 2010-04-21 13:03:03 -05:00
commit cb3f83a93e
45 changed files with 987 additions and 860 deletions

View file

@ -449,7 +449,7 @@ Extends the master method to clear the view cache.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
$self->session->cache->remove("view_".$self->getId);
super();
};
@ -584,7 +584,7 @@ Generate the view method for the Asset, and handle caching.
sub view {
my $self = shift;
if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10) {
my $out = eval{$self->session->cache->get($self->getViewCacheKey)};
my $out = $self->session->cache->get($self->getViewCacheKey);
return $out if $out;
}
my %var = %{$self->get};
@ -594,7 +594,7 @@ sub view {
$var{fileSize} = formatBytes($self->get("assetSize"));
my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate});
if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10) {
eval{$self->session->cache->set($self->getViewCacheKey, $out, $self->get("cacheTimeout"))};
$self->session->cache->set($self->getViewCacheKey, $out, $self->get("cacheTimeout"));
}
return $out;
}

View file

@ -827,19 +827,6 @@ sub valid_parent_classes {
#----------------------------------------------------------------------------
=head2 validParent ( )
Override validParent to only allow GalleryAlbums to hold GalleryFiles.
=cut
sub validParent {
my ($class, $session) = @_;
return $session->asset->isa('WebGUI::Asset::Wobject::GalleryAlbum');
}
#----------------------------------------------------------------------------
=head2 view ( )
method called by the container www_view method.

View file

@ -224,7 +224,7 @@ sub view {
my $cache = $session->cache;
my $cacheKey = $self->getWwwCacheKey('view');
if (!$session->var->isAdminOn && $self->cacheTimeout > 10) {
my $out = eval { $cache->get( $cacheKey ) };
my $out = $cache->get( $cacheKey );
return $out if $out;
}
my %var = %{$self->get};
@ -247,7 +247,7 @@ sub view {
$var{parameters} .= sprintf("id=%s", $self->getId);
my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate});
if (!$session->var->isAdminOn && $self->cacheTimeout > 10) {
eval{ $cache->set( $cacheKey, $out, $self->get("cacheTimeout") ) };
$cache->set( $cacheKey, $out, $self->get("cacheTimeout") );
}
return $out;
}

View file

@ -186,7 +186,7 @@ sub view {
my $cache = $self->session->cache;
my $cacheKey = $self->getWwwCacheKey('view');
if (!$self->session->var->isAdminOn && $self->cacheTimeout > 10) {
my $out = eval { $cache->get( $cacheKey ) };
my $out = $cache->get( $cacheKey );
return $out if $out;
}
my %var = %{$self->get};
@ -209,7 +209,7 @@ sub view {
$var{noFileSpecified} = $i18n->get('noFileSpecified');
my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate});
if (!$self->session->var->isAdminOn && $self->cacheTimeout > 10) {
eval{ $cache->set( $cacheKey, $out, $self->cacheTimeout) };
$cache->set( $cacheKey, $out, $self->cacheTimeout);
}
return $out;
}

View file

@ -1174,7 +1174,7 @@ Extend the base class to handle caching.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getThread->getId)} if ($self->getThread);
$self->session->cache->remove("view_".$self->getThread->getId) if ($self->getThread);
super();
};

View file

@ -484,7 +484,7 @@ sub getOverrides {
my $cache = $session->cache;
my $u = WebGUI::User->new($self->session, $self->discernUserId);
my $overridesRef = eval{$cache->get($self->_overridesCacheTag)};
my $overridesRef = $cache->get($self->_overridesCacheTag);
##If admin mode is not on, and the cache is valid, and not expired, and the user object was not updated,
##return the cached value.
if ( ! $session->var->isAdminOn
@ -532,7 +532,7 @@ sub getOverrides {
}
}
$overrides{userLastUpdated} = $session->user->get('lastUpdated');
eval{$cache->set($self->_overridesCacheTag, \%overrides, 60*60)};
$cache->set($self->_overridesCacheTag, \%overrides, 60*60);
$overridesRef = \%overrides;
return %{ $overridesRef };
}
@ -879,7 +879,7 @@ Delete any cached overrides.
sub uncacheOverrides {
my $self = shift;
eval{$self->session->cache->delete($self->_overridesCacheTag)};
$self->session->cache->remove($self->_overridesCacheTag);
}
#-------------------------------------------------------------------

View file

@ -769,7 +769,7 @@ Extends the base class to handle cleaning up the cache for this asset.
override purgeCache => sub {
my $self = shift;
$self->session->cache->delete("view_".$self->getId);
$self->session->cache->remove("view_".$self->getId);
super();
};

View file

@ -35,38 +35,44 @@ property snippet => (
hoverHelp => ['snippet description','Asset_Snippet'],
default => undef,
);
around snippet => sub {
my $orig = shift;
sub _trigger_snippet {
my $self = shift;
if (@_ > 1) {
my $packed = $_[0];
if ( $self->mimeType eq "text/html" ) {
HTML::Packer::minify( \$packed, {
remove_comments => 1,
do_javascript => "shrink",
do_stylesheet => "minify",
} );
}
elsif ( $self->mimeType eq "text/css" ) {
CSS::Packer::minify( \$packed, {
compress => 'minify',
});
}
elsif ( $self->mimeType eq 'text/javascript' ) {
JavaScript::Packer::minify( \$packed, {
compress => "shrink",
});
}
$self->snippetPacked($packed);
my ($new, $old) = @_;
if ($new ne $old) {
$self->_clear_snippetPacked;
}
$self->$orig(@_);
};
}
property snippetPacked => (
fieldType => "hidden",
default => undef,
noFormPost => 1,
lazy => 1,
clearer => '_clear_snippetPacked',
builder => '_build_snippetPacked',
);
sub _build_snippetPacked {
my $self = shift;
my $snippet = $self->snippet;
if ( $self->mimeType eq "text/html" ) {
HTML::Packer::minify( \$snippet, {
remove_comments => 1,
do_javascript => "shrink",
do_stylesheet => "minify",
} );
}
elsif ( $self->mimeType eq "text/css" ) {
CSS::Packer::minify( \$snippet, {
compress => 'minify',
});
}
elsif ( $self->mimeType eq 'text/javascript' ) {
JavaScript::Packer::minify( \$snippet, {
compress => "shrink",
});
}
$snippet;
}
property usePacked => (
tab => 'properties',
fieldType => 'yesNo',
@ -165,30 +171,6 @@ sub exportGetUrlAsPath {
#-------------------------------------------------------------------
=head2 getCache ( $calledAsWebMethod )
Overrides the base method to handle Snippet specific caching.
=head3 $calledAsWebMethod
If this is true, then change the cache key.
=cut
sub getCache {
my $self = shift;
my $calledAsWebMethod = shift;
my $session = $self->session;
my $cacheKey = "view_".$calledAsWebMethod.'_'.$self->getId;
if ($session->env->sslRequest) {
$cacheKey .= '_ssl';
}
my $cache = WebGUI::Cache->new($session, $cacheKey);
return $cache;
}
#-------------------------------------------------------------------
=head2 getToolbar ( )
Returns a toolbar with a set of icons that hyperlink to functions that delete, edit, promote, demote, cut, and copy.
@ -229,10 +211,10 @@ override purgeCache => sub {
my $self = shift;
my $cache = $self->session->cache;
eval {
$cache->delete("view__".$self->getId);
$cache->delete("view_1_".$self->getId);
$cache->delete("view__".$self->getId . '_ssl');
$cache->delete("view_1_".$self->getId . '_ssl');
$cache->remove("view__".$self->getId);
$cache->remove("view_1_".$self->getId);
$cache->remove("view__".$self->getId . '_ssl');
$cache->remove("view_1_".$self->getId . '_ssl');
};
super();
};
@ -273,7 +255,7 @@ sub view {
|| ($versionTag && $versionTag->getId eq $self->tagId);
my $cacheKey = $self->getWwwCacheKey('view', $calledAsWebMethod);
unless ($noCache) {
my $out = eval { $session->cache->get( $cacheKey )};
my $out = $session->cache->get( $cacheKey );
return $out if $out;
}
my $output = $self->usePacked
@ -286,7 +268,7 @@ sub view {
}
WebGUI::Macro::process($session,\$output);
unless ($noCache) {
eval { $session->cache->set( $cacheKey, $output, $self->cacheTimeout) };
$session->cache->set( $cacheKey, $output, $self->cacheTimeout);
}
return $output;
}

View file

@ -85,6 +85,7 @@ sub _build_templatePacked {
do_javascript => 'shrink',
do_stylesheet => 'minify',
} );
$template;
}
property usePacked => (

View file

@ -290,7 +290,7 @@ See WebGUI::Asset::purgeCache() for details.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
$self->session->cache->remove("view_".$self->getId);
super();
};
@ -322,7 +322,7 @@ sub view {
my $cache = $self->session->cache;
if (!$self->session->var->isAdminOn && $self->cacheTimeout > 10 && !$self->session->form->process("overrideTemplateId") &&
!$self->session->form->process($self->paginateVar) && !$self->session->form->process("makePrintable")) {
my $out = eval{$cache->get($self->getViewCacheKey)};
my $out = $cache->get($self->getViewCacheKey);
return $out if $out;
}
my %var;
@ -386,7 +386,7 @@ sub view {
my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate});
if (!$self->session->var->isAdminOn && $self->cacheTimeout > 10 && !$self->session->form->process("overrideTemplateId") &&
!$self->session->form->process($self->paginateVar) && !$self->session->form->process("makePrintable")) {
eval{$cache->set($self->getViewCacheKey, $out, $self->cacheTimeout)};
$cache->set($self->getViewCacheKey, $out, $self->cacheTimeout);
}
return $out;
}

View file

@ -1436,8 +1436,8 @@ override purgeCache => sub {
my $self = shift;
my $cache = $self->session->cache;
eval {
$cache->delete("view_".$self->getId);
$cache->delete($self->_visitorCacheKey);
$cache->remove("view_".$self->getId);
$cache->remove($self->_visitorCacheKey);
};
super();
};
@ -1584,7 +1584,7 @@ sub view {
my $self = shift;
my $cache = $self->session->cache;
if ($self->_visitorCacheOk) {
my $out = eval{$cache->get($self->_visitorCacheKey)};
my $out = $cache->get($self->_visitorCacheKey);
$self->session->errorHandler->debug("HIT") if $out;
return $out if $out;
}
@ -1595,7 +1595,7 @@ sub view {
$self->prepareView unless ($self->{_viewTemplate});
my $out = $self->processTemplate($self->getViewTemplateVars,undef,$self->{_viewTemplate});
if ($self->_visitorCacheOk) {
eval{$cache->set($self->_visitorCacheKey, $out, $self->visitorCacheTimeout)};
$cache->set($self->_visitorCacheKey, $out, $self->visitorCacheTimeout);
}
return $out;
}

View file

@ -190,7 +190,7 @@ See WebGUI::Asset::purgeCache() for details.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
$self->session->cache->remove("view_".$self->getId);
super();
};
@ -209,7 +209,7 @@ sub view {
# Use cached version for visitors
my $cache = $self->session->cache;
if ($self->session->user->isVisitor) {
my $out = eval{$cache->get("view_".$self->getId)};
my $out = $cache->get("view_".$self->getId);
return $out if $out;
}
@ -274,7 +274,7 @@ sub view {
# Update the cache
if ($self->session->user->isVisitor) {
eval{$cache->set("view_".$self->getId, $out, $self->visitorCacheTimeout)};
$cache->set("view_".$self->getId, $out, $self->visitorCacheTimeout);
}
return $out;

View file

@ -342,34 +342,6 @@ use WebGUI::HTML;
#----------------------------------------------------------------------------
=head2 addChild ( properties, [...] )
Add a child to this asset. See C<WebGUI::AssetLineage> for more info.
Overridden to ensure that only GalleryAlbums are added to Galleries.
=cut
sub addChild {
my $self = shift;
my $properties = shift;
my $albumClass = "WebGUI::Asset::Wobject::GalleryAlbum";
# Load the class
WebGUI::Pluggable::load( $properties->{className} );
if ( !$properties->{className}->isa( $albumClass ) ) {
$self->session->errorHandler->security(
"add a ".$properties->{className}." to a ".$self->className
);
return undef;
}
return $self->next::method( $properties, @_ );
}
#----------------------------------------------------------------------------
=head2 appendTemplateVarsSearchForm ( var )
Appends the template vars for the search form to the hash reference C<var>.

View file

@ -269,8 +269,8 @@ override purgeCache => sub {
my $self = shift;
my $cache = $self->session->cache;
eval {
$cache->delete([$self->proxiedUrl,"URL"]);
$cache->delete([$self->proxiedUrl,"HEADER"]);
$cache->remove($self->proxiedUrl."_URL");
$cache->remove($self->proxiedUrl."_HEADER");
};
super();
};
@ -316,8 +316,8 @@ sub view {
my $cache = $self->session->cache;
if ($requestMethod =~ /^GET$/i) {
eval {
$var{header} = $cache->get([$proxiedUrl,'HEADER']);
$var{content} = $cache->get([$proxiedUrl,"URL"]);
$var{header} = $cache->get($proxiedUrl.'_HEADER');
$var{content} = $cache->get($proxiedUrl."_URL");
};
}
@ -459,8 +459,8 @@ sub view {
}
unless ($self->cacheTimeout <= 10) {
eval{
$cache->set([$proxiedUrl,'URL'], $var{content}, $self->cacheTimeout);
$cache->set([$proxiedUrl,'HEADER'], $var{header}, $self->cacheTimeout);
$cache->set($proxiedUrl.'URL', $var{content}, $self->cacheTimeout);
$cache->set($proxiedUrl.'HEADER', $var{header}, $self->cacheTimeout);
};
}
}

View file

@ -420,12 +420,12 @@ override www_view => sub {
return $check if (defined $check);
my $cacheKey = $self->getWwwCacheKey('view');
my $cache = $session->cache;
my $out = eval{ $cache->get($cacheKey) };
my $out = $cache->get($cacheKey);
unless ($out) {
$self->prepareView;
$session->stow->set("cacheFixOverride", 1);
$out = $self->processStyle($self->view, { noHeadTags => 1 });
eval{ $cache->set($cacheKey, $out, 60) };
$cache->set($cacheKey, $out, 60);
$session->stow->delete("cacheFixOverride");
}
# keep those ads rotating even though the output is cached

View file

@ -85,6 +85,7 @@ property startZoom => (
maximum => 19,
label => ["startZoom label", 'Asset_Map'],
hoverHelp => ["startZoom description", 'Asset_Map'],
default => 1,
);
property templateIdEditPoint => (
tab => "display",
@ -116,6 +117,7 @@ property workflowIdPoint => (
label => ["workflowIdPoint label", 'Asset_Map'],
hoverHelp => ["workflowIdPoint description", 'Asset_Map'],
type => 'WebGUI::VersionTag',
default => "pbworkflow000000000003",
);
#-------------------------------------------------------------------

View file

@ -486,7 +486,7 @@ sub getListings {
|| ($versionTag && $versionTag->getId eq $self->tagId);
my $cache = $session->cache;
unless ($noCache) {
$listingsEncoded = eval{$cache->get("matrixListings_".$self->getId)};
$listingsEncoded = $cache->get("matrixListings_".$self->getId);
}
if ($listingsEncoded){
@ -526,7 +526,7 @@ assetData.revisionDate
}
$listingsEncoded = JSON->new->encode($listings);
eval{$cache->set("matrixListings_".$self->getId, $listingsEncoded, $self->listingsCacheTimeout)};
$cache->set("matrixListings_".$self->getId, $listingsEncoded, $self->listingsCacheTimeout);
}
return $listings;
}
@ -647,7 +647,7 @@ sub view {
|| ($versionTag && $versionTag->getId eq $self->tagId);
my $cache = $session->cache;
unless ($noCache) {
$varStatisticsEncoded = eval{$cache->get("matrixStatistics_".$self->getId)};
$varStatisticsEncoded = $cache->get("matrixStatistics_".$self->getId);
}
if ($varStatisticsEncoded){
@ -797,7 +797,7 @@ sub view {
[$self->getId]);
$varStatisticsEncoded = JSON->new->encode($varStatistics);
eval{$cache->set("matrixStatistics_".$self->getId, $varStatisticsEncoded, $self->statisticsCacheTimeout)};
$cache->set("matrixStatistics_".$self->getId, $varStatisticsEncoded, $self->statisticsCacheTimeout);
}
foreach my $statistic (keys %{$varStatistics}) {

View file

@ -72,7 +72,7 @@ See WebGUI::Asset::purgeCache() for details.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
$self->session->cache->remove("view_".$self->getId);
super();
};
@ -88,7 +88,7 @@ sub view {
my $self = shift;
my $cache = $self->session->cache;
if ($self->session->user->isVisitor) {
my $out = eval{$cache->get("view_".$self->getId)};
my $out = $cache->get("view_".$self->getId);
return $out if $out;
}
my %var;
@ -153,7 +153,7 @@ sub view {
my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate});
if ($self->session->user->isVisitor) {
eval{$cache->set("view_".$self->getId, $out, $self->visitorCacheTimeout)};
$cache->set("view_".$self->getId, $out, $self->visitorCacheTimeout);
}
return $out;
}

View file

@ -82,7 +82,7 @@ See WebGUI::Asset::purgeCache() for details.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
eval{$self->session->cache->remove("view_".$self->getId)};
super();
};

View file

@ -559,7 +559,7 @@ See WebGUI::Asset::purgeCache() for details.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
$self->session->cache->remove("view_".$self->getId);
super();
};

View file

@ -115,23 +115,36 @@ Combines all feeds into a single XML::FeedPP object.
sub generateFeed {
my $self = shift;
my $limit = shift || $self->maxHeadlines;
my $session = $self->session;
my ( $log, $cache ) = $session->quick(qw( log cache ));
my $feed = XML::FeedPP::Atom->new();
my $log = $self->session->log;
# build one feed out of many
my $newlyCached = 0;
my $cache = $self->session->cache;
foreach my $url (split(/\s+/, $self->rssUrl)) {
$log->info("Processing FEED: ".$url);
$url =~ s/^feed:/http:/;
if ($self->processMacroInRssUrl) {
WebGUI::Macro::process($self->session, \$url);
}
my $value = eval{$cache->get($url)};
unless ($value) {
$value = eval{$cache->setByHttp($url, $self->cacheTimeout)};
$newlyCached = 1;
}
my $value = $cache->compute( $url, sub {
my $ua = LWP::UserAgent->new(
env_proxy => 1,
agent => "WebGUI/" . $WebGUI::VERSION,
timeout => 30,
);
my $r = $ua->get( $url );
if ( $r->is_error ) {
$session->log->warn( "Could not get syndicated content from '$url': " . $r->status_line );
}
else {
$newlyCached = 1;
return $r->decoded_content;
}
}, $self->cacheTimeout );
# if the content can be downgraded, it is either valid latin1 or didn't have
# an HTTP Content-Encoding header. In the second case, XML::FeedPP will take
# care of any encoding specified in the XML prolog
@ -142,7 +155,7 @@ sub generateFeed {
$feed->merge_item($singleFeed);
};
if ($@) {
$log->error("Syndicated Content asset (".$self->getId.") has a bad feed URL (".$url."). Failed with ".$@);
$log->warn("Syndicated Content asset (".$self->getId.") has a bad feed URL (".$url."). Failed with ".$@);
}
}
@ -159,7 +172,7 @@ sub generateFeed {
}
}
my %seen = {};
my %seen = ();
my @items = $feed->get_item;
$feed->clear_item;
ITEM: foreach my $item (@items) {
@ -306,7 +319,7 @@ See WebGUI::Asset::purgeCache() for details.
override purgeCache => sub {
my $self = shift;
eval{$self->session->cache->delete("view_".$self->getId)};
$self->session->cache->remove("view_".$self->getId);
super();
};
@ -324,7 +337,7 @@ sub view {
# try the cached version
my $cache = $session->cache;
my $out = eval{$cache->get("view_".$self->getId)};
my $out = $cache->get("view_".$self->getId);
return $out if ($out ne "" && !$session->var->isAdminOn);
#return $out if $out;
@ -332,7 +345,7 @@ sub view {
my $feed = $self->generateFeed;
$out = $self->processTemplate($self->getTemplateVariables($feed),undef,$self->{_viewTemplate});
if (!$session->var->isAdminOn && $self->cacheTimeout > 10) {
eval{$cache->set("view_".$self->getId, $out, $self->cacheTimeout)};
$cache->set("view_".$self->getId, $out, $self->cacheTimeout);
}
return $out;
}

View file

@ -2656,7 +2656,7 @@ sub www_export {
push(@fieldLabels,@metaDataFields)
}
$query = eval{$session->cache->get("query_".$thingId)};
$query = $session->cache->get("query_".$thingId);
$sth = $session->db->read($query);
### Loop through the returned structure and put it through Text::CSV
@ -3301,7 +3301,7 @@ sequenceNumber');
}
# store query in cache for thirty minutes
eval{$self->session->cache->set("query_".$thingId, $query, 30*60)};
$self->session->cache->set("query_".$thingId, $query, 30*60);
$paginatePage = $self->session->form->param('pn') || 1;
$currentUrl = $self->session->url->append($currentUrl, "orderBy=".$orderBy) if $orderBy;

View file

@ -187,6 +187,7 @@ with 'WebGUI::Role::Asset::RssFeed';
use WebGUI::International;
use HTML::Parser;
use URI::Escape;
use WebGUI::Utility qw/isIn/;
#-------------------------------------------------------------------