diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt
index d5568fdbd..7a59cd8cc 100644
--- a/docs/changelog/6.x.x.txt
+++ b/docs/changelog/6.x.x.txt
@@ -33,6 +33,9 @@
average page, which leads to much greater scalability. See
docs/migration.txt for API changes.
- Added the ability to select session v. global caches to WSClient.
+ - Rmoved the httpHeader, httpRedirect, and setCookie subs from
+ WebGUI::Session and created a new class called WebGUI::HTTP for them. See
+ docs/migration.txt for details.
6.0.3
diff --git a/docs/migration.txt b/docs/migration.txt
index f300678db..dc5b82e93 100644
--- a/docs/migration.txt
+++ b/docs/migration.txt
@@ -140,4 +140,11 @@ gen61i18nfrom60data.pl
We also made the International API object oriented. The old procedural version
is still intact as well. See WebGUI::International for API changes.
+5.8 WebGUI::Session Changes
+
+In 6.1 we changed the session API to remove functions that didn't really
+belong in WebGUI::Session. The main changes of interest are that you no longer
+do HTTP redirects and set cookies via session. Take a look at WebGUI::HTTP for
+details.
+
diff --git a/docs/upgrades/upgrade_6.0.3-6.1.0.pl b/docs/upgrades/upgrade_6.0.3-6.1.0.pl
index 5d7b0e279..b925a85aa 100644
--- a/docs/upgrades/upgrade_6.0.3-6.1.0.pl
+++ b/docs/upgrades/upgrade_6.0.3-6.1.0.pl
@@ -70,7 +70,10 @@ my $langs = {
WebGUI::SQL->write("update userProfileField set dataDefault=".quote("['".$langs->{$defaultLangId}."']")." where fieldName='language'");
WebGUI::SQL->write("update userProfileData set fieldData='".$langs->{$defaultLangId}."' where fieldName='language' and fieldData<>1");
WebGUI::SQL->write("update userProfileData set fieldData='English' where fieldName='language' and fieldData=1");
-
+WebGUI::SQL->write("alter table page change languageId languageId varchar(50) not null default 'English'");
+foreach my $key (keys %{$langs}) {
+ WebGUI::SQL->write("update page set languageId=".quote($langs->{$key})." where languageId=".$key);
+}
WebGUI::Session::close();
diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm
index ae0a23c3c..08cba6bf6 100644
--- a/lib/WebGUI.pm
+++ b/lib/WebGUI.pm
@@ -17,6 +17,7 @@ use WebGUI::Affiliate;
use WebGUI::Cache;
use WebGUI::ErrorHandler;
use WebGUI::Grouping;
+use WebGUI::HTTP;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Operation;
@@ -156,17 +157,13 @@ sub page {
$wobjectOutput = _processFunctions();
}
if ($output ne "") {
- $output = WebGUI::Session::httpHeader().$output;
- } elsif ($session{header}{mimetype} ne "text/html") {
- $output = WebGUI::Session::httpHeader().$operationOutput.$wobjectOutput;
+ # using cache
+ } elsif (WebGUI::HTTP::getMimeType() ne "text/html") {
+ $output = $operationOutput.$wobjectOutput;
} elsif ($operationOutput ne "") {
- $output = WebGUI::Session::httpHeader()._generatePage($operationOutput);
- } elsif ($session{page}{redirectURL} && !$session{var}{adminOn}) {
- $output = WebGUI::Session::httpRedirect(WebGUI::Macro::process($session{page}{redirectURL}));
- } elsif (exists $session{header}{redirect}) {
- $output = $session{header}{redirect};
+ $output = _generatePage($operationOutput);
} elsif ($wobjectOutput ne "") {
- $output = WebGUI::Session::httpHeader()._generatePage($wobjectOutput);
+ $output = _generatePage($wobjectOutput);
} else {
$output = _generatePage(WebGUI::Page::generate());
my $ttl;
@@ -176,10 +173,10 @@ sub page {
$ttl = $session{page}{cacheTimeout};
}
$cache->set($output, $ttl) if ($useCache);
- $output = WebGUI::Session::httpHeader().$output;
}
+ my $httpHeader = WebGUI::HTTP::getHeader();
WebGUI::Session::close();
- return $output;
+ return $httpHeader.$output;
}
diff --git a/lib/WebGUI/Attachment.pm b/lib/WebGUI/Attachment.pm
index e211288a7..332b04e52 100644
--- a/lib/WebGUI/Attachment.pm
+++ b/lib/WebGUI/Attachment.pm
@@ -28,6 +28,7 @@ use POSIX;
use Storable;
use strict;
use WebGUI::ErrorHandler;
+use WebGUI::HTTP;
use WebGUI::Node;
use WebGUI::Session;
use WebGUI::URL;
@@ -559,7 +560,7 @@ If a web image (gif, png, jpg, jpeg) is being uploaded it will be resized if it
sub save {
my ($type, $file, $filename, $bytesread, $buffer, $urlizedFilename, $path);
- return "" if ($session{header}{status} =~ /^413/);
+ return "" if (WebGUI::HTTP::getStatus() =~ /^413/);
$filename = $session{cgi}->upload($_[1]);
if (defined $filename) {
if ($filename =~ /([^\/\\]+)$/) {
diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm
index d47846402..d68b1e245 100644
--- a/lib/WebGUI/Auth.pm
+++ b/lib/WebGUI/Auth.pm
@@ -23,6 +23,7 @@ use WebGUI::ErrorHandler;
use WebGUI::FormProcessor;
use WebGUI::HTML;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Macro;
@@ -558,8 +559,8 @@ sub login {
_logLogin($uid,"success");
if ($session{scratch}{redirectAfterLogin}) {
- $session{header}{redirect} = WebGUI::Session::httpRedirect($session{scratch}{redirectAfterLogin});
- WebGUI::Session::deleteScratch("redirectAfterLogin");
+ WebGUI::HTTP::setRedirect($session{scratch}{redirectAfterLogin});
+ WebGUI::Session::deleteScratch("redirectAfterLogin");
}
return "";
}
diff --git a/lib/WebGUI/Forum/UI.pm b/lib/WebGUI/Forum/UI.pm
index 117f4d2c8..717eb1471 100644
--- a/lib/WebGUI/Forum/UI.pm
+++ b/lib/WebGUI/Forum/UI.pm
@@ -22,6 +22,7 @@ use WebGUI::Forum;
use WebGUI::Forum::Post;
use WebGUI::Forum::Thread;
use WebGUI::HTML;
+use WebGUI::HTTP;
use WebGUI::MessageLog;
use WebGUI::Search;
use WebGUI::Session;
@@ -1959,7 +1960,7 @@ sub www_postSave {
}, \%postData);
$thread->subscribe($session{user}{userId}) if ($session{form}{subscribe});
setPostStatus($caller,$thread->getPost($thread->get("rootPostId")));
- $session{header}{redirect} = WebGUI::Session::httpRedirect(formatForumURL($caller->{callback}, $forumId));
+ WebGUI::HTTP::setRedirect(formatForumURL($caller->{callback}, $forumId));
return "";
}
}
@@ -2323,7 +2324,7 @@ sub www_viewThread {
# If POST, cause redirect, so new post is displayed using GET instead of POST
if ($session{env}{REQUEST_METHOD} =~ /POST/i) {
my $url= formatThreadURL($caller-> {callback}, $postId);
- $session{header}{redirect} = WebGUI::Session::httpRedirect($url);
+ WebGUI::HTTP::setRedirect($url);
return "";
}
my $post = WebGUI::Forum::Post->new($postId);
diff --git a/lib/WebGUI/HTTP.pm b/lib/WebGUI/HTTP.pm
new file mode 100644
index 000000000..1cd8fd963
--- /dev/null
+++ b/lib/WebGUI/HTTP.pm
@@ -0,0 +1,240 @@
+package WebGUI::HTTP;
+
+=head1 LEGAL
+
+ -------------------------------------------------------------------
+ WebGUI is Copyright 2001-2004 Plain Black LLC.
+ -------------------------------------------------------------------
+ Please read the legal notices (docs/legal.txt) and the license
+ (docs/license.txt) that came with this distribution before using
+ this software.
+ -------------------------------------------------------------------
+ http://www.plainblack.com info@plainblack.com
+ -------------------------------------------------------------------
+
+=cut
+
+
+use strict;
+use WebGUI::International;
+use WebGUI::Session;
+
+=head1 NAME
+
+Package WebGUI::HTTP
+
+=head1 DESCRIPTION
+
+This package allows the manipulation of HTTP protocol information.
+
+=head1 SYNOPSIS
+
+use WebGUI::HTTP;
+ $header = WebGUI::HTTP::getHeader();
+ WebGUI::HTTP::setRedirect($url);
+ WebGUI::HTTP::setCookie($name,$value);
+
+=head1 METHODS
+
+These subroutines are available from this package:
+
+=cut
+
+
+
+#-------------------------------------------------------------------
+
+=head2 getHeader ( )
+
+Generates an HTTP header.
+
+=cut
+
+sub getHeader {
+ my $header;
+ unless (exists $session{http}{location}) {
+ unless ($session{http}{charset}) {
+ $session{http}{charset} = WebGUI::International::getLanguage($session{page}{languageId},"charset") || "ISO-8859-1";
+ }
+ unless ($session{http}{mimetype}) {
+ $session{http}{mimetype} = "text/html";
+ }
+ if ($session{setting}{preventProxyCache}) {
+ $session{http}{expires} = "-1d";
+ }
+ $header = $session{cgi}->header(
+ -type => $session{http}{mimetype},
+ -charset => $session{http}{charset},
+ -cookie => $session{http}{cookie},
+ -status => $session{http}{status},
+ -attachment => $session{http}{filename},
+ -expires => $session{http}{expires}
+ );
+ } else {
+ $header = $session{cgi}->header(
+ -cookie => $session{http}{cookie},
+ -location => $session{http}{location},
+ -status => $session{http}{status}
+ );
+ }
+ return $header;
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 getMimeType ( )
+
+Returns the current mime type of the document to be returned.
+
+=cut
+
+sub getMimeType {
+ return $session{http}{mimetype} || "text/html";
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 getStatus ( ) {
+
+Returns the current HTTP status code, if one has been set.
+
+=cut
+
+sub getStatus {
+ return $session{http}{status} || "200 OK";
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 setCookie ( name, value [ , timeToLive ] )
+
+Sends a cookie to the browser.
+
+=over
+
+=item name
+
+The name of the cookie to set. Must be unique from all other cookies from this domain or it will overwrite that cookie.
+
+=item value
+
+The value to set.
+
+=item timeToLive
+
+The time that the cookie should remain in the browser. Defaults to "+10y" (10 years from now).
+
+=back
+
+=cut
+
+sub setCookie {
+ my $ttl = $_[2] || '+10y';
+ my $domain;
+ push @{$session{http}{cookie}}, $session{cgi}->cookie(
+ -name=>$_[0],
+ -value=>$_[1],
+ -expires=>$ttl,
+ -path=>'/',
+ -domain=>$domain
+ );
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 setFilename ( filename [, mimetype] )
+
+Override the default filename for the document, which is usually the page url. Usually used with setMimeType().
+
+=over
+
+=item filename
+
+The filename to set.
+
+=item mimetype
+
+The mimetype for this file. Defaults to "application/octet-stream".
+
+=back
+
+=cut
+
+sub setFilename {
+ $session{http}{filename} = shift;
+ my $mimetype = shift || "application/octet-stream";
+ setMimeType($mimetype);
+}
+
+
+
+#-------------------------------------------------------------------
+
+=head2 setMimeType ( mimetype )
+
+Override mime type for the document, which is defaultly "text/html". Also see setFilename().
+
+NOTE: By setting the mime type to something other than "text/html" WebGUI will automatically not process the normal page contents. Instead it will return only the content of your Wobject function or Operation.
+
+=over
+
+=item mimetype
+
+The mime type for the document.
+
+=back
+
+=cut
+
+sub setMimeType {
+ $session{http}{mimetype} = shift;
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 setRedirect ( url )
+
+Sets the necessary information in the HTTP header to redirect to another URL.
+
+=over
+
+=item url
+
+The URL to redirect to.
+
+=back
+
+=cut
+
+sub setRedirect {
+ $session{http}{location} = shift;
+ setStatus("302 Redirect");
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 setStatus ( status )
+
+Sets the HTTP status code.
+
+=over
+
+=item status
+
+An HTTP status code. It takes the form of "NNN Message" where NNN is a 3 digit status number and Message is some text explaining the status number.
+
+=back
+
+=cut
+
+sub setStatus {
+ $session{http}{status} = shift;
+}
+
+1;
diff --git a/lib/WebGUI/Icon.pm b/lib/WebGUI/Icon.pm
index 21ca66fe4..4fa11d9e7 100644
--- a/lib/WebGUI/Icon.pm
+++ b/lib/WebGUI/Icon.pm
@@ -76,7 +76,7 @@ sub _getBaseURL {
if ($session{user}{toolbar} ne "useLanguageDefault") {
$url .= $session{user}{toolbar};
} else {
- $url .= $session{language}{toolbar};
+ $url .= WebGUI::International::getLanguage($session{user}{language},"toolbar");
}
$url .= '/';
return $url;
diff --git a/lib/WebGUI/International.pm b/lib/WebGUI/International.pm
index 1ed54ba10..772f3f85d 100644
--- a/lib/WebGUI/International.pm
+++ b/lib/WebGUI/International.pm
@@ -31,6 +31,7 @@ This package provides an interface to the internationalization system.
use WebGUI::International;
$string = WebGUI::International::get($internationalId,$namespace);
+ $hashRef = WebGUI::International::getLanguage($lang);
%languages = WebGUI::International::getLanguages();
This package can also be used in object-oriented (OO) style.
@@ -93,6 +94,47 @@ sub get {
}
+#-------------------------------------------------------------------
+
+=head2 getLanguage ( [ languageId , propertyName] )
+
+Returns a hash reference to a particular language's properties.
+
+=over
+
+=item languageId
+
+Defaults to "English". The language to retrieve the properties for.
+
+=item propertyName
+
+If this is specified, only the value of the property will be returned, instead of the hash reference to all properties. The valid values are "charset", "toolbar", and "label".
+
+=back
+
+=cut
+
+sub getLanguage {
+ my $language = shift || "English";
+ my $property = shift;
+ my $cmd = "WebGUI::i18n::".$language;
+ my $load = "use ".$cmd;
+ eval($load);
+ unless ($@) {
+ $cmd = "\$".$cmd."::LANGUAGE";
+ my $hashRef = eval($cmd);
+ WebGUI::ErrorHandler::warn("Failed to retrieve language properties because ".$@) if ($@);
+ if ($property) {
+ return $hashRef->{$property};
+ } else {
+ return $hashRef;
+ }
+ } else {
+ WebGUI::ErrorHandler::warn("Language failed to compile: $language. ".$@);
+ }
+}
+
+
#-------------------------------------------------------------------
=head2 getLanguages ( )
@@ -110,15 +152,7 @@ sub getLanguages {
foreach my $file (@files) {
if ($file =~ /(.*?)\.pm$/) {
my $language = $1;
- my $cmd = "WebGUI::i18n::".$language;
- my $load = "use ".$cmd;
- eval($load);
- unless ($@) {
- $cmd = "\$".$cmd."::I18N->{'label'}";
- $hashRef->{$language} = eval($cmd);
- } else {
- WebGUI::ErrorHandler::warn("Language failed to compile: $language. ".$@);
- }
+ $hashRef->{$language} = getLanguage($language,"label");
}
}
return $hashRef;
diff --git a/lib/WebGUI/Operation/Theme.pm b/lib/WebGUI/Operation/Theme.pm
index 0e1a30528..831d0ef10 100644
--- a/lib/WebGUI/Operation/Theme.pm
+++ b/lib/WebGUI/Operation/Theme.pm
@@ -18,6 +18,7 @@ use WebGUI::Attachment;
use WebGUI::Collateral;
use WebGUI::Grouping;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Node;
@@ -301,7 +302,7 @@ sub www_exportTheme {
my $packageName = WebGUI::URL::makeCompliant($theme->{name}).".theme.tar.gz";
$propertyFile->getNode->tar($packageName);
my $export = WebGUI::Attachment->new($packageName,"temp");
- $session{header}{redirect} = WebGUI::Session::httpRedirect($export->getURL);
+ WebGUI::HTTP::setRedirect($export->getURL);
return "";
}
diff --git a/lib/WebGUI/Page.pm b/lib/WebGUI/Page.pm
index 8db7a0684..cd1aa0395 100644
--- a/lib/WebGUI/Page.pm
+++ b/lib/WebGUI/Page.pm
@@ -21,7 +21,9 @@ use Tie::IxHash;
use WebGUI::ErrorHandler;
use WebGUI::Grouping;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
+use WebGUI::Macro;
use WebGUI::Persistent::Tree;
use WebGUI::Session;
use WebGUI::SQL;
@@ -386,6 +388,9 @@ Generates the content of the page.
sub generate {
return WebGUI::Privilege::noAccess() unless (canView());
my %var;
+ if ($session{page}{redirectURL} && !$session{var}{adminOn}) {
+ WebGUI::HTTP::setRedirect(WebGUI::Macro::process($session{page}{redirectURL}));
+ }
$var{'page.canEdit'} = canEdit();
$var{'page.controls'} = pageIcon()
.deleteIcon('op=deletePage')
diff --git a/lib/WebGUI/Privilege.pm b/lib/WebGUI/Privilege.pm
index 3b2c067ca..5d4d44967 100644
--- a/lib/WebGUI/Privilege.pm
+++ b/lib/WebGUI/Privilege.pm
@@ -15,6 +15,7 @@ package WebGUI::Privilege;
=cut
use strict;
+use WebGUI::HTTP;
use WebGUI::International;
use WebGUI::Session;
@@ -50,15 +51,7 @@ Returns a message stating that this functionality can only be used by administra
=cut
sub adminOnly {
- if($session{env}{MOD_PERL}) {
- my $r = Apache->request;
- if(defined($r)) {
- $r->custom_response(401, '' );
- $r->status(401);
- }
- } else {
- $session{header}{status} = 401;
- }
+ WebGUI::HTTP::setStatus("401 Admin Only");
my ($output, $sth, @data);
$output = '
'.WebGUI::International::get(35).'
';
$output .= WebGUI::International::get(36);
@@ -75,15 +68,7 @@ Returns a message stating that the user does not have the required privileges to
=cut
sub insufficient {
- if($session{env}{MOD_PERL}) {
- my $r = Apache->request;
- if(defined($r)) {
- $r->custom_response(401, '' );
- $r->status(401);
- }
- } else {
- $session{header}{status} = 401;
- }
+ WebGUI::HTTP::setStatus("401 Insufficient Privileges");
my ($output);
$output = '
'.WebGUI::International::get(37).'
';
$output .= WebGUI::International::get(38);
@@ -101,24 +86,16 @@ Returns a message stating that the user does not have the privileges necessary t
=cut
sub noAccess {
- if($session{env}{MOD_PERL}) {
- my $r = Apache->request;
- if(defined($r)) {
- $r->custom_response(401, '' );
- $r->status(401);
- }
- } else {
- $session{header}{status} = 401;
- }
- my ($output);
- if ($session{user}{userId} <= 1) {
- $output = WebGUI::Operation::Auth::www_auth("init");
- } else {
- $output = '
';
+ }
+ return $output;
}
#-------------------------------------------------------------------
@@ -130,15 +107,7 @@ Returns a message stating that the user they requested information about is no l
=cut
sub notMember {
- if($session{env}{MOD_PERL}) {
- my $r = Apache->request;
- if(defined($r)) {
- $r->custom_response(400, '' );
- $r->status(400);
- }
- } else {
- $session{header}{status} = 400;
- }
+ WebGUI::HTTP::setStatus("400 Not A Member");
my ($output);
$output = '
'.WebGUI::International::get(345).'
';
$output .= WebGUI::International::get(346);
@@ -155,15 +124,7 @@ Returns a message stating that the user made a request to delete something that
=cut
sub vitalComponent {
- if($session{env}{MOD_PERL}) {
- my $r = Apache->request;
- if(defined($r)) {
- $r->custom_response(403, '' );
- $r->status(403);
- }
- } else {
- $session{header}{status} = 403;
- }
+ WebGUI::HTTP::setStatus("403 Vital Component");
my ($output);
$output = '
'.WebGUI::International::get(40).'
';
$output .= WebGUI::International::get(41);
@@ -173,8 +134,5 @@ sub vitalComponent {
-
-
-
1;
diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm
index 6e7c00993..654cca9df 100644
--- a/lib/WebGUI/Session.pm
+++ b/lib/WebGUI/Session.pm
@@ -51,13 +51,10 @@ TIP: The $session variable is a case-insensitive hash. The contents of the has v
WebGUI::Session::convertVisitorToUser($sessionId,$userId);
WebGUI::Session::deleteScratch($name);
WebGUI::Session::end($sessionId);
- $header = WebGUI::Session::httpHeader();
- $header = WebGUI::Session::httpRedirect($url);
WebGUI::Session::open($webguiRoot,$configFilename);
WebGUI::Session::refreshPageInfo($pageId);
WebGUI::Session::refreshSessionVars($sessionId);
WebGUI::Session::refreshUserInfo($userId);
- WebGUI::Session::setCookie($name,$value);
WebGUI::Session::setScratch($name,$value);
WebGUI::Session::start($userId);
@@ -91,7 +88,7 @@ sub _setupPageInfo {
$r->status(404);
}
} else {
- $session{header}{status} = '404';
+ $session{http}{status} = '404';
}
}
} else {
@@ -270,53 +267,6 @@ sub end {
}
}
-#-------------------------------------------------------------------
-
-=head2 httpHeader ( )
-
-Generates an HTTP header.
-
-=cut
-
-sub httpHeader {
- unless ($session{header}{charset}) {
- $session{header}{charset} = $session{language}{characterSet} || "ISO-8859-1";
- }
- if ($session{header}{filename} && $session{header}{mimetype} eq "text/html") {
- $session{header}{mimetype} = "application/octet-stream";
- }
- if ($session{setting}{preventProxyCache}) {
- $session{header}{expires} = "-1d";
- }
- return $session{cgi}->header(
- -type => $session{header}{mimetype},
- -charset => $session{header}{charset},
- -cookie => $session{header}{cookie},
- -status => $session{header}{status},
- -attachment => $session{header}{filename},
- -expires => $session{header}{expires}
- );
-}
-
-#-------------------------------------------------------------------
-
-=head2 httpRedirect ( url )
-
-Generates an HTTP header for redirect.
-
-=over
-
-=item url
-
-The URL to redirect to.
-
-=back
-
-=cut
-
-sub httpRedirect {
- return $session{cgi}->redirect($_[0]);
-}
#-------------------------------------------------------------------
@@ -393,15 +343,12 @@ sub open {
$CGI::POST_MAX=1024 * $session{setting}{maxAttachmentSize};
$session{cgi} = CGI->new();
if ($session{cgi}->cgi_error =~ /^413/) {
- $session{header}{status} = $session{cgi}->cgi_error;
+ $session{http}{status} = $session{cgi}->cgi_error;
WebGUI::ErrorHandler::warn("File upload too big. May need to adjust Max File Size setting.");
$CGI::POST_MAX=-1;
$session{cgi} = CGI->new();
}
###----------------------------
- ### header variables
- $session{header}{mimetype} = 'text/html';
- ###----------------------------
### evironment variables from web server
$session{env} = \%ENV;
### check to see if client is proxied and adjust remote_addr as necessary
@@ -498,42 +445,6 @@ sub refreshUserInfo {
$session{isInGroup} = ();
}
-#-------------------------------------------------------------------
-
-=head2 setCookie ( name, value [ , timeToLive ] )
-
-Sends a cookie to the browser.
-
-=over
-
-=item name
-
-The name of the cookie to set. Must be unique from all other cookies from this domain or it will overwrite that cookie.
-
-=item value
-
-The value to set.
-
-=item timeToLive
-
-The time that the cookie should remain in the browser. Defaults to "+10y" (10 years from now).
-
-=back
-
-=cut
-
-sub setCookie {
- my $ttl = $_[2] || '+10y';
- #my $domain = $session{env}{SERVER_NAME} if ($session{env}{HTTP_USER_AGENT} =~ m/MSIE/i);
- my $domain;
- push @{$session{header}{cookie}}, $session{cgi}->cookie(
- -name=>$_[0],
- -value=>$_[1],
- -expires=>$ttl,
- -path=>'/',
- -domain=>$domain
- );
-}
#-------------------------------------------------------------------
@@ -601,7 +512,12 @@ sub start {
WebGUI::SQL->write("insert into userSession values ('$sessionId', ".
(_time()+$session{setting}{sessionTimeout}).", "._time().", 0, '$ENV{REMOTE_ADDR}', $_[0])");
}
- setCookie("wgSession",$sessionId);
+ push @{$session{http}{cookie}}, $session{cgi}->cookie(
+ -name=>"wgSession",
+ -value=>$sessionId,
+ -expires=>'+10y',
+ -path=>'/'
+ );
refreshSessionVars($sessionId);
}
diff --git a/lib/WebGUI/Style.pm b/lib/WebGUI/Style.pm
index c498baa77..01a17a942 100644
--- a/lib/WebGUI/Style.pm
+++ b/lib/WebGUI/Style.pm
@@ -17,6 +17,7 @@ package WebGUI::Style;
use strict;
use Tie::CPHash;
+use WebGUI::International;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Template;
@@ -102,7 +103,7 @@ sub process {
$type =~ s/.*\.(.*?)$/$1/;
$var{'head.tags'} = '
-
+
'.$session{page}{head}{raw}.'
diff --git a/lib/WebGUI/Wobject/DataForm.pm b/lib/WebGUI/Wobject/DataForm.pm
index 55b8921e2..cf7ec343f 100644
--- a/lib/WebGUI/Wobject/DataForm.pm
+++ b/lib/WebGUI/Wobject/DataForm.pm
@@ -17,6 +17,7 @@ use WebGUI::DateTime;
use WebGUI::Form;
use WebGUI::FormProcessor;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Macro;
@@ -787,8 +788,7 @@ sub www_editTabSave {
#-------------------------------------------------------------------
sub www_exportTab {
return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit);
- $session{header}{filename} = WebGUI::URL::urlize($_[0]->get("title")).".tab";
- $session{header}{mimetype} = "text/plain";
+ WebGUI::HTTP::setFilename(WebGUI::URL::urlize($_[0]->get("title")).".tab","text/plain");
my %fields = WebGUI::SQL->buildHash("select DataForm_fieldId,name from DataForm_field where wobjectId=".$_[0]->get("wobjectId")." order by sequenceNumber");
my $select = "select a.DataForm_entryId as entryId, a.ipAddress, a.username, a.userId, a.submissionDate";
my $from = " from DataForm_entry a";
diff --git a/lib/WebGUI/Wobject/FileManager.pm b/lib/WebGUI/Wobject/FileManager.pm
index 6a79c0f1f..e5bac18fa 100644
--- a/lib/WebGUI/Wobject/FileManager.pm
+++ b/lib/WebGUI/Wobject/FileManager.pm
@@ -15,6 +15,7 @@ use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::Grouping;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Paginator;
@@ -175,7 +176,7 @@ sub www_download {
$session{form}{wid},
$session{form}{did});
}
- $session{header}{redirect} = WebGUI::Session::httpRedirect($file->getURL);
+ WebGUI::HTTP::setRedirect($file->getURL);
return "";
} else {
return WebGUI::Privilege::insufficient();
diff --git a/lib/WebGUI/Wobject/HttpProxy.pm b/lib/WebGUI/Wobject/HttpProxy.pm
index 7ab36721f..b98ee3600 100644
--- a/lib/WebGUI/Wobject/HttpProxy.pm
+++ b/lib/WebGUI/Wobject/HttpProxy.pm
@@ -17,6 +17,7 @@ use HTTP::Cookies;
use HTTP::Request::Common;
use HTML::Entities;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Privilege;
@@ -297,7 +298,7 @@ sub www_view {
}
if($var{header} ne "text/html") {
- $session{header}{mimetype} = $var{header};
+ WebGUI::HTTP::setMimeType($var{header});
return $var{content};
} else {
return $_[0]->processTemplate($_[0]->get("templateId"),\%var);
diff --git a/lib/WebGUI/Wobject/Survey.pm b/lib/WebGUI/Wobject/Survey.pm
index 3f61f7037..f0b535e03 100644
--- a/lib/WebGUI/Wobject/Survey.pm
+++ b/lib/WebGUI/Wobject/Survey.pm
@@ -15,6 +15,7 @@ use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::Grouping;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Privilege;
@@ -780,16 +781,14 @@ sub www_editQuestionSave {
#-------------------------------------------------------------------
sub www_exportAnswers {
return "" unless (WebGUI::Grouping::isInGroup($_[0]->get("groupToViewReports")));
- $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_answers.tab");
- $session{header}{mimetype} = "text/tab";
+ WebGUI::HTTP::setFilename(WebGUI::URL::escape($_[0]->get("title")."_answers.tab"),"text/tab");
return WebGUI::SQL->quickTab("select * from Survey_answer where Survey_id=".$_[0]->get("Survey_id"));
}
#-------------------------------------------------------------------
sub www_exportComposite {
return "" unless (WebGUI::Grouping::isInGroup($_[0]->get("groupToViewReports")));
- $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_composite.tab");
- $session{header}{mimetype} = "text/tab";
+ WebGUI::HTTP::setFilename(WebGUI::URL::escape($_[0]->get("title")."_composite.tab"),"text/tab");
return WebGUI::SQL->quickTab("select b.question, c.response, a.userId, a.username, a.ipAddress, c.comment, c.dateOfResponse from Survey_response a
left join Survey_questionResponse c on a.Survey_responseId=c.Survey_responseId
left join Survey_question b on c.Survey_questionId=b.Survey_questionId
@@ -799,16 +798,14 @@ sub www_exportComposite {
#-------------------------------------------------------------------
sub www_exportQuestions {
return "" unless (WebGUI::Grouping::isInGroup($_[0]->get("groupToViewReports")));
- $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_questions.tab");
- $session{header}{mimetype} = "text/tab";
+ WebGUI::HTTP::setFilename(WebGUI::URL::escape($_[0]->get("title")."_questions.tab"),"text/tab");
return WebGUI::SQL->quickTab("select * from Survey_question where Survey_id=".$_[0]->get("Survey_id"));
}
#-------------------------------------------------------------------
sub www_exportResponses {
return "" unless (WebGUI::Grouping::isInGroup($_[0]->get("groupToViewReports")));
- $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_responses.tab");
- $session{header}{mimetype} = "text/tab";
+ WebGUI::HTTP::setFilename(WebGUI::URL::escape($_[0]->get("title")."_responses.tab"),"text/tab");
return WebGUI::SQL->quickTab("select * from Survey_response where Survey_id=".$_[0]->get("Survey_id"));
}
diff --git a/lib/WebGUI/Wobject/USS.pm b/lib/WebGUI/Wobject/USS.pm
index 9ec5ddf57..b6f19c66e 100644
--- a/lib/WebGUI/Wobject/USS.pm
+++ b/lib/WebGUI/Wobject/USS.pm
@@ -19,6 +19,7 @@ use WebGUI::Forum::UI;
use WebGUI::Grouping;
use WebGUI::HTML;
use WebGUI::HTMLForm;
+use WebGUI::HTTP;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::MessageLog;
@@ -793,9 +794,7 @@ sub www_viewRSS {
~;
-
- $session{header}{mimetype} = 'text/xml';
-
+ WebGUI::HTTP::setMimeType("text/xml");
return $xml;
}
diff --git a/sbin/preload.perl b/sbin/preload.perl
index 80f9f11ba..5bf7b5f8a 100644
--- a/sbin/preload.perl
+++ b/sbin/preload.perl
@@ -35,7 +35,7 @@ use SOAP::Lite ();
#----------------------------------------
# Database connectivity.
#----------------------------------------
-#use Apache::DBI (); # Uncomment if you want to enable connection pooling. Not recommended on low memory - high traffic systems.
+#use Apache::DBI (); # Uncomment if you want to enable connection pooling. Not recommended on low memory systems.
use DBI ();
DBI->install_driver("mysql"); # Change to match your database driver.
@@ -46,9 +46,7 @@ DBI->install_driver("mysql"); # Change to match your database driver.
#----------------------------------------
#use HTML::Parser (); # commented because it is causing problems with attachments
#use HTML::TagFilter (); # commented because it is causing problems with attachments
-use Net::LDAP ();
use Parse::PlainConfig ();
-#use Authen::Smb (); #uncomment when using this type of authentication.
use Tie::CPHash ();
use Tie::IxHash ();
use Tree::DAG_Node ();
@@ -56,6 +54,8 @@ use Tree::DAG_Node ();
#----------------------------------------
# WebGUI modules.
#----------------------------------------
+
+# core
use WebGUI ();
use WebGUI::Affiliate ();
use WebGUI::Attachment ();
@@ -83,6 +83,7 @@ use WebGUI::Mail ();
use WebGUI::MessageLog ();
use WebGUI::Navigation ();
use WebGUI::Node ();
+use WebGUI::Operation ();
use WebGUI::Persistent ();
use WebGUI::Persistent::Query ();
use WebGUI::Persistent::Tree ();
@@ -90,7 +91,68 @@ use WebGUI::Persistent::Query::Delete ();
use WebGUI::Persistent::Query::Insert ();
use WebGUI::Persistent::Query::Select ();
use WebGUI::Persistent::Query::Update ();
-use WebGUI::Operation ();
+use WebGUI::Page ();
+use WebGUI::Paginator ();
+use WebGUI::Privilege ();
+use WebGUI::Search ();
+use WebGUI::Session ();
+use WebGUI::SQL ();
+use WebGUI::Style ();
+use WebGUI::TabForm ();
+use WebGUI::Template ();
+use WebGUI::URL ();
+use WebGUI::User ();
+use WebGUI::Utility ();
+use WebGUI::Wobject ();
+
+# help
+use WebGUI::Help::Article ();
+use WebGUI::Help::AuthLDAP ();
+use WebGUI::Help::AuthSMB ();
+use WebGUI::Help::AuthWebGUI ();
+use WebGUI::Help::DataForm ();
+use WebGUI::Help::EventsCalendar ();
+use WebGUI::Help::FileManager ();
+use WebGUI::Help::HttpProxy ();
+use WebGUI::Help::IndexedSearch ();
+use WebGUI::Help::MessageBoard ();
+use WebGUI::Help::Poll ();
+use WebGUI::Help::Product ();
+use WebGUI::Help::SiteMap ();
+use WebGUI::Help::SQLReport ();
+use WebGUI::Help::Survey ();
+use WebGUI::Help::SyndicatedContent ();
+use WebGUI::Help::USS ();
+use WebGUI::Help::WebGUI ();
+use WebGUI::Help::WobjectProxy ();
+use WebGUI::Help::WSClient ();
+
+# i18n
+use WebGUI::i18n::English ();
+use WebGUI::i18n::English::Article ();
+use WebGUI::i18n::English::AuthLDAP ();
+use WebGUI::i18n::English::AuthSMB ();
+use WebGUI::i18n::English::AuthWebGUI ();
+use WebGUI::i18n::English::DataForm ();
+use WebGUI::i18n::English::EventsCalendar ();
+use WebGUI::i18n::English::FileManager ();
+use WebGUI::i18n::English::HttpProxy ();
+use WebGUI::i18n::English::IndexedSearch ();
+use WebGUI::i18n::English::MessageBoard ();
+use WebGUI::i18n::English::Navigation ();
+use WebGUI::i18n::English::Poll ();
+use WebGUI::i18n::English::Product ();
+use WebGUI::i18n::English::SiteMap ();
+use WebGUI::i18n::English::SQLReport ();
+use WebGUI::i18n::English::Survey ();
+use WebGUI::i18n::English::SyndicatedContent ();
+use WebGUI::i18n::English::USS ();
+use WebGUI::i18n::English::WebGUI ();
+use WebGUI::i18n::English::WebGUIProfile ();
+use WebGUI::i18n::English::WobjectProxy ();
+use WebGUI::i18n::English::WSClient ();
+
+# operations
use WebGUI::Operation::Auth ();
use WebGUI::Operation::Admin ();
use WebGUI::Operation::Clipboard ();
@@ -98,7 +160,6 @@ use WebGUI::Operation::Collateral ();
use WebGUI::Operation::DatabaseLink ();
use WebGUI::Operation::Group ();
use WebGUI::Operation::Help ();
-use WebGUI::Operation::International ();
use WebGUI::Operation::MessageLog ();
use WebGUI::Operation::Navigation ();
use WebGUI::Operation::Package ();
@@ -117,19 +178,25 @@ use WebGUI::Operation::Theme ();
use WebGUI::Operation::Trash ();
use WebGUI::Operation::User ();
use WebGUI::Operation::WebGUI ();
-use WebGUI::Page ();
-use WebGUI::Paginator ();
-use WebGUI::Privilege ();
-use WebGUI::Search ();
-use WebGUI::Session ();
-use WebGUI::SQL ();
-use WebGUI::Style ();
-use WebGUI::TabForm ();
-use WebGUI::Template ();
-use WebGUI::URL ();
-use WebGUI::User ();
-use WebGUI::Utility ();
-use WebGUI::Wobject ();
+
+# you can significantly reduce your memory usage by preloading the plugins used on your sites, only the most commonly used ones are preloaded by default
+
+# wobjects
+use WebGUI::Wobject::Article ();
+use WebGUI::Wobject::USS ();
+
+# auth methods
+use WebGUI::Auth::WebGUI ();
+
+#use WebGUI::Auth::LDAP ();
+#use Net::LDAP (); # used by ldap authentication
+
+#use WebGUI::Auth::SMB ();
+#use Authen::Smb (); #uncomment when using this type of authentication.
+
+# macros
+use WebGUI::Macro::AdminBar ();
+use WebGUI::Macro::Navigation ();
print "[ OK ]\n";