webgui/lib/WebGUI.pm

137 lines
4.6 KiB
Perl

package WebGUI;
our $VERSION = "6.2.0";
#-------------------------------------------------------------------
# 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
#-------------------------------------------------------------------
use strict qw(vars subs);
use Tie::CPHash;
use WebGUI::Affiliate;
use WebGUI::Cache;
use WebGUI::ErrorHandler;
use WebGUI::Grouping;
use WebGUI::HTTP;
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Operation;
use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Style;
use WebGUI::Page;
use WebGUI::URL;
use WebGUI::PassiveProfiling;
#-------------------------------------------------------------------
sub _generatePage {
my $content = shift;
if ($session{form}{op} eq "" && $session{setting}{trackPageStatistics} && $session{form}{wid} ne "new") {
WebGUI::SQL->write("insert into pageStatistics (dateStamp, userId, username, ipAddress, userAgent, referer,
pageId, pageTitle, wobjectId, wobjectFunction) values (".time().",".$session{user}{userId}
.",".quote($session{user}{username}).",
".quote($session{env}{REMOTE_ADDR}).", ".quote($session{env}{HTTP_USER_AGENT}).",
".quote($session{env}{HTTP_REFERER}).", ".$session{page}{pageId}.",
".quote($session{page}{title}).", ".quote($session{form}{wid}).", ".quote($session{form}{func}).")");
}
my $output = WebGUI::Macro::process(WebGUI::Style::process($content));
if ($session{setting}{showDebug} || ($session{form}{debug}==1 && WebGUI::Grouping::isInGroup(3))) {
$output .= WebGUI::ErrorHandler::showDebug();
}
return $output;
}
#-------------------------------------------------------------------
sub _processAction {
my ($urlString, %form, $pair, @pairs, @param);
$urlString = WebGUI::URL::unescape($_[0]);
@pairs = split(/\&/,$urlString);
foreach $pair (@pairs) {
@param = split(/\=/,$pair);
$form{$param[0]} = $param[1];
}
$session{form} = \%form;
}
#-------------------------------------------------------------------
sub _processOperations {
my ($cmd, $output);
if (exists $session{form}{op}) {
if ($session{form}{op} =~ /^[A-Za-z]+$/) {
$cmd = "WebGUI::Operation::www_".$session{form}{op};
$output = eval($cmd);
WebGUI::ErrorHandler::security("call a non-existent operation: $session{form}{op}. Root cause: ".$@) if($@);
} else {
WebGUI::ErrorHandler::security("execute an invalid operation: ".$session{form}{op});
}
}
return $output;
}
#-------------------------------------------------------------------
sub page {
my $webguiRoot = shift;
my $configFile = shift;
my $useExistingSession = shift; # used for static page generation functions where you may generate more than one page at a time.
WebGUI::Session::open($webguiRoot,$configFile) unless ($useExistingSession);
# JT: don't forget to do something with action 2
my $output = _processOperations();
if ($output ne "") {
$output = _generatePage($output);
} else {
my $useCache = (
$session{form}{op} eq "" &&
$session{form}{func} eq "" &&
(
( $session{page}{cacheTimeout} > 10 && $session{user}{userId} !=1) ||
( $session{page}{cacheTimeoutVisitor} > 10 && $session{user}{userId} == 1)
) &&
not $session{var}{adminOn}
);
my $cache;
if ($useCache) {
$cache = WebGUI::Cache->new("page_".$session{page}{pageId}."_".$session{user}{userId});
$output = $cache->get;
}
unless ($output) {
$output = WebGUI::Page::generate();
if (WebGUI::HTTP::getMimeType() eq "text/html") {
$output = _generatePage($output);
}
my $ttl;
if ($session{user}{userId} == 1) {
$ttl = $session{page}{cacheTimeoutVisitor};
} else {
$ttl = $session{page}{cacheTimeout};
}
$cache->set($output, $ttl) if ($useCache);
}
WebGUI::PassiveProfiling::addPage(); # add wobjects on page to passive profile log
}
WebGUI::Affiliate::grabReferral(); # process affilliate tracking request
my $httpHeader = WebGUI::HTTP::getHeader();
# This allows an operation or wobject to write directly to the browser.
if ($session{page}{empty}) {
$httpHeader = $output = undef;
}
WebGUI::Session::close() unless ($useExistingSession);
return $httpHeader.$output;
}
1;