diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index 4541680ef..e49c38e0a 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -1,6 +1,7 @@
7.5.1
- fix: Friends language error (perlDreamer Consulting, LLC.)
http://www.plainblack.com/bugs/tracker/friends-language-error
+ - fix: content handler and redirects
- fix: newByDynamicClass would die if given bad parameters, must return undef
- fix: AssetPackage.pm would give an error on importing a package through
the web interface, but the package would be imported successfully.
diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm
index 833a77416..5c95f09fa 100644
--- a/lib/WebGUI/Asset.pm
+++ b/lib/WebGUI/Asset.pm
@@ -297,15 +297,18 @@ sub checkView {
if ($conf->get("sslEnabled") && $self->get("encryptPage") && $env->get("HTTPS") ne "on" && !$env->get("SSLPROXY")) {
# getUrl already changes url to https if 'encryptPage'
$http->setRedirect($self->getUrl);
- return "redirect";
+ $http->sendHeader;
+ return "chunked";
}
elsif ($var->isAdminOn && $self->get("state") =~ /^trash/) { # show em trash
$http->setRedirect($self->getUrl("func=manageTrash"));
- return "redirect";
+ $http->sendHeader;
+ return "chunked";
}
elsif ($var->isAdminOn && $self->get("state") =~ /^clipboard/) { # show em clipboard
$http->setRedirect($self->getUrl("func=manageClipboard"));
- return "redirect";
+ $http->sendHeader;
+ return "chunked";
}
elsif ($self->get("state") ne "published") { # tell em it doesn't exist anymore
$http->setStatus("410");
@@ -2374,10 +2377,8 @@ sub www_changeUrlConfirm {
if ($self->session->form->param("proceed") eq "manageAssets") {
$self->session->http->setRedirect($self->getUrl('func=manageAssets'));
- return 'redirect';
} else {
$self->session->http->setRedirect($self->getUrl());
- return 'redirect';
}
return undef;
@@ -2459,7 +2460,7 @@ sub www_editSave {
$self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId)
);
}
- return "1";
+ return undef;
}
# Handle Auto Request Commit setting
@@ -2474,6 +2475,7 @@ sub www_editSave {
$self->session->http->setRedirect(
$self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId)
);
+ return undef;
}
}
@@ -2556,12 +2558,18 @@ Returns the view() method of the asset object if the requestor canView.
sub www_view {
my $self = shift;
+
+ # don't allow viewing of the root asset
if ($self->getId eq "PBasset000000000000001") {
$self->session->http->setRedirect($self->getDefault($self->session)->getUrl);
- return "1";
+ return undef;
}
+
+ # check view privs
my $check = $self->checkView;
return $check if (defined $check);
+
+ # if all else fails
$self->prepareView;
$self->session->output->print($self->view);
return undef;
diff --git a/lib/WebGUI/Asset/FilePile.pm b/lib/WebGUI/Asset/FilePile.pm
index 4f71c9568..38f1ad8ae 100644
--- a/lib/WebGUI/Asset/FilePile.pm
+++ b/lib/WebGUI/Asset/FilePile.pm
@@ -192,16 +192,19 @@ sub editSave {
if ($self->session->form->process("saveAndCommit") ne "") {
if ($self->session->setting->get("skipCommitComments")) {
$self->session->http->setRedirect($self->getUrl("op=commitVersionTagConfirm;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId));
- } else {
+ }
+ else {
$self->session->http->setRedirect($self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId));
}
- return "1";
+ return undef;
}
if ($self->session->setting->get("autoRequestCommit")) {
if ($self->session->setting->get("skipCommitComments")) {
WebGUI::VersionTag->getWorking($self->session)->requestCommit;
- } else {
+ }
+ else {
$self->session->http->setRedirect($self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId));
+ return undef;
}
}
diff --git a/lib/WebGUI/Asset/RSSCapable.pm b/lib/WebGUI/Asset/RSSCapable.pm
index cc43e2019..58709a513 100644
--- a/lib/WebGUI/Asset/RSSCapable.pm
+++ b/lib/WebGUI/Asset/RSSCapable.pm
@@ -196,7 +196,7 @@ sub www_viewRSS {
$session->http->setRedirect($self->getRssUrl);
}
- return "";
+ return undef;
}
diff --git a/lib/WebGUI/Asset/Redirect.pm b/lib/WebGUI/Asset/Redirect.pm
index f908a7718..c9ac9117d 100644
--- a/lib/WebGUI/Asset/Redirect.pm
+++ b/lib/WebGUI/Asset/Redirect.pm
@@ -115,24 +115,24 @@ A web executable method that redirects the user to the specified page, or displa
=cut
sub www_view {
- my $self = shift;
- return $self->session->privilege->noAccess() unless $self->canView;
+ my $self = shift;
+ return $self->session->privilege->noAccess() unless $self->canView;
my $i18n = WebGUI::International->new($self->session, "Asset_Redirect");
- my $url = $self->get("redirectUrl");
- WebGUI::Macro::process($self->session, \$url);
- if ($self->session->var->isAdminOn() && $self->canEdit) {
- return $self->getAdminConsole->render($i18n->get("what do you want to do with this redirect").'
-
',$i18n->get("assetName"));
- }
- unless ($url eq $self->get("url")) {
- $self->session->http->setRedirect($url);
- return 1;
+ my $url = $self->get("redirectUrl");
+ WebGUI::Macro::process($self->session, \$url);
+ if ($self->session->var->isAdminOn() && $self->canEdit) {
+ return $self->getAdminConsole->render($i18n->get("what do you want to do with this redirect").'
+ ',$i18n->get("assetName"));
+ }
+ unless ($url eq $self->get("url")) {
+ $self->session->http->setRedirect($url);
+ return undef;
}
- return $i18n->get('self_referential');
+ return $i18n->get('self_referential');
}
1;
diff --git a/lib/WebGUI/Asset/Template.pm b/lib/WebGUI/Asset/Template.pm
index 452d365a6..e349b9aee 100644
--- a/lib/WebGUI/Asset/Template.pm
+++ b/lib/WebGUI/Asset/Template.pm
@@ -375,7 +375,7 @@ sub www_edit {
sub www_goBackToPage {
my $self = shift;
$self->session->http->setRedirect($self->session->form->get("returnUrl")) if ($self->session->form->get("returnUrl"));
- return "";
+ return undef;
}
diff --git a/lib/WebGUI/Asset/Wobject/Dashboard.pm b/lib/WebGUI/Asset/Wobject/Dashboard.pm
index 6137f00e3..bcafbf53e 100644
--- a/lib/WebGUI/Asset/Wobject/Dashboard.pm
+++ b/lib/WebGUI/Asset/Wobject/Dashboard.pm
@@ -348,10 +348,10 @@ sub www_view {
return $self->session->privilege->noAccess();
} elsif ($self->session->var->get("adminOn") && $self->get("state") =~ /^trash/) { # show em trash
$self->session->http->setRedirect($self->getUrl("func=manageTrash"));
- return "";
+ return undef;
} elsif ($self->session->var->get("adminOn") && $self->get("state") =~ /^clipboard/) { # show em clipboard
$self->session->http->setRedirect($self->getUrl("func=manageClipboard"));
- return "";
+ return undef;
} else { # tell em it doesn't exist anymore
$self->session->http->setStatus("410");
return WebGUI::Asset->getNotFound($self->session)->www_view;
diff --git a/lib/WebGUI/Asset/Wobject/Matrix.pm b/lib/WebGUI/Asset/Wobject/Matrix.pm
index fada45951..0ab34a047 100644
--- a/lib/WebGUI/Asset/Wobject/Matrix.pm
+++ b/lib/WebGUI/Asset/Wobject/Matrix.pm
@@ -267,10 +267,11 @@ sub www_click {
my $listing = $self->session->db->getRow("Matrix_listing","listingId",$self->session->form->process("listingId"));
if ($self->session->form->process("m")) {
$self->session->http->setRedirect($listing->{manufacturerUrl});
- } else {
+ }
+ else {
$self->session->http->setRedirect($listing->{productUrl});
}
- return "";
+ return undef;
}
diff --git a/lib/WebGUI/Asset/Wobject/Navigation.pm b/lib/WebGUI/Asset/Wobject/Navigation.pm
index b0b6ba8f2..2e6902fdc 100644
--- a/lib/WebGUI/Asset/Wobject/Navigation.pm
+++ b/lib/WebGUI/Asset/Wobject/Navigation.pm
@@ -486,7 +486,7 @@ sub view {
sub www_goBackToPage {
my $self = shift;
$self->session->http->setRedirect($self->session->form->process("returnUrl")) if ($self->session->form->process("returnUrl"));
- return "";
+ return undef;
}
diff --git a/lib/WebGUI/Asset/Wobject/WSClient.pm b/lib/WebGUI/Asset/Wobject/WSClient.pm
index 90643b94c..58e836617 100644
--- a/lib/WebGUI/Asset/Wobject/WSClient.pm
+++ b/lib/WebGUI/Asset/Wobject/WSClient.pm
@@ -509,6 +509,7 @@ sub view {
# webgui flow. This feature currently requires a patched WebGUI.pm file.
if ($self->session->form->process('redirectURL')) {
$self->session->http->setRedirect($self->session->form->process('redirectURL'));
+ return undef;
}
$var{'results'} = \@result;
diff --git a/lib/WebGUI/Asset/_NewAsset.skeleton b/lib/WebGUI/Asset/_NewAsset.skeleton
index d25b164fd..0fb862628 100644
--- a/lib/WebGUI/Asset/_NewAsset.skeleton
+++ b/lib/WebGUI/Asset/_NewAsset.skeleton
@@ -259,7 +259,7 @@ sub www_view {
return $self->getContainer->www_view;
}
$self->session->http->setRedirect($self->getFileUrl($self->getValue("showPage")));
- return "";
+ return undef;
}
#-------------------------------------------------------------------
diff --git a/lib/WebGUI/AssetBranch.pm b/lib/WebGUI/AssetBranch.pm
index f183b468a..f54c5607e 100644
--- a/lib/WebGUI/AssetBranch.pm
+++ b/lib/WebGUI/AssetBranch.pm
@@ -311,6 +311,7 @@ sub www_editBranchSave {
WebGUI::VersionTag->getWorking($self->session)->requestCommit;
} else {
$self->session->http->setRedirect($self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId));
+ return undef;
}
}
delete $self->{_parent};
diff --git a/lib/WebGUI/AssetClipboard.pm b/lib/WebGUI/AssetClipboard.pm
index 1ec31eaad..ccb4c8329 100644
--- a/lib/WebGUI/AssetClipboard.pm
+++ b/lib/WebGUI/AssetClipboard.pm
@@ -214,7 +214,7 @@ sub www_copy {
$self->session->http->setRedirect($self->getUrl(
"op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId
));
- return 1;
+ return undef;
}
}
return $self->session->asset($self->getContainer)->www_view;
diff --git a/lib/WebGUI/AssetPackage.pm b/lib/WebGUI/AssetPackage.pm
index 9ee86562a..e65250f88 100644
--- a/lib/WebGUI/AssetPackage.pm
+++ b/lib/WebGUI/AssetPackage.pm
@@ -239,6 +239,7 @@ sub importPackage {
}
else {
$self->session->http->setRedirect($self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId));
+ return undef;
}
}
diff --git a/lib/WebGUI/AssetVersioning.pm b/lib/WebGUI/AssetVersioning.pm
index 548b736ff..1ddc10bf0 100644
--- a/lib/WebGUI/AssetVersioning.pm
+++ b/lib/WebGUI/AssetVersioning.pm
@@ -551,7 +551,7 @@ sub www_purgeRevision {
if ($session->form->process("proceed") eq "manageRevisionsInTag") {
my $working = (defined $self) ? $self : $parent;
$session->http->setRedirect($working->getUrl("op=manageRevisionsInTag"));
- return "";
+ return undef;
}
unless (defined $self) {
return $parent->www_view;
diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm
index 2b6b8cc58..903aab9a3 100644
--- a/lib/WebGUI/Auth.pm
+++ b/lib/WebGUI/Auth.pm
@@ -286,6 +286,7 @@ sub createAccountSave {
if ($self->session->scratch->get("redirectAfterLogin")) {
my $url = $self->session->scratch->delete("redirectAfterLogin");
$self->session->http->setRedirect($url);
+ return undef;
} else {
$self->session->http->setStatus(201,"Account Registration Successful");
}
diff --git a/lib/WebGUI/Content/Asset.pm b/lib/WebGUI/Content/Asset.pm
index 14b920736..190ded65b 100644
--- a/lib/WebGUI/Content/Asset.pm
+++ b/lib/WebGUI/Content/Asset.pm
@@ -115,7 +115,7 @@ sub handler {
$http->setStatus("304","Content Not Modified");
$http->sendHeader;
$session->close;
- return "cached";
+ return "chunked";
}
# return the page.
@@ -137,13 +137,6 @@ sub handler {
}
}
- # Uhm... why here and not somewhere else? Do content handlers manage their own content
- # or should the URL handlers do it for them?
- if ($output eq "redirect") {
- $http->sendHeader;
- }
-
- # ...
return $output;
}
diff --git a/lib/WebGUI/Content/Prefetch.pm b/lib/WebGUI/Content/Prefetch.pm
index 60d51caf7..39ad08719 100644
--- a/lib/WebGUI/Content/Prefetch.pm
+++ b/lib/WebGUI/Content/Prefetch.pm
@@ -47,10 +47,7 @@ The content handler for this package.
sub handler {
my ($session) = @_;
if ($session->env->get("HTTP_X_MOZ") eq "prefetch") { # browser prefetch is a bad thing
- my $http = $session->http;
- $http->setStatus("403","We don't allow prefetch, because it increases bandwidth, hurts stats, and can break web sites.");
- $http->sendHeader;
- return "none";
+ $session->http->setStatus("403","We don't allow prefetch, because it increases bandwidth, hurts stats, and can break web sites.");
}
return undef;
}
diff --git a/lib/WebGUI/Content/Setup.pm b/lib/WebGUI/Content/Setup.pm
index 8039c4d8c..afc285c37 100644
--- a/lib/WebGUI/Content/Setup.pm
+++ b/lib/WebGUI/Content/Setup.pm
@@ -560,7 +560,6 @@ return props[propName];