From ea868a8c0e269355ed6c930fcad44fd3a1713fc9 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 7 Nov 2005 01:40:07 +0000 Subject: [PATCH] moved uploadsAccessHandler into the main webgui handler mechanism converted macros to use references fixed some other various bugs --- docs/changelog/6.x.x.txt | 2 + docs/gotcha.txt | 9 ++- docs/migration.txt | 19 +++++- docs/upgrades/upgrade_6.7.8-6.8.0.pl | 10 +++ etc/WebGUI.conf.original | 6 ++ lib/WebGUI.pm | 63 ++++++++++++++---- lib/WebGUI/Asset/Redirect.pm | 4 +- lib/WebGUI/Asset/RichEdit.pm | 1 - lib/WebGUI/Asset/Shortcut.pm | 3 +- lib/WebGUI/Asset/Snippet.pm | 3 +- lib/WebGUI/Asset/Wobject.pm | 17 ----- lib/WebGUI/Asset/Wobject/DataForm.pm | 16 +++-- lib/WebGUI/Asset/Wobject/EventsCalendar.pm | 1 - lib/WebGUI/Asset/Wobject/IndexedSearch.pm | 4 +- lib/WebGUI/Asset/Wobject/SQLReport.pm | 5 +- lib/WebGUI/Asset/Wobject/WSClient.pm | 6 +- lib/WebGUI/Auth.pm | 7 +- lib/WebGUI/Auth/WebGUI.pm | 6 +- lib/WebGUI/ErrorHandler.pm | 3 +- lib/WebGUI/Grouping.pm | 5 +- lib/WebGUI/HTML.pm | 24 +++---- lib/WebGUI/HTTP.pm | 22 +++++++ lib/WebGUI/Macro.pm | 66 +++++++------------ lib/WebGUI/Macro/AOIHits.pm | 3 +- lib/WebGUI/Macro/AOIRank.pm | 3 +- lib/WebGUI/Macro/AdminBar.pm | 3 +- lib/WebGUI/Macro/AdminText.pm | 3 +- lib/WebGUI/Macro/AdminToggle.pm | 3 +- lib/WebGUI/Macro/AssetProxy.pm | 3 +- lib/WebGUI/Macro/CanEditText.pm | 3 +- lib/WebGUI/Macro/D_date.pm | 3 +- lib/WebGUI/Macro/EditableToggle.pm | 3 +- lib/WebGUI/Macro/Env.pm | 4 +- lib/WebGUI/Macro/Execute.pm | 3 +- lib/WebGUI/Macro/FileUrl.pm | 3 +- lib/WebGUI/Macro/FormParam.pm | 4 +- lib/WebGUI/Macro/GroupAdd.pm | 3 +- lib/WebGUI/Macro/GroupDelete.pm | 3 +- lib/WebGUI/Macro/GroupText.pm | 3 +- lib/WebGUI/Macro/H_homeLink.pm | 3 +- lib/WebGUI/Macro/If.pm | 3 +- lib/WebGUI/Macro/Include.pm | 3 +- lib/WebGUI/Macro/International.pm | 4 +- lib/WebGUI/Macro/JavaScript.pm | 4 +- lib/WebGUI/Macro/L_loginBox.pm | 3 +- lib/WebGUI/Macro/LastModified.pm | 3 +- lib/WebGUI/Macro/LoginToggle.pm | 3 +- lib/WebGUI/Macro/Page.pm | 4 +- lib/WebGUI/Macro/Product.pm | 3 +- lib/WebGUI/Macro/Quote.pm | 4 +- lib/WebGUI/Macro/RandomAssetProxy.pm | 3 +- lib/WebGUI/Macro/RawHeadTags.pm | 4 +- lib/WebGUI/Macro/SQL.pm | 3 +- lib/WebGUI/Macro/Spacer.pm | 3 +- lib/WebGUI/Macro/Splat_random.pm | 3 +- lib/WebGUI/Macro/StyleSheet.pm | 4 +- lib/WebGUI/Macro/SubscriptionItem.pm | 3 +- .../Macro/SubscriptionItemPurchaseUrl.pm | 4 +- lib/WebGUI/Macro/Thumbnail.pm | 3 +- lib/WebGUI/Macro/URLEncode.pm | 4 +- lib/WebGUI/Macro/User.pm | 4 +- lib/WebGUI/Macro/a_account.pm | 3 +- lib/WebGUI/Macro/r_printable.pm | 3 +- lib/WebGUI/Mail.pm | 6 +- lib/WebGUI/MessageLog.pm | 3 +- lib/WebGUI/Operation/Help.pm | 3 +- lib/WebGUI/Operation/Profile.pm | 5 +- lib/WebGUI/SQL.pm | 5 +- lib/WebGUI/Style.pm | 4 +- lib/WebGUI/Subscription.pm | 5 +- lib/WebGUI/User.pm | 2 +- sbin/testEnvironment.pl | 1 + sbin/uploadsAccessHandler.perl | 64 ------------------ 73 files changed, 256 insertions(+), 275 deletions(-) delete mode 100644 sbin/uploadsAccessHandler.perl diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 567dab63e..875535322 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -7,6 +7,8 @@ - Switched from Apache::Registry/CGI to a pure mod_perl2 interface, which increased performance by over 70% to the entire system, and in some cases as much as 100%. See gotcha.txt for details. + - Changed macro API which cuts macro memory consumption in half. See + migration.txt for details. 6.7.7 diff --git a/docs/gotcha.txt b/docs/gotcha.txt index ef915c344..3f94a4519 100644 --- a/docs/gotcha.txt +++ b/docs/gotcha.txt @@ -15,8 +15,9 @@ save you many hours of grief. DateTime::Cron::Simple POE POE::Component::IKC::Server + Test::More - * The API has changed. Check docs/migration.txt for details. + * The core API has changed. Check docs/migration.txt for details. * Due to the performance increase achieved by switching to DateTime we no longer need date caching so the enableDateCache directive can @@ -49,6 +50,8 @@ save you many hours of grief. PerlOptions +ParseHeaders + You also no longer need the ExecCGI directive. + Edit each of your virtual hosts and add the following directives, changing them to suit your needs: @@ -70,6 +73,10 @@ save you many hours of grief. which will increase performance, and add to our functionality for the future. + * The Macro API has been changed. If you have any third-party macros + installed make sure to update them prior to upgrading. See + docs/migration.txt for details. + 6.7.0 -------------------------------------------------------------------- diff --git a/docs/migration.txt b/docs/migration.txt index 60ebd8276..6a9182284 100644 --- a/docs/migration.txt +++ b/docs/migration.txt @@ -188,6 +188,12 @@ definitions like so: alter table MyTable change assetId assetId binary not null; +1.7 processMacros() Method Removed + +In 6.8 the long depricated method processMacros() was removed. No one should +be using this any longer anyway, but we thought we'd warn you anyway. + + 2. Macro Migration ------------------- @@ -204,12 +210,23 @@ If you absolutely must write a navigation macro for some reason that our nav system does not accomodate you, then please check out the new API in WebGUI::Navigation. -2.1 Navigation Macros Revisited + +2.2 Navigation Macros Revisited As of 6.3 check out lib/WebGUI/Asset/Wobject/Navigation.pm if you want to write custom navigation macros. +2.3 Macro API Changed + +In 6.8 we modified the macro API to be more user friendly, and more +importantly to use a lot less memory. This has two results. If you use the +macro methods like filter(), negate(), or process() then you need to start +passing your content in as a scalar reference instead of a regular scalar. If +you write your own macros, you no longer need to call getParams() to retreive +your parameters. That is automatically done for you now. + + 3. Authentication Migration ----------------------------- diff --git a/docs/upgrades/upgrade_6.7.8-6.8.0.pl b/docs/upgrades/upgrade_6.7.8-6.8.0.pl index 62c87240e..514a48885 100644 --- a/docs/upgrades/upgrade_6.7.8-6.8.0.pl +++ b/docs/upgrades/upgrade_6.7.8-6.8.0.pl @@ -1,3 +1,13 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2005 Plain Black Corporation. +#------------------------------------------------------------------- +# 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 lib "../../lib"; use strict; use Getopt::Long; diff --git a/etc/WebGUI.conf.original b/etc/WebGUI.conf.original index b90ba5d04..0361e8759 100644 --- a/etc/WebGUI.conf.original +++ b/etc/WebGUI.conf.original @@ -23,6 +23,12 @@ uploadsURL = /uploads uploadsPath = /data/WebGUI/www/uploads +# An array of URLs that WebGUI should leave alone for normal +# processing by Apache. Anything that begins with these URLs +# will be entirely ignored by WebGUI + +# passthruUrls => /icons, /documentation/pdf, /my-custom-application, /server-status, /perl-status + # The scripturl tells WebGUI how to reference the gateway script # when generating URLs. By default it will use the gateway # script's filename like /index.pl/ diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm index 6751698d9..68b51e22d 100644 --- a/lib/WebGUI.pm +++ b/lib/WebGUI.pm @@ -27,9 +27,9 @@ use WebGUI::Session; use WebGUI::SQL; use WebGUI::Style; use WebGUI::URL; +use WebGUI::Utility; use WebGUI::PassiveProfiling; use Apache2::Request; -use Apache2::Cookie; use Apache2::RequestRec (); use Apache2::RequestIO (); use Apache2::Const -compile => qw(OK DECLINED); @@ -41,11 +41,17 @@ sub handler { my $r = shift; my $s = Apache2::ServerUtil->server; my $config = WebGUI::Config::getConfig($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig')); - my $extras = $config->{extrasURL}; + foreach my $url ($config->{extrasURL}, @{$config->{passthruUrls}}) { + return Apache2::Const::DECLINED if ($r->uri =~ m/^$url/); + } my $uploads = $config->{uploadsURL}; - unless ($r->uri =~ m/^$extras/ || $r->uri =~ m/^$uploads/) { + if ($r->uri =~ m/^$uploads/) { + $r->handler('perl-script'); + $r->set_handlers(PerlAccessHandler => \&uploadsHandler); + } else { $r->handler('perl-script'); - $r->set_handlers(PerlResponseHandler => \&contentHandler);#, PerlTransHandler => \&Apache2::Const::OK); + $r->set_handlers(PerlResponseHandler => \&contentHandler); + $r->set_handlers(PerlTransHandler => sub { return Apache2::Const::OK }); } return Apache2::Const::DECLINED; } @@ -55,16 +61,10 @@ sub handler { sub contentHandler { my $r = shift; my $s = Apache2::ServerUtil->server; - - $session{cookie} = APR::Request::Apache2->handle($r)->jar(); - + WebGUI::HTTP::getCookies(); WebGUI::Session::open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r); - ###---------------------------- ### Apache2::Request object $session{req} = Apache2::Request->new($r, POST_MAX => 1024 * $session{setting}{maxAttachmentSize}); - - # Add wgSession cookie to header - WebGUI::HTTP::setCookie("wgSession",$session{var}{sessionId}); ### Add Apache Request stuff to Session $session{wguri} = $r->uri; ### check to see if client is proxied and adjust remote_addr as necessary @@ -72,7 +72,6 @@ sub contentHandler { $session{env}{REMOTE_ADDR} = $ENV{HTTP_X_FORWARDED_FOR}; } ### form variables - # foreach ($session{req}->param) { $session{form}{$_} = $session{req}->param($_); } @@ -168,6 +167,46 @@ sub setup { } +#------------------------------------------------------------------- +sub uploadsHandler { + my $r = shift; + my $s = Apache2::ServerUtil->server; + my $ok = Apache2::Const::OK(); + my $notfound = Apache2::Const::NOT_FOUND(); + if (-e $r->filename) { + my $path = $r->filename; + $path =~ s/^(\/.*\/).*$/$1/; + if (-e $path.".wgaccess") { + my $fileContents; + open(FILE,"<".$path.".wgaccess"); + while () { + $fileContents .= $_; + } + close(FILE); + my @privs = split("\n",$fileContents); + unless ($privs[1] eq "7" || $privs[1] eq "1") { + WebGUI::HTTP::getCookies(); + WebGUI::Session::open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r); + ### Apache2::Request object + $session{req} = $r; + WebGUI::Session::refreshSessionVars($session{cookie}{wgSession}); + my $hasPrivs = ($session{user}{userId} eq $privs[0] || WebGUI::Grouping::isInGroup($privs[1]) || WebGUI::Grouping::isInGroup($privs[2])); + WebGUI::Session::close(); + if ($hasPrivs) { + return $ok; + } else { + return 401; + } + } + } + return $ok; + } else { + return $notfound; + } + +} + + #------------------------------------------------------------------- sub upgrading { my $output = WebGUI::HTTP::getHeader(); diff --git a/lib/WebGUI/Asset/Redirect.pm b/lib/WebGUI/Asset/Redirect.pm index 000d45d92..0272c1143 100644 --- a/lib/WebGUI/Asset/Redirect.pm +++ b/lib/WebGUI/Asset/Redirect.pm @@ -120,7 +120,9 @@ sub www_view { if ($session{var}{adminOn}) { return $self->getContainer->www_view; } - WebGUI::HTTP::setRedirect(WebGUI::Macro::process($self->get("redirectUrl"))) unless $self->get("redirectUrl") eq $self->get("url"); + my $url = $self->get("redirectUrl"); + WebGUI::Macro::process(\$url); + WebGUI::HTTP::setRedirect($url) unless $self->get("redirectUrl") eq $self->get("url"); return "Redirect is self-referential"; } diff --git a/lib/WebGUI/Asset/RichEdit.pm b/lib/WebGUI/Asset/RichEdit.pm index 519c62b4d..8b19ddda8 100644 --- a/lib/WebGUI/Asset/RichEdit.pm +++ b/lib/WebGUI/Asset/RichEdit.pm @@ -17,7 +17,6 @@ package WebGUI::Asset::RichEdit; use strict; use WebGUI::Asset; use WebGUI::Form; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Utility; use WebGUI::International; diff --git a/lib/WebGUI/Asset/Shortcut.pm b/lib/WebGUI/Asset/Shortcut.pm index eded414d0..114b7400a 100644 --- a/lib/WebGUI/Asset/Shortcut.pm +++ b/lib/WebGUI/Asset/Shortcut.pm @@ -13,6 +13,7 @@ package WebGUI::Asset::Shortcut; use strict; use WebGUI::Asset; use WebGUI::International; +use WebGUI::Macro; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; @@ -240,7 +241,7 @@ sub getShortcutByCriteria { my $assetId = $self->getId; # Parse macro's in criteria - $criteria = WebGUI::Macro::process($criteria); + WebGUI::Macro::process(\$criteria); # Once a asset is found, we will stick to that asset, # to prevent the proxying of multiple- depth assets like Surveys and USS. diff --git a/lib/WebGUI/Asset/Snippet.pm b/lib/WebGUI/Asset/Snippet.pm index 1ae3c3d83..15dbffd8d 100644 --- a/lib/WebGUI/Asset/Snippet.pm +++ b/lib/WebGUI/Asset/Snippet.pm @@ -148,7 +148,8 @@ sub getToolbar { sub view { my $self = shift; my $calledAsWebMethod = shift; - my $output = WebGUI::Macro::process($self->get("snippet")); + my $output = $self->get("snippet"); + WebGUI::Macro::process(\$output); $output = '

'.$self->getToolbar.'

'.$output if ($session{var}{adminOn} && !$calledAsWebMethod); return $output unless ($self->getValue("processAsTemplate")); return WebGUI::Asset::Template->processRaw($output); diff --git a/lib/WebGUI/Asset/Wobject.pm b/lib/WebGUI/Asset/Wobject.pm index b337ad8ea..4564805c0 100644 --- a/lib/WebGUI/Asset/Wobject.pm +++ b/lib/WebGUI/Asset/Wobject.pm @@ -395,23 +395,6 @@ sub moveCollateralUp { WebGUI::SQL->commit; } -#------------------------------------------------------------------- - -=head2 processMacros ( output ) - - Decides whether or not macros should be processed and returns the appropriate output. - -=head3 output - - An HTML blob to be processed for macros. - -=cut - -sub processMacros { - return WebGUI::Macro::process($_[1]); -} - - #------------------------------------------------------------------- sub processPropertiesFromFormPost { my $self = shift; diff --git a/lib/WebGUI/Asset/Wobject/DataForm.pm b/lib/WebGUI/Asset/Wobject/DataForm.pm index 4f0672d52..9fc7de15a 100644 --- a/lib/WebGUI/Asset/Wobject/DataForm.pm +++ b/lib/WebGUI/Asset/Wobject/DataForm.pm @@ -461,7 +461,9 @@ sub getRecordTemplateVars { $data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date"); } if (not exists $data{value}) { - $data{value} = WebGUI::Macro::process($data{defaultValue}); + my $defaultValue = $data{defaultValue}; + WebGUI::Macro::process(\$defaultValue); + $data{value} = $defaultValue; } my $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData"))); my $value = $data{value}; @@ -503,7 +505,9 @@ sub getRecordTemplateVars { $data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date"); } if (not exists $data{value}) { - $data{value} = WebGUI::Macro::process($data{defaultValue}); + my $defaultValue = $data{defaultValue}; + WebGUI::Macro::process(\$defaultValue); + $data{value} = $defaultValue; } my $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData"))); my $value = $data{value}; @@ -612,7 +616,8 @@ sub purge { sub sendEmail { my $self = shift; my $var = shift; - my $message = WebGUI::Macro::process($self->processTemplate($var,$self->get("emailTemplateId"))); + my $message = $self->processTemplate($var,$self->get("emailTemplateId")); + WebGUI::Macro::process(\$message); my ($to, $subject, $from, $bcc, $cc); foreach my $row (@{$var->{field_loop}}) { if ($row->{"field.name"} eq "to") { @@ -1079,7 +1084,7 @@ sub www_process { my $value = $row{defaultValue}; if ($row{status} eq "required" || $row{status} eq "editable") { $value = WebGUI::FormProcessor::process($row{name},$row{type},$row{defaultValue}); - $value = WebGUI::Macro::filter($value); + WebGUI::Macro::filter(\$value); } if ($row{status} eq "required" && ($value =~ /^\s$/ || $value eq "" || not defined $value)) { push (@errors,{ @@ -1089,7 +1094,8 @@ sub www_process { delete $var->{entryId}; } if ($row{status} eq "hidden") { - $value = WebGUI::Macro::process($row{defaultValue}); + $value = $row{defaultValue}; + WebGUI::Macro::process(\$value); } unless ($hadErrors) { my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=".quote($entryId)." diff --git a/lib/WebGUI/Asset/Wobject/EventsCalendar.pm b/lib/WebGUI/Asset/Wobject/EventsCalendar.pm index d22306e28..17b015553 100644 --- a/lib/WebGUI/Asset/Wobject/EventsCalendar.pm +++ b/lib/WebGUI/Asset/Wobject/EventsCalendar.pm @@ -15,7 +15,6 @@ use Tie::CPHash; use WebGUI::DateTime; use WebGUI::ErrorHandler; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Privilege; use WebGUI::Id; use WebGUI::Session; diff --git a/lib/WebGUI/Asset/Wobject/IndexedSearch.pm b/lib/WebGUI/Asset/Wobject/IndexedSearch.pm index 688ea872a..d7be0f924 100644 --- a/lib/WebGUI/Asset/Wobject/IndexedSearch.pm +++ b/lib/WebGUI/Asset/Wobject/IndexedSearch.pm @@ -235,7 +235,9 @@ sub view { $var{query} .= " ".join(" ",map("-".$_,split(/\s+/,$var{without}))) if ($var{without}); # Remove macro's from query - $var{query} = WebGUI::Macro::negate($var{query}); + my $query = $var{query}; + WebGUI::Macro::negate(\$query); + $var{query} = $query; # Set some standard vars $var{submit} = WebGUI::Form::submit({value=>WebGUI::International::get(16, "Asset_IndexedSearch")}); diff --git a/lib/WebGUI/Asset/Wobject/SQLReport.pm b/lib/WebGUI/Asset/Wobject/SQLReport.pm index 0d8157e9a..0e497070d 100644 --- a/lib/WebGUI/Asset/Wobject/SQLReport.pm +++ b/lib/WebGUI/Asset/Wobject/SQLReport.pm @@ -293,7 +293,7 @@ sub _parsePlaceholderParams { } elsif ($type =~ /^query(\d)/) { $param = $self->{_query}{$1}{rowData}{$field}; } - $param = WebGUI::Macro::process($param); + WebGUI::Macro::process(\$param); push(@placeholderParams, $param); } return \@placeholderParams; @@ -316,7 +316,8 @@ sub _processQuery { # Preprocess macros if ($self->{_query}{$nr}{preprocessMacros}) { - $query = WebGUI::Macro::process($self->{_query}{$nr}{dbQuery}); + my $query = $self->{_query}{$nr}{dbQuery}; + WebGUI::Macro::process(\$query); } else { $query = $self->{_query}{$nr}{dbQuery}; } diff --git a/lib/WebGUI/Asset/Wobject/WSClient.pm b/lib/WebGUI/Asset/Wobject/WSClient.pm index 286ecb57f..644c2ee18 100644 --- a/lib/WebGUI/Asset/Wobject/WSClient.pm +++ b/lib/WebGUI/Asset/Wobject/WSClient.pm @@ -298,8 +298,10 @@ sub view { # snag our SOAP call and preprocess if needed if ($self->get('preprocessMacros')) { - $call = WebGUI::Macro::process($self->get("callMethod")); - $param_str = WebGUI::Macro::process($self->get("params")); + $call = $self->get("callMethod"); + WebGUI::Macro::process(\$call); + $param_str = $self->get("params"); + WebGUI::Macro::process(\$param_str); } else { $call = $self->get('callMethod'); $param_str = $self->get('params'); diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm index b8e1437e0..e15c0b2a5 100644 --- a/lib/WebGUI/Auth.pm +++ b/lib/WebGUI/Auth.pm @@ -261,7 +261,9 @@ sub createAccountSave { WebGUI::Session::convertVisitorToUser($session{var}{sessionId},$userId); _logLogin($userId,"success"); - system(WebGUI::Macro::process($session{setting}{runOnRegistration})) if ($session{setting}{runOnRegistration} ne ""); + my $command = $session{setting}{runOnRegistration}; + WebGUI::Macro::process(\$command); + system($command) if ($session{setting}{runOnRegistration} ne ""); WebGUI::MessageLog::addInternationalizedEntry('',$session{setting}{onNewUserAlertGroup},'',536) if ($session{setting}{alertOnNewUser}); return ""; } @@ -739,7 +741,8 @@ Validates the a username. sub validUsername { my $self = shift; - my $username = WebGUI::Macro::negate($_[0]); + my $username = shift; + WebGUI::Macro::negate(\$username); my $error = ""; if($self->_isDuplicateUsername($username)){ diff --git a/lib/WebGUI/Auth/WebGUI.pm b/lib/WebGUI/Auth/WebGUI.pm index 509a5d00a..896a15e94 100644 --- a/lib/WebGUI/Auth/WebGUI.pm +++ b/lib/WebGUI/Auth/WebGUI.pm @@ -39,8 +39,10 @@ our @ISA = qw(WebGUI::Auth); sub _isValidPassword { my $self = shift; - my $password = WebGUI::Macro::negate(shift); - my $confirm = WebGUI::Macro::negate(shift); + my $password = shift; + WebGUI::Macro::negate(\$password); + my $confirm = shift; + WebGUI::Macro::negate(\$confirm); my $error = ""; if ($password ne $confirm) { diff --git a/lib/WebGUI/ErrorHandler.pm b/lib/WebGUI/ErrorHandler.pm index 694ce2259..a07007ffa 100644 --- a/lib/WebGUI/ErrorHandler.pm +++ b/lib/WebGUI/ErrorHandler.pm @@ -172,8 +172,7 @@ Adds a FATAL type message to the log, outputs an error message to the user, and sub fatal { my $message = shift; my $logger = getLogger(); - Apache2::RequestUtil->request->content_type('text/html'); - + Apache2::RequestUtil->request->content_type('text/html') if ($WebGUI::Session::session{req}); $logger->fatal($message); $logger->debug("Stack trace for FATAL ".$message."\n".getStackTrace()); unless ($WebGUI::Session::session{setting}{showDebug}) { diff --git a/lib/WebGUI/Grouping.pm b/lib/WebGUI/Grouping.pm index ed24c0ed5..370015afc 100755 --- a/lib/WebGUI/Grouping.pm +++ b/lib/WebGUI/Grouping.pm @@ -20,6 +20,7 @@ use WebGUI::Cache; use WebGUI::DateTime; use WebGUI::ErrorHandler; use WebGUI::LDAPLink; +use WebGUI::Macro; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Utility; @@ -427,7 +428,9 @@ sub isInGroup { my $dbh = $dbLink->dbh; if (defined $dbh) { if ($group{dbQuery} =~ /select 1/i) { - $group{dbQuery} = WebGUI::Macro::process($group{dbQuery}); + my $query = $group{dbQuery}; + WebGUI::Macro::process(\$query); + $group{dbQuery} = $query; my $sth = WebGUI::SQL->unconditionalRead($group{dbQuery},$dbh); unless ($sth->errorCode < 1) { WebGUI::ErrorHandler::warn("There was a problem with the database query for group ID $gid."); diff --git a/lib/WebGUI/HTML.pm b/lib/WebGUI/HTML.pm index 38f76eee2..04e64aa1a 100644 --- a/lib/WebGUI/HTML.pm +++ b/lib/WebGUI/HTML.pm @@ -102,14 +102,13 @@ Choose from "all", "none", "macros", "javascript", or "most". Defaults to "most" =cut sub filter { - my ($filter, $html, $type); - $type = $_[1]; + my $html = shift; + my $type = shift; if ($type eq "all") { - $filter = HTML::TagFilter->new(allow=>{'none'},strip_comments=>1); - $html = $filter->filter($_[0]); - return WebGUI::Macro::negate($html); + my $filter = HTML::TagFilter->new(allow=>{'none'},strip_comments=>1); + $html = $filter->filter($html); + WebGUI::Macro::negate(\$html); } elsif ($type eq "javascript") { - $html = $_[0]; $html =~ s/\//ixsg; $html =~ s/(href="??)javascript\:.*?\)/$1removed/ixsg; $html =~ s/onClick/removed/ixsg; @@ -125,16 +124,17 @@ sub filter { $html =~ s/onKeyDown/removed/ixsg; $html =~ s/onSubmit/removed/ixsg; $html =~ s/onReset/removed/ixsg; - $html = WebGUI::Macro::negate($html); + WebGUI::Macro::negate(\$html); } elsif ($type eq "macros") { - return WebGUI::Macro::negate($_[0]); + WebGUI::Macro::negate(\$html); } elsif ($type eq "none") { - return $_[0]; + # do nothing } else { - $filter = HTML::TagFilter->new; # defaultly strips almost everything - $html = $filter->filter($_[0]); - return WebGUI::Macro::filter($html); + my $filter = HTML::TagFilter->new; # defaultly strips almost everything + $html = $filter->filter($html); + WebGUI::Macro::filter(\$html); } + return $html; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/HTTP.pm b/lib/WebGUI/HTTP.pm index 97f224295..0518b604b 100644 --- a/lib/WebGUI/HTTP.pm +++ b/lib/WebGUI/HTTP.pm @@ -16,6 +16,7 @@ package WebGUI::HTTP; use strict; +use Apache2::Cookie; use WebGUI::Session; use WebGUI::Style; @@ -31,6 +32,7 @@ This package allows the manipulation of HTTP protocol information. use WebGUI::HTTP; + $cookies = WebGUI::HTTP::getCookies(); $header = WebGUI::HTTP::getHeader(); $mimetype = WebGUI::HTTP::getMimeType(); $code = WebGUI::HTTP::getStatus(); @@ -50,6 +52,26 @@ These subroutines are available from this package: +#------------------------------------------------------------------- + +=head2 getCookies ( ) + +Retrieves the cookies from the HTTP header, persists them to the session, and returns a hash reference containing them. + +=cut + +sub getCookies { + my %cookies = Apache2::Cookie->fetch(); + foreach my $key (keys %cookies) { + my $value = $cookies{$key}; + $value =~ s/$key=//; # Strange... The Apache2::Cookie value also contains the key ???? + # Must be a bug in Apache2::Cookie... + $WebGUI::Session::session{cookie}{$key} = $value; + } + return $WebGUI::Session::session{cookie}; +} + + #------------------------------------------------------------------- =head2 getHeader ( ) diff --git a/lib/WebGUI/Macro.pm b/lib/WebGUI/Macro.pm index 9f2f3192a..3b2afda94 100644 --- a/lib/WebGUI/Macro.pm +++ b/lib/WebGUI/Macro.pm @@ -33,10 +33,12 @@ B This entire system is likely to be replaced in the near future. It has =head1 SYNOPSIS use WebGUI::Macro; - $html = WebGUI::Macro::filter($html); + @array = WebGUI::Macro::getParams($parameterString); - $html = WebGUI::Macro::negate($html); - $html = WebGUI::Macro::process($html); + + WebGUI::Macro::filter(\$html); + WebGUI::Macro::negate(\$html); + WebGUI::Macro::process(\$html); =head1 METHODS @@ -73,43 +75,18 @@ Removes all the macros from the HTML segment. =head3 html -The segment to be filtered. +The segment to be filtered as a scalar reference. =cut sub filter { my $content = shift; - while ($content =~ /($nestedMacro)/gs) { - $content =~ s/\Q$1//gs; + while ($$content =~ /($nestedMacro)/gs) { + $$content =~ s/\Q$1//gs; } - return $content; } -#------------------------------------------------------------------- - -=head2 getParams ( parameterString ) - -A simple, but error prone mechanism for getting a prameter list from a string. Returns an array of parameters. - -=head3 parameterString - -A string containing a comma separated list of paramenters. - -=cut - -sub getParams { - my ($data, @param); - $data = $_[0]; - push(@param, $+) while $data =~ m { - "([^\"\\]*(?:\\.[^\"\\]*)*)",? - | ([^,]+),? - | , - }gx; - push(@param, undef) if substr($data,-1,1) eq ','; - return @param; -} - #------------------------------------------------------------------- =head2 negate ( html ) @@ -118,14 +95,13 @@ Nullifies all macros in this content segment. =head3 html -A string of HTML to be processed. +A scalar refernece of HTML to be processed. =cut sub negate { - my $html = $_[0]; - $html =~ s/\^/\&\#94\;/g; - return $html; + my $html = shift; + $$html =~ s/\^/\&\#94\;/g; } @@ -137,27 +113,34 @@ Runs all the WebGUI macros to and replaces them in the HTML with their output. =head3 html -A string of HTML to be processed. +A scalar reference of HTML to be processed. =cut sub process { my $content = shift; - while ($content =~ /$nestedMacro/gs) { + while ($$content =~ /$nestedMacro/gs) { my ($macro, $searchString, $params) = ($1, $2, $3); next if ($searchString =~ /^\d+$/); # don't process ^0; ^1; ^2; etc. next if ($searchString =~ /^\-$/); # don't process ^-; if ($params ne "") { $params =~ s/(^\(|\)$)//g; # remove parenthesis - $params = &process($params); # recursive process params + &process(\$params); # recursive process params } if ($WebGUI::Session::session{config}{macros}{$searchString} ne "") { my $cmd = "WebGUI::Macro::".$WebGUI::Session::session{config}{macros}{$searchString}; my $load = "use ".$cmd; eval($load); WebGUI::ErrorHandler::error("Macro failed to compile: $cmd.".$@) if($@); + my @param; + push(@param, $+) while $params =~ m { + "([^\"\\]*(?:\\.[^\"\\]*)*)",? + | ([^,]+),? + | , + }gx; + push(@param, undef) if substr($params,-1,1) eq ','; $cmd = $cmd."::process"; - my $result = eval{&$cmd($params)}; + my $result = eval{&$cmd(@param)}; if ($@) { WebGUI::ErrorHandler::error("Processing failed on macro: $macro: ".$@); } else { @@ -165,14 +148,11 @@ sub process { $result = "Endless macro loop detected. Stopping recursion."; WebGUI::ErrorHandler::warn($macro." : ".$result) } - $content =~ s/\Q$macro/$result/ges; + $$content =~ s/\Q$macro/$result/ges; } } } - return $content; } - - 1; diff --git a/lib/WebGUI/Macro/AOIHits.pm b/lib/WebGUI/Macro/AOIHits.pm index 1f5ccb846..bff02dba2 100644 --- a/lib/WebGUI/Macro/AOIHits.pm +++ b/lib/WebGUI/Macro/AOIHits.pm @@ -11,14 +11,13 @@ package WebGUI::Macro::AOIHits; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::SQL; #------------------------------------------------------------------- sub process { my (@param, $temp); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; my $key = $param[0]; my $value = $param[1]; my $sql = "select count from passiveProfileAOI a, metaData_properties f diff --git a/lib/WebGUI/Macro/AOIRank.pm b/lib/WebGUI/Macro/AOIRank.pm index 4fdd31198..9203fb0ad 100644 --- a/lib/WebGUI/Macro/AOIRank.pm +++ b/lib/WebGUI/Macro/AOIRank.pm @@ -11,14 +11,13 @@ package WebGUI::Macro::AOIRank; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::SQL; #------------------------------------------------------------------- sub process { my (@param, $temp); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; my $key = $param[0]; my $rank = $param[1] || 1; # 1 is highest rank $rank--; # Rank is zero based diff --git a/lib/WebGUI/Macro/AdminBar.pm b/lib/WebGUI/Macro/AdminBar.pm index e340c9604..fbd6e809d 100644 --- a/lib/WebGUI/Macro/AdminBar.pm +++ b/lib/WebGUI/Macro/AdminBar.pm @@ -18,7 +18,6 @@ use WebGUI::Asset; use WebGUI::Asset::Template; use WebGUI::Grouping; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; @@ -27,7 +26,7 @@ use WebGUI::Utility; #------------------------------------------------------------------- sub process { return "" unless ($session{var}{adminOn}); - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; my $templateId = $param[0] || "PBtmpl0000000000000090"; my %var; my (%cphash, %hash2, %hash, $r, @item, $query); diff --git a/lib/WebGUI/Macro/AdminText.pm b/lib/WebGUI/Macro/AdminText.pm index cb89a47b0..a187d8bd8 100644 --- a/lib/WebGUI/Macro/AdminText.pm +++ b/lib/WebGUI/Macro/AdminText.pm @@ -11,12 +11,11 @@ package WebGUI::Macro::AdminText; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams(shift); + my @param = @_; return "" unless ($session{var}{adminOn}); return $param[0]; } diff --git a/lib/WebGUI/Macro/AdminToggle.pm b/lib/WebGUI/Macro/AdminToggle.pm index 66834eb16..dbe78933b 100644 --- a/lib/WebGUI/Macro/AdminToggle.pm +++ b/lib/WebGUI/Macro/AdminToggle.pm @@ -13,7 +13,6 @@ package WebGUI::Macro::AdminToggle; use strict; use WebGUI::Grouping; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; @@ -22,7 +21,7 @@ use WebGUI::URL; sub process { if (WebGUI::Grouping::isInGroup(12)) { my %var; - my ($turnOn,$turnOff,$templateName) = WebGUI::Macro::getParams($_[0]); + my ($turnOn,$turnOff,$templateName) = @_; $turnOn ||= WebGUI::International::get(516,'Macro_AdminToggle'); $turnOff ||= WebGUI::International::get(517,'Macro_AdminToggle'); if (WebGUI::Session::isAdminOn()) { diff --git a/lib/WebGUI/Macro/AssetProxy.pm b/lib/WebGUI/Macro/AssetProxy.pm index 5815797e5..68e24742b 100644 --- a/lib/WebGUI/Macro/AssetProxy.pm +++ b/lib/WebGUI/Macro/AssetProxy.pm @@ -14,12 +14,11 @@ use strict; use Time::HiRes; use WebGUI::Asset; use WebGUI::ErrorHandler; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my ($url) = WebGUI::Macro::getParams(shift); + my $url = shift; my $t = [Time::HiRes::gettimeofday()] if (WebGUI::ErrorHandler::canShowPerformanceIndicators()); my $asset = WebGUI::Asset->newByUrl($url); #Sorry, you cannot proxy the notfound page. diff --git a/lib/WebGUI/Macro/CanEditText.pm b/lib/WebGUI/Macro/CanEditText.pm index f31a8351b..b602f588e 100644 --- a/lib/WebGUI/Macro/CanEditText.pm +++ b/lib/WebGUI/Macro/CanEditText.pm @@ -11,12 +11,11 @@ package WebGUI::Macro::CanEditText; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; if (exists $session{asset} && $session{asset}->canEdit) { return $param[0]; } else { diff --git a/lib/WebGUI/Macro/D_date.pm b/lib/WebGUI/Macro/D_date.pm index 9e53c6d38..646ede447 100644 --- a/lib/WebGUI/Macro/D_date.pm +++ b/lib/WebGUI/Macro/D_date.pm @@ -12,12 +12,11 @@ package WebGUI::Macro::D_date; use strict; use WebGUI::DateTime; -use WebGUI::Macro; #------------------------------------------------------------------- sub process { my (@param, $temp, $time); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; $time = $param[1] || time(); $temp = epochToHuman($time,$param[0]); return $temp; diff --git a/lib/WebGUI/Macro/EditableToggle.pm b/lib/WebGUI/Macro/EditableToggle.pm index d8ff60a93..be4d152cb 100644 --- a/lib/WebGUI/Macro/EditableToggle.pm +++ b/lib/WebGUI/Macro/EditableToggle.pm @@ -13,7 +13,6 @@ package WebGUI::Macro::EditableToggle; use strict; use WebGUI::Grouping; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; @@ -22,7 +21,7 @@ use WebGUI::URL; sub process { if (exists $session{asset} && $session{asset}->canEdit && WebGUI::Grouping::isInGroup(12)) { my %var; - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; my $turnOn = $param[0] || WebGUI::International::get(516,'Macro_EditableToggle'); my $turnOff = $param[1] || WebGUI::International::get(517,'Macro_EditableToggle'); if ($session{var}{adminOn}) { diff --git a/lib/WebGUI/Macro/Env.pm b/lib/WebGUI/Macro/Env.pm index ece34f820..11a275829 100644 --- a/lib/WebGUI/Macro/Env.pm +++ b/lib/WebGUI/Macro/Env.pm @@ -11,13 +11,11 @@ package WebGUI::Macro::Env; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); - return $session{env}{$param[0]}; + return $session{env}{shift}; } 1; diff --git a/lib/WebGUI/Macro/Execute.pm b/lib/WebGUI/Macro/Execute.pm index ab4c86011..5e8716261 100644 --- a/lib/WebGUI/Macro/Execute.pm +++ b/lib/WebGUI/Macro/Execute.pm @@ -11,11 +11,10 @@ package WebGUI::Macro::Execute; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /\.conf/) { return "SECURITY VIOLATION"; } else { diff --git a/lib/WebGUI/Macro/FileUrl.pm b/lib/WebGUI/Macro/FileUrl.pm index c59e7d94d..ac91c1ba0 100644 --- a/lib/WebGUI/Macro/FileUrl.pm +++ b/lib/WebGUI/Macro/FileUrl.pm @@ -12,13 +12,12 @@ package WebGUI::Macro::FileUrl; use strict; use WebGUI::Asset; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Storage; #------------------------------------------------------------------- sub process { - my ($url) = WebGUI::Macro::getParams(shift); + my $url = shift; my $asset = WebGUI::Asset->newByUrl($url); if (defined $asset) { my $storage = WebGUI::Storage->get($asset->get("storageId")); diff --git a/lib/WebGUI/Macro/FormParam.pm b/lib/WebGUI/Macro/FormParam.pm index ca1cb0b59..e0ac5b172 100644 --- a/lib/WebGUI/Macro/FormParam.pm +++ b/lib/WebGUI/Macro/FormParam.pm @@ -11,13 +11,11 @@ package WebGUI::Macro::FormParam; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); - return $session{form}{$param[0]}; + return $session{form}{shift}; } diff --git a/lib/WebGUI/Macro/GroupAdd.pm b/lib/WebGUI/Macro/GroupAdd.pm index 523e1cca6..ddef79d36 100644 --- a/lib/WebGUI/Macro/GroupAdd.pm +++ b/lib/WebGUI/Macro/GroupAdd.pm @@ -13,14 +13,13 @@ package WebGUI::Macro::GroupAdd; use strict; use WebGUI::Group; use WebGUI::Grouping; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; return "" if ($param[0] eq ""); return "" if ($param[1] eq ""); return "" if ($session{user}{userId} eq '1'); diff --git a/lib/WebGUI/Macro/GroupDelete.pm b/lib/WebGUI/Macro/GroupDelete.pm index c0dfc03a5..e6d46746e 100644 --- a/lib/WebGUI/Macro/GroupDelete.pm +++ b/lib/WebGUI/Macro/GroupDelete.pm @@ -13,14 +13,13 @@ package WebGUI::Macro::GroupDelete; use strict; use WebGUI::Group; use WebGUI::Grouping; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; return "" if ($param[0] eq ""); return "" if ($param[1] eq ""); return "" if ($session{user}{userId} eq '1'); diff --git a/lib/WebGUI/Macro/GroupText.pm b/lib/WebGUI/Macro/GroupText.pm index b4ca7ffc9..fd517279a 100644 --- a/lib/WebGUI/Macro/GroupText.pm +++ b/lib/WebGUI/Macro/GroupText.pm @@ -12,13 +12,12 @@ package WebGUI::Macro::GroupText; use strict; use WebGUI::Grouping; -use WebGUI::Macro; use WebGUI::SQL; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; my ($groupId) = WebGUI::SQL->quickArray("select groupId from groups where groupName=".quote($param[0]),WebGUI::SQL->getSlave); $groupId = 3 if ($groupId eq ""); if (WebGUI::Grouping::isInGroup($groupId)) { diff --git a/lib/WebGUI/Macro/H_homeLink.pm b/lib/WebGUI/Macro/H_homeLink.pm index ac34c57e0..4abae9c88 100644 --- a/lib/WebGUI/Macro/H_homeLink.pm +++ b/lib/WebGUI/Macro/H_homeLink.pm @@ -14,12 +14,11 @@ use strict; use WebGUI::Asset; use WebGUI::Asset::Template; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my ($label, $templateUrl) = WebGUI::Macro::getParams(shift); + my ($label, $templateUrl) = @_; my $home = WebGUI::Asset->getDefault; if ($label ne "linkonly") { my %var; diff --git a/lib/WebGUI/Macro/If.pm b/lib/WebGUI/Macro/If.pm index 1cea36e3f..8a2aa35ac 100644 --- a/lib/WebGUI/Macro/If.pm +++ b/lib/WebGUI/Macro/If.pm @@ -13,10 +13,9 @@ package WebGUI::Macro::If; use strict; use Safe; -use WebGUI::Macro; sub process { - my ($expression, $true, $false) = WebGUI::Macro::getParams(shift); + my ($expression, $true, $false) = @_; my $output = $false; # Workaround to "Safely" eval $expression diff --git a/lib/WebGUI/Macro/Include.pm b/lib/WebGUI/Macro/Include.pm index 50bf0782c..808bf0d70 100644 --- a/lib/WebGUI/Macro/Include.pm +++ b/lib/WebGUI/Macro/Include.pm @@ -12,12 +12,11 @@ package WebGUI::Macro::Include; use strict; use FileHandle; -use WebGUI::Macro; #------------------------------------------------------------------- sub process { my (@param, $temp, $file); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /WebGUI.conf/) { $temp = "SECURITY VIOLATION"; } else { diff --git a/lib/WebGUI/Macro/International.pm b/lib/WebGUI/Macro/International.pm index 778f6248c..a1f5089a4 100644 --- a/lib/WebGUI/Macro/International.pm +++ b/lib/WebGUI/Macro/International.pm @@ -12,13 +12,11 @@ package WebGUI::Macro::International; use strict; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); - return WebGUI::International::get($param[0],$param[1]); + return WebGUI::International::get(shift,shift); } diff --git a/lib/WebGUI/Macro/JavaScript.pm b/lib/WebGUI/Macro/JavaScript.pm index 624f85a9f..017869336 100644 --- a/lib/WebGUI/Macro/JavaScript.pm +++ b/lib/WebGUI/Macro/JavaScript.pm @@ -11,14 +11,12 @@ package WebGUI::Macro::JavaScript; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Style; #------------------------------------------------------------------- sub process { - my ($script) = WebGUI::Macro::getParams(shift); - WebGUI::Style::setScript($script,{type=>'text/javascript'}); + WebGUI::Style::setScript(shift,{type=>'text/javascript'}); return ""; } diff --git a/lib/WebGUI/Macro/L_loginBox.pm b/lib/WebGUI/Macro/L_loginBox.pm index f5d2386b8..08e37aa6d 100644 --- a/lib/WebGUI/Macro/L_loginBox.pm +++ b/lib/WebGUI/Macro/L_loginBox.pm @@ -13,7 +13,6 @@ package WebGUI::Macro::L_loginBox; use strict; use WebGUI::Form; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; @@ -25,7 +24,7 @@ sub _createURL { #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; my $templateId = $param[2] || "PBtmpl0000000000000044"; my %var; $var{'user.isVisitor'} = ($session{user}{userId} eq "1"); diff --git a/lib/WebGUI/Macro/LastModified.pm b/lib/WebGUI/Macro/LastModified.pm index 94c5b2d14..e09eedee7 100644 --- a/lib/WebGUI/Macro/LastModified.pm +++ b/lib/WebGUI/Macro/LastModified.pm @@ -12,7 +12,6 @@ package WebGUI::Macro::LastModified; use strict; use WebGUI::DateTime; -use WebGUI::Macro; use WebGUI::Asset; use WebGUI::Session; use WebGUI::International; @@ -22,7 +21,7 @@ use WebGUI::SQL; sub process { return '' unless $session{asset}; my ($label, $format, $time); - ($label, $format) = WebGUI::Macro::getParams(shift); + ($label, $format) = @_; $format = '%z' if ($format eq ""); ($time) = WebGUI::SQL->quickArray("SELECT max(revisionDate) FROM assetData where assetId=".quote($session{asset}->getId),WebGUI::SQL->getSlave); return WebGUI::International::get(43,'Asset_Survey') if $time eq 0; diff --git a/lib/WebGUI/Macro/LoginToggle.pm b/lib/WebGUI/Macro/LoginToggle.pm index 3803fcde0..e46629e30 100644 --- a/lib/WebGUI/Macro/LoginToggle.pm +++ b/lib/WebGUI/Macro/LoginToggle.pm @@ -12,14 +12,13 @@ package WebGUI::Macro::LoginToggle; use strict; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); + my @param = @_; my $login = $param[0] || WebGUI::International::get(716,'Macro_LoginToggle'); my $logout = $param[1] || WebGUI::International::get(717,'Macro_LoginToggle'); my %var; diff --git a/lib/WebGUI/Macro/Page.pm b/lib/WebGUI/Macro/Page.pm index ff78508d0..7cf140bbd 100644 --- a/lib/WebGUI/Macro/Page.pm +++ b/lib/WebGUI/Macro/Page.pm @@ -11,14 +11,12 @@ package WebGUI::Macro::Page; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); if (exists $session{asset}) { - return $session{asset}->get($param[0]); + return $session{asset}->get(shift); } return ""; } diff --git a/lib/WebGUI/Macro/Product.pm b/lib/WebGUI/Macro/Product.pm index decafdad7..1ab524a32 100644 --- a/lib/WebGUI/Macro/Product.pm +++ b/lib/WebGUI/Macro/Product.pm @@ -2,7 +2,6 @@ package WebGUI::Macro::Product; use strict; use WebGUI::Session; -use WebGUI::Macro; use WebGUI::Product; use WebGUI::Asset::Template; use WebGUI::SQL; @@ -11,7 +10,7 @@ use WebGUI::International; sub process { my (@param, $productId, $variantId, $product, $variant, $output, $templateId, @variantLoop, %var); - @param = WebGUI::Macro::getParams(@_); + @param = @_; return 'No SKU or productId passed' unless ($_[0]); diff --git a/lib/WebGUI/Macro/Quote.pm b/lib/WebGUI/Macro/Quote.pm index 481de8034..922672a71 100644 --- a/lib/WebGUI/Macro/Quote.pm +++ b/lib/WebGUI/Macro/Quote.pm @@ -11,13 +11,11 @@ package WebGUI::Macro::Quote; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::SQL; #------------------------------------------------------------------- sub process { - my ($value) = WebGUI::Macro::getParams(shift); - return quote($value); + return quote(shift); } diff --git a/lib/WebGUI/Macro/RandomAssetProxy.pm b/lib/WebGUI/Macro/RandomAssetProxy.pm index c6896af0e..ce6fe8cad 100644 --- a/lib/WebGUI/Macro/RandomAssetProxy.pm +++ b/lib/WebGUI/Macro/RandomAssetProxy.pm @@ -12,12 +12,11 @@ package WebGUI::Macro::RandomAssetProxy; use strict; use WebGUI::Asset; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my ($url) = WebGUI::Macro::getParams(shift); + my $url = shift; my $asset = WebGUI::Asset->newByUrl($url); if (defined $asset) { my $children = $asset->getLineage(["children"]); diff --git a/lib/WebGUI/Macro/RawHeadTags.pm b/lib/WebGUI/Macro/RawHeadTags.pm index d75cf7679..2e426b13b 100644 --- a/lib/WebGUI/Macro/RawHeadTags.pm +++ b/lib/WebGUI/Macro/RawHeadTags.pm @@ -11,14 +11,12 @@ package WebGUI::Macro::RawHeadTags; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Style; #------------------------------------------------------------------- sub process { - my ($html) = WebGUI::Macro::getParams(shift); - WebGUI::Style::setRawHeadTags($html); + WebGUI::Style::setRawHeadTags(shift); return ""; } diff --git a/lib/WebGUI/Macro/SQL.pm b/lib/WebGUI/Macro/SQL.pm index d9541d5d6..f56cdd261 100644 --- a/lib/WebGUI/Macro/SQL.pm +++ b/lib/WebGUI/Macro/SQL.pm @@ -11,14 +11,13 @@ package WebGUI::Macro::SQL; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::SQL; #------------------------------------------------------------------- sub process { my ($output, @data, $rownum, $temp); - my ($statement, $format) = WebGUI::Macro::getParams(shift); + my ($statement, $format) = @_; $format = '^0;' if ($format eq ""); if ($statement =~ /^\s*select/i || $statement =~ /^\s*show/i || $statement =~ /^\s*describe/i) { my $sth = WebGUI::SQL->unconditionalRead($statement,WebGUI::SQL->getSlave); diff --git a/lib/WebGUI/Macro/Spacer.pm b/lib/WebGUI/Macro/Spacer.pm index 4a252dd0b..f7587aec6 100644 --- a/lib/WebGUI/Macro/Spacer.pm +++ b/lib/WebGUI/Macro/Spacer.pm @@ -12,13 +12,12 @@ package WebGUI::Macro::Spacer; use strict; use WebGUI::Session; -use WebGUI::Macro; #------------------------------------------------------------------- sub process { my ($output, @param, $width, $height); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; $width = $param[0] if defined $param[0]; $height = $param[1] if defined $param[1]; $output = ''; diff --git a/lib/WebGUI/Macro/Splat_random.pm b/lib/WebGUI/Macro/Splat_random.pm index e96d8a18f..43d94c40e 100644 --- a/lib/WebGUI/Macro/Splat_random.pm +++ b/lib/WebGUI/Macro/Splat_random.pm @@ -11,13 +11,12 @@ package WebGUI::Macro::Splat_random; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Utility; #------------------------------------------------------------------- sub process { my ($temp, @param); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; if ($param[0] ne "") { $temp = round(rand()*$param[0]); } else { diff --git a/lib/WebGUI/Macro/StyleSheet.pm b/lib/WebGUI/Macro/StyleSheet.pm index 65b5b6508..e48709d1a 100644 --- a/lib/WebGUI/Macro/StyleSheet.pm +++ b/lib/WebGUI/Macro/StyleSheet.pm @@ -11,14 +11,12 @@ package WebGUI::Macro::StyleSheet; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Style; #------------------------------------------------------------------- sub process { - my ($file) = WebGUI::Macro::getParams(shift); - WebGUI::Style::setLink($file,{ + WebGUI::Style::setLink(shift,{ type=>'text/css', rel=>'stylesheet' }); diff --git a/lib/WebGUI/Macro/SubscriptionItem.pm b/lib/WebGUI/Macro/SubscriptionItem.pm index eb7248e52..105f08148 100644 --- a/lib/WebGUI/Macro/SubscriptionItem.pm +++ b/lib/WebGUI/Macro/SubscriptionItem.pm @@ -2,13 +2,12 @@ package WebGUI::Macro::SubscriptionItem; use strict; use WebGUI::Asset::Template; -use WebGUI::Macro; use WebGUI::SQL; use WebGUI::URL; sub process { my ($subscriptionId, $templateId, %var); - ($subscriptionId, $templateId) = WebGUI::Macro::getParams(@_); + ($subscriptionId, $templateId) = @_; %var = WebGUI::SQL->quickHash('select * from subscription where subscriptionId='.quote($subscriptionId)); $var{url} = WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId); return WebGUI::Asset::Template->new($templateId || "PBtmpl0000000000000046")->process(\%var); diff --git a/lib/WebGUI/Macro/SubscriptionItemPurchaseUrl.pm b/lib/WebGUI/Macro/SubscriptionItemPurchaseUrl.pm index d6b5a86f9..c00f96339 100644 --- a/lib/WebGUI/Macro/SubscriptionItemPurchaseUrl.pm +++ b/lib/WebGUI/Macro/SubscriptionItemPurchaseUrl.pm @@ -1,12 +1,10 @@ package WebGUI::Macro::SubscriptionItemPurchaseUrl; use strict; -use WebGUI::Macro; use WebGUI::URL; sub process { - my ($subscriptionId) = WebGUI::Macro::getParams(@_); - return WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId); + return WebGUI::URL::page('op=purchaseSubscription;sid='.shift); } 1; diff --git a/lib/WebGUI/Macro/Thumbnail.pm b/lib/WebGUI/Macro/Thumbnail.pm index cf284849b..f05955b80 100644 --- a/lib/WebGUI/Macro/Thumbnail.pm +++ b/lib/WebGUI/Macro/Thumbnail.pm @@ -12,12 +12,11 @@ package WebGUI::Macro::Thumbnail; use strict; use WebGUI::Asset::File::Image; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my ($url) = WebGUI::Macro::getParams(shift); + my $url = shift; if (my $image = WebGUI::Asset::File::Image->newByUrl($url)) { return $image->getThumbnailUrl; } else { diff --git a/lib/WebGUI/Macro/URLEncode.pm b/lib/WebGUI/Macro/URLEncode.pm index 698040950..5eb875b9e 100644 --- a/lib/WebGUI/Macro/URLEncode.pm +++ b/lib/WebGUI/Macro/URLEncode.pm @@ -11,14 +11,12 @@ package WebGUI::Macro::URLEncode; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::URL; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); - return WebGUI::URL::escape($param[0]); + return WebGUI::URL::escape(shift); } diff --git a/lib/WebGUI/Macro/User.pm b/lib/WebGUI/Macro/User.pm index 0c775cd83..54a9ab0ac 100644 --- a/lib/WebGUI/Macro/User.pm +++ b/lib/WebGUI/Macro/User.pm @@ -11,13 +11,11 @@ package WebGUI::Macro::User; #------------------------------------------------------------------- use strict; -use WebGUI::Macro; use WebGUI::Session; #------------------------------------------------------------------- sub process { - my @param = WebGUI::Macro::getParams($_[0]); - return $session{user}{$param[0]}; + return $session{user}{shift}; } diff --git a/lib/WebGUI/Macro/a_account.pm b/lib/WebGUI/Macro/a_account.pm index 9d974cde9..a23ca6659 100644 --- a/lib/WebGUI/Macro/a_account.pm +++ b/lib/WebGUI/Macro/a_account.pm @@ -12,7 +12,6 @@ package WebGUI::Macro::a_account; use strict; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; @@ -20,7 +19,7 @@ use WebGUI::URL; #------------------------------------------------------------------- sub process { my %var; - my @param = WebGUI::Macro::getParams(shift); + my @param = @_; return WebGUI::URL::page("op=auth;method=init") if ($param[0] eq "linkonly"); $var{'account.url'} = WebGUI::URL::page('op=auth;method=init'); $var{'account.text'} = $param[0] || WebGUI::International::get(46,'Macro_a_account'); diff --git a/lib/WebGUI/Macro/r_printable.pm b/lib/WebGUI/Macro/r_printable.pm index ed355e0fe..04c67f1fe 100644 --- a/lib/WebGUI/Macro/r_printable.pm +++ b/lib/WebGUI/Macro/r_printable.pm @@ -12,7 +12,6 @@ package WebGUI::Macro::r_printable; use strict; use WebGUI::International; -use WebGUI::Macro; use WebGUI::Session; use WebGUI::Asset::Template; use WebGUI::URL; @@ -21,7 +20,7 @@ use WebGUI::Utility; #------------------------------------------------------------------- sub process { my ($temp, @param, $styleId); - @param = WebGUI::Macro::getParams($_[0]); + @param = @_; my $append = 'op=makePrintable'; if ($session{env}{REQUEST_URI} =~ /op\=/) { $append = 'op2='.WebGUI::URL::escape($append); diff --git a/lib/WebGUI/Mail.pm b/lib/WebGUI/Mail.pm index 05cdbbb58..820f44ed4 100644 --- a/lib/WebGUI/Mail.pm +++ b/lib/WebGUI/Mail.pm @@ -99,11 +99,13 @@ sub send { $message .= "Content-Type: text/plain; charset=UTF-8\n"; } $message .= "\n"; - $message = WebGUI::Macro::process($message); + WebGUI::Macro::process(\$message); #body $message .= $_[2]."\n"; #footer - $message .= WebGUI::Macro::process("\n".$session{setting}{mailFooter}); + my $footer = "\n".$session{setting}{mailFooter}; + WebGUI::Macro::process(\$footer); + $message .= $footer; $message .= "\n\n\nThis message was intended for ".$_[0].", but was overridden in the config file.\n\n\n" if ($session{config}{emailOverride}); if ($session{setting}{smtpServer} =~ /\/sendmail/) { if (open(MAIL,"| $session{setting}{smtpServer} -t -oi")) { diff --git a/lib/WebGUI/MessageLog.pm b/lib/WebGUI/MessageLog.pm index ca9add75d..8ab6fdbf7 100644 --- a/lib/WebGUI/MessageLog.pm +++ b/lib/WebGUI/MessageLog.pm @@ -213,7 +213,8 @@ sub addInternationalizedEntry { $subject{$u->profileField("language")} = $subject{1} if ($subject{$u->profileField("language")} eq ""); $subject = $subject{$u->profileField("language")}; $message{$u->profileField("language")} = $message{1} if ($message{$u->profileField("language")} eq ""); - $message = WebGUI::Macro::process($message{$u->profileField("language")}); + $message = $message{$u->profileField("language")}; + WebGUI::Macro::process(\$message); WebGUI::SQL->write("insert into messageLog values (".quote($messageLogId).",".quote($u->userId).", ".quote($message).",".quote($url).",".time().",".quote($message).",".quote($status).")"); if ($url ne "") { diff --git a/lib/WebGUI/Operation/Help.pm b/lib/WebGUI/Operation/Help.pm index 631d9c671..76f47d77a 100644 --- a/lib/WebGUI/Operation/Help.pm +++ b/lib/WebGUI/Operation/Help.pm @@ -96,8 +96,9 @@ sub www_viewHelp { my $body = WebGUI::Asset::Template->new("PBtmplHelp000000000001")->process(\%vars); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpIndex'),WebGUI::International::get(95)); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpTOC'),WebGUI::International::get('help contents')); + WebGUI::Macro::process(\$body); return $ac->render( - WebGUI::Macro::process($body), + $body, WebGUI::International::get(93).': '.$i18n->get($help->{title}) ); } diff --git a/lib/WebGUI/Operation/Profile.pm b/lib/WebGUI/Operation/Profile.pm index 6ed2b88d4..6c2e13aa9 100644 --- a/lib/WebGUI/Operation/Profile.pm +++ b/lib/WebGUI/Operation/Profile.pm @@ -114,7 +114,10 @@ sub validateProfileData { $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber"); while (%field = $a->hash) { - $data{$field{fieldName}} = WebGUI::Macro::negate(WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault})); + my $fieldData = WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault}); + WebGUI::Macro::negate(\$fieldData); + $data{$field{fieldName}} = $fieldData; + if ($field{required} && $data{$field{fieldName}} eq "") { $error .= '
  • '.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'
  • '; }elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){ diff --git a/lib/WebGUI/SQL.pm b/lib/WebGUI/SQL.pm index 121dec72f..7db437f38 100644 --- a/lib/WebGUI/SQL.pm +++ b/lib/WebGUI/SQL.pm @@ -287,13 +287,12 @@ sub execute { =head2 finish ( ) -Ends a query after calling the "read" method. +Ends a query after calling the read() or unconditionalRead() methods. Don't use this unless you're not retrieving the full result set, or if you're using it with the unconditionalRead() method. =cut sub finish { - $_[0]->{_sth}->finish; - return ""; + return $_[0]->{_sth}->finish; } diff --git a/lib/WebGUI/Style.pm b/lib/WebGUI/Style.pm index d04025892..4f2c7cfb5 100644 --- a/lib/WebGUI/Style.pm +++ b/lib/WebGUI/Style.pm @@ -150,9 +150,9 @@ if (WebGUI::Grouping::isInGroup(2)) { } else { $output = "WebGUI was unable to instantiate your style template.".$var{'body.content'}; } - $output = WebGUI::Macro::process($output); + WebGUI::Macro::process(\$output); my $macroHeadTags = generateAdditionalHeadTags(); - $macroHeadTags = WebGUI::Macro::process($macroHeadTags); + WebGUI::Macro::process(\$macroHeadTags); $output =~ s/\<\!-- macro head tags --\>/$macroHeadTags/; return $output; } diff --git a/lib/WebGUI/Subscription.pm b/lib/WebGUI/Subscription.pm index 936fdf1ab..ee80909bf 100644 --- a/lib/WebGUI/Subscription.pm +++ b/lib/WebGUI/Subscription.pm @@ -3,6 +3,7 @@ package WebGUI::Subscription; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Grouping; +use WebGUI::Macro; use WebGUI::Utility; use WebGUI::Commerce::Payment; use WebGUI::DateTime; @@ -33,7 +34,9 @@ sub apply { WebGUI::User->new($userId)->karma($self->{_properties}{karma}, 'Subscription', 'Added for purchasing subscription '.$self->{_properties}{name}); # Process executeOnPurchase field - system(WebGUI::Macro::process($self->{_properties}{executeOnSubscription})) if ($self->{_properties}{executeOnSubscription} ne ""); + my $command = $self->{_properties}{executeOnSubscription}; + WebGUI::Macro::process(\$command); + system($command) if ($self->{_properties}{executeOnSubscription} ne ""); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index 2f88db010..51d0fae1b 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -305,7 +305,7 @@ sub profileField { $self = shift; $fieldName = shift; $value = shift; - $value = WebGUI::Macro::negate($value); + WebGUI::Macro::negate(\$value); if (defined $value) { $self->uncache; $self->{_profile}{$fieldName} = $value; diff --git a/sbin/testEnvironment.pl b/sbin/testEnvironment.pl index 5663bcba8..c8d8483f7 100644 --- a/sbin/testEnvironment.pl +++ b/sbin/testEnvironment.pl @@ -45,6 +45,7 @@ if ($] >= 5.006) { checkModule("LWP",5.80); checkModule("HTTP::Request",1.40); checkModule("HTTP::Headers",1.61); +checkModule("Test::More",0.61); checkModule("Digest::MD5",2.20); checkModule("DBI",1.40); checkModule("DBD::mysql",2.1021); diff --git a/sbin/uploadsAccessHandler.perl b/sbin/uploadsAccessHandler.perl deleted file mode 100644 index 3846deeb3..000000000 --- a/sbin/uploadsAccessHandler.perl +++ /dev/null @@ -1,64 +0,0 @@ -package WebGUI::UploadsAccessHandler; - -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2005 Plain Black Corporation. -#------------------------------------------------------------------- -# 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 -#------------------------------------------------------------------- - -our $webguiRoot; - -BEGIN { - my $s = Apache2::ServerUtil->server; - $webguiRoot = $s->dir_config('WebguiRoot'); - unshift (@INC, $webguiRoot."/lib"); -} - -print "Starting WebGUI Uploads Access Handler\n"; - -use strict; -use CGI::Util qw/escape/; -use WebGUI::Grouping; -use WebGUI::Session; -use WebGUI::URL; - -sub handler { - my $r; - my $ok; - my $notfound; - $r = Apache2::RequestUtil->request; - $ok = Apache2::Const::OK(); - $notfound = Apache2::Const::NOT_FOUND(); - if (-e $r->filename) { - my $path = $r->filename; - $path =~ s/^(\/.*\/).*$/$1/; - if (-e $path.".wgaccess") { - my $fileContents; - open(FILE,"<".$path.".wgaccess"); - while () { - $fileContents .= $_; - } - close(FILE); - my @privs = split("\n",$fileContents); - unless ($privs[1] eq "7" || $privs[1] eq "1") { - WebGUI::Session::open($webguiRoot, $r->dir_config('WebguiConfig')); - my $cookie = $r->headers_in->{Cookie} || ''; - $cookie =~ s/wgSession\=(.*)/$1/; - $cookie = WebGUI::URL::unescape($cookie); - WebGUI::Session::refreshSessionVars($cookie); - return $ok if ($session{user}{userId} eq $privs[0] || WebGUI::Grouping::isInGroup($privs[1]) || WebGUI::Grouping::isInGroup($privs[2])); - WebGUI::Session::close(); - return 401; - } - } - return $ok; - } else { - return $notfound; - } -} - -1;