diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index 2ab3e7c4b..cd0ca554f 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -1,6 +1,9 @@
7.3.12
- Performance enhancement added to Page Layouts to make them do template
processing twice as fast.
+ - Made Weather Data asset more fault tollerant.
+ - Made CS related upgrades more fault tollerant.
+ - Enhanced HTTP caching directives.
- fix: Fixing bad link on the Event page to the search engine. Added a new
Event template variable called urlSearch to handle it. (perlDreamer Consulting, LLC)
- fix: Set default groupIdEditEvent to groupIdEdit during upgrade (perlDreamer Consulting, LLC)
diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm
index 70c3bcd90..55f704ac4 100644
--- a/lib/WebGUI.pm
+++ b/lib/WebGUI.pm
@@ -126,13 +126,21 @@ sub contentHandler {
}
}
} else {
- $out = page($session);
+ if ($r->headers_in->{'If-Modified-Since'} ne "" && $session->var->get("userId") eq "1") {
+ $http->setStatus("304","Content Not Modified");
+ $http->sendHeader;
+ $session->close;
+ return Apache2::Const::OK();
+ } else {
+ $out = page($session);
+ }
}
my $filename = $http->getStreamedFile();
if ((defined $filename) && ($config->get("enableStreamingUploads") eq "1")) {
my $ct = guess_media_type($filename);
my $oldContentType = $r->content_type($ct);
if ($r->sendfile($filename) ) {
+ $session->close;
return Apache2::Const::OK();
} else {
$r->content_type($oldContentType);
diff --git a/lib/WebGUI/Asset/Post/Thread.pm b/lib/WebGUI/Asset/Post/Thread.pm
index 17959fc08..fa6386f7f 100644
--- a/lib/WebGUI/Asset/Post/Thread.pm
+++ b/lib/WebGUI/Asset/Post/Thread.pm
@@ -792,7 +792,12 @@ select sum(Post.rating) from Post
EOSQL
my ($sum) = $self->session->db->quickArray($ratingSumSQL, [$self->getId]);
$self->update({threadRating=>$sum});
- $self->getParent->recalculateRating;
+ my $parent = $self->getParent;
+ if (defined $parent) {
+ $parent->recalculateRating;
+ } else {
+ $self->session->errorHandler->error("Couldn't get parent for thread ".$self->getId);
+ }
}
diff --git a/lib/WebGUI/Asset/Wobject/WeatherData.pm b/lib/WebGUI/Asset/Wobject/WeatherData.pm
index 09c0d9867..5c0f078bc 100644
--- a/lib/WebGUI/Asset/Wobject/WeatherData.pm
+++ b/lib/WebGUI/Asset/Wobject/WeatherData.pm
@@ -190,23 +190,26 @@ to be displayed within the page style
sub view {
my $self = shift;
my %var;
- foreach my $location (split("\n", $self->get("locations"))) {
- my $weather = Weather::Com::Simple->new({
- 'partner_id' => $self->get("partnerId"),
- 'license' => $self->get("licenseKey"),
- 'place' => $location,
- 'cache' => '/tmp',
- });
- foreach my $foundLocation (@{$weather->get_weather}) {
- push(@{$var{'ourLocations.loop'}}, {
- query => $location,
- cityState => $foundLocation->{place} || $location,
- sky => $foundLocation->{conditions} || 'N/A',
- tempF => $foundLocation->{temperature_fahrenheit} || 'N/A',
- tempC => $foundLocation->{temperature_celsius} || 'N/A',
- iconUrl => $self->session->url->extras("wobject/WeatherData/".$self->_chooseWeatherConditionsIcon($foundLocation->{conditions}).'.jpg'),
- iconAlt => $foundLocation->{conditions},
- });
+ if ($self->get("partnerId") ne "" && $self->get("licenseKey") ne "") {
+ foreach my $location (split("\n", $self->get("locations"))) {
+ my $weather = Weather::Com::Simple->new({
+ 'partner_id' => $self->get("partnerId"),
+ 'license' => $self->get("licenseKey"),
+ 'place' => $location,
+ 'cache' => '/tmp',
+ });
+ next unless defined $weather;
+ foreach my $foundLocation (@{$weather->get_weather}) {
+ push(@{$var{'ourLocations.loop'}}, {
+ query => $location,
+ cityState => $foundLocation->{place} || $location,
+ sky => $foundLocation->{conditions} || 'N/A',
+ tempF => $foundLocation->{temperature_fahrenheit} || 'N/A',
+ tempC => $foundLocation->{temperature_celsius} || 'N/A',
+ iconUrl => $self->session->url->extras("wobject/WeatherData/".$self->_chooseWeatherConditionsIcon($foundLocation->{conditions}).'.jpg'),
+ iconAlt => $foundLocation->{conditions},
+ });
+ }
}
}
return $self->processTemplate(\%var, undef, $self->{_viewTemplate});
diff --git a/lib/WebGUI/Session/Http.pm b/lib/WebGUI/Session/Http.pm
index 3247aa777..e00b7d466 100644
--- a/lib/WebGUI/Session/Http.pm
+++ b/lib/WebGUI/Session/Http.pm
@@ -266,21 +266,26 @@ sub sendHeader {
$request->content_type($self->getMimeType || "text/html; charset=UTF-8");
my $cacheControl = $self->getCacheControl;
my $date = ($userId eq "1") ? $datetime->epochToHttp($self->getLastModified) : $datetime->epochToHttp;
+ $request->headers_out->set('Cache-Control' => "must-revalidate");
$request->headers_out->set('Last-Modified' => $date);
- if ($cacheControl eq "none" || $self->session->setting->get("preventProxyCache") || ($cacheControl eq "" && $userId ne "1")) {
- $request->headers_out->set("Cache-Control" => "private");
- $request->no_cache(1);
- } elsif ($cacheControl ne "" && $request->protocol =~ /(\d\.\d)/ && $1 >= 1.1){
- my $extras = "";
- $extras .= ", private" unless ($userId eq "1");
- $request->headers_out->set('Cache-Control' => "max-age=" . $cacheControl.$extras);
- } elsif ($cacheControl ne "") {
- $request->headers_out->set("Cache-Control" => "private") unless ($userId eq "1");
- my $date = $datetime->epochToHttp(time() + $cacheControl);
- $request->headers_out->set('Expires' => $date);
- }
+# if ($cacheControl eq "none" || $self->session->setting->get("preventProxyCache") || ($cacheControl eq "" && $userId ne "1")) {
+# $request->headers_out->set("Cache-Control" => "private");
+# $request->no_cache(1);
+# } elsif ($cacheControl ne "" && $request->protocol =~ /(\d\.\d)/ && $1 >= 1.1){
+# my $extras = "";
+# $extras .= ", private" unless ($userId eq "1");
+# $request->headers_out->set('Cache-Control' => "must-revalidate, max-age=" . $cacheControl.$extras);
+# } elsif ($cacheControl ne "") {
+# if ($userId eq "1") {
+# $request->headers_out->set("Cache-Control" => "must-revalidate");
+# } else {
+# $request->headers_out->set("Cache-Control" => "private");
+# }
+# my $date = $datetime->epochToHttp(time() + $cacheControl);
+# $request->headers_out->set('Expires' => $date);
+# }
if ($self->getFilename) {
- $request->headers_out->set('Content-Disposition' => qq!attachment; filename="!.$self->getFilename().'"');
+ $request->headers_out->set('Content-Disposition' => qq{attachment; filename="}.$self->getFilename().'"');
}
$request->status($self->getStatus());
$request->status_line($self->getStatus().' '.$self->getStatusDescription());
diff --git a/lib/WebGUI/Session/Style.pm b/lib/WebGUI/Session/Style.pm
index fb4ec5e89..19bf46342 100644
--- a/lib/WebGUI/Session/Style.pm
+++ b/lib/WebGUI/Session/Style.pm
@@ -191,6 +191,8 @@ if ($self->session->user->isInGroup(2) || $self->session->setting->get("preventP
';
$self->session->http->setCacheControl("none");
+} else {
+ $var{'head.tags'} .= ''
}
my $style = WebGUI::Asset::Template->new($self->session,$templateId);
my $output;