moved uploadsAccessHandler into the main webgui handler mechanism

converted macros to use references
fixed some other various bugs
This commit is contained in:
JT Smith 2005-11-07 01:40:07 +00:00
parent 2818ade8b0
commit ea868a8c0e
73 changed files with 256 additions and 275 deletions

View file

@ -7,6 +7,8 @@
- Switched from Apache::Registry/CGI to a pure mod_perl2 interface, which - 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 increased performance by over 70% to the entire system, and in some cases
as much as 100%. See gotcha.txt for details. 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 6.7.7

View file

@ -15,8 +15,9 @@ save you many hours of grief.
DateTime::Cron::Simple DateTime::Cron::Simple
POE POE
POE::Component::IKC::Server 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 * Due to the performance increase achieved by switching to DateTime we
no longer need date caching so the enableDateCache directive can no longer need date caching so the enableDateCache directive can
@ -49,6 +50,8 @@ save you many hours of grief.
PerlOptions +ParseHeaders PerlOptions +ParseHeaders
</Files> </Files>
You also no longer need the ExecCGI directive.
Edit each of your virtual hosts and add the following directives, Edit each of your virtual hosts and add the following directives,
changing them to suit your needs: 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 which will increase performance, and add to our functionality
for the future. 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 6.7.0
-------------------------------------------------------------------- --------------------------------------------------------------------

View file

@ -188,6 +188,12 @@ definitions like so:
alter table MyTable change assetId assetId binary not null; 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 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 system does not accomodate you, then please check out the new API in
WebGUI::Navigation. 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 As of 6.3 check out lib/WebGUI/Asset/Wobject/Navigation.pm if you want to
write custom navigation macros. 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 3. Authentication Migration
----------------------------- -----------------------------

View file

@ -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 lib "../../lib";
use strict; use strict;
use Getopt::Long; use Getopt::Long;

View file

@ -23,6 +23,12 @@ uploadsURL = /uploads
uploadsPath = /data/WebGUI/www/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 # The scripturl tells WebGUI how to reference the gateway script
# when generating URLs. By default it will use the gateway # when generating URLs. By default it will use the gateway
# script's filename like /index.pl/ # script's filename like /index.pl/

View file

@ -27,9 +27,9 @@ use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
use WebGUI::Style; use WebGUI::Style;
use WebGUI::URL; use WebGUI::URL;
use WebGUI::Utility;
use WebGUI::PassiveProfiling; use WebGUI::PassiveProfiling;
use Apache2::Request; use Apache2::Request;
use Apache2::Cookie;
use Apache2::RequestRec (); use Apache2::RequestRec ();
use Apache2::RequestIO (); use Apache2::RequestIO ();
use Apache2::Const -compile => qw(OK DECLINED); use Apache2::Const -compile => qw(OK DECLINED);
@ -41,11 +41,17 @@ sub handler {
my $r = shift; my $r = shift;
my $s = Apache2::ServerUtil->server; my $s = Apache2::ServerUtil->server;
my $config = WebGUI::Config::getConfig($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig')); 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}; 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->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; return Apache2::Const::DECLINED;
} }
@ -55,16 +61,10 @@ sub handler {
sub contentHandler { sub contentHandler {
my $r = shift; my $r = shift;
my $s = Apache2::ServerUtil->server; my $s = Apache2::ServerUtil->server;
WebGUI::HTTP::getCookies();
$session{cookie} = APR::Request::Apache2->handle($r)->jar();
WebGUI::Session::open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r); WebGUI::Session::open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r);
###----------------------------
### Apache2::Request object ### Apache2::Request object
$session{req} = Apache2::Request->new($r, POST_MAX => 1024 * $session{setting}{maxAttachmentSize}); $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 ### Add Apache Request stuff to Session
$session{wguri} = $r->uri; $session{wguri} = $r->uri;
### check to see if client is proxied and adjust remote_addr as necessary ### 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}; $session{env}{REMOTE_ADDR} = $ENV{HTTP_X_FORWARDED_FOR};
} }
### form variables ### form variables
#
foreach ($session{req}->param) { foreach ($session{req}->param) {
$session{form}{$_} = $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 (<FILE>) {
$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 { sub upgrading {
my $output = WebGUI::HTTP::getHeader(); my $output = WebGUI::HTTP::getHeader();

View file

@ -120,7 +120,9 @@ sub www_view {
if ($session{var}{adminOn}) { if ($session{var}{adminOn}) {
return $self->getContainer->www_view; 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"; return "Redirect is self-referential";
} }

View file

@ -17,7 +17,6 @@ package WebGUI::Asset::RichEdit;
use strict; use strict;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::Form; use WebGUI::Form;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Utility; use WebGUI::Utility;
use WebGUI::International; use WebGUI::International;

View file

@ -13,6 +13,7 @@ package WebGUI::Asset::Shortcut;
use strict; use strict;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Privilege; use WebGUI::Privilege;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
@ -240,7 +241,7 @@ sub getShortcutByCriteria {
my $assetId = $self->getId; my $assetId = $self->getId;
# Parse macro's in criteria # 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, # Once a asset is found, we will stick to that asset,
# to prevent the proxying of multiple- depth assets like Surveys and USS. # to prevent the proxying of multiple- depth assets like Surveys and USS.

View file

@ -148,7 +148,8 @@ sub getToolbar {
sub view { sub view {
my $self = shift; my $self = shift;
my $calledAsWebMethod = shift; my $calledAsWebMethod = shift;
my $output = WebGUI::Macro::process($self->get("snippet")); my $output = $self->get("snippet");
WebGUI::Macro::process(\$output);
$output = '<p>'.$self->getToolbar.'</p>'.$output if ($session{var}{adminOn} && !$calledAsWebMethod); $output = '<p>'.$self->getToolbar.'</p>'.$output if ($session{var}{adminOn} && !$calledAsWebMethod);
return $output unless ($self->getValue("processAsTemplate")); return $output unless ($self->getValue("processAsTemplate"));
return WebGUI::Asset::Template->processRaw($output); return WebGUI::Asset::Template->processRaw($output);

View file

@ -395,23 +395,6 @@ sub moveCollateralUp {
WebGUI::SQL->commit; 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 { sub processPropertiesFromFormPost {
my $self = shift; my $self = shift;

View file

@ -461,7 +461,9 @@ sub getRecordTemplateVars {
$data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date"); $data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date");
} }
if (not exists $data{value}) { 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 $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData")));
my $value = $data{value}; my $value = $data{value};
@ -503,7 +505,9 @@ sub getRecordTemplateVars {
$data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date"); $data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date");
} }
if (not exists $data{value}) { 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 $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData")));
my $value = $data{value}; my $value = $data{value};
@ -612,7 +616,8 @@ sub purge {
sub sendEmail { sub sendEmail {
my $self = shift; my $self = shift;
my $var = 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); my ($to, $subject, $from, $bcc, $cc);
foreach my $row (@{$var->{field_loop}}) { foreach my $row (@{$var->{field_loop}}) {
if ($row->{"field.name"} eq "to") { if ($row->{"field.name"} eq "to") {
@ -1079,7 +1084,7 @@ sub www_process {
my $value = $row{defaultValue}; my $value = $row{defaultValue};
if ($row{status} eq "required" || $row{status} eq "editable") { if ($row{status} eq "required" || $row{status} eq "editable") {
$value = WebGUI::FormProcessor::process($row{name},$row{type},$row{defaultValue}); $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)) { if ($row{status} eq "required" && ($value =~ /^\s$/ || $value eq "" || not defined $value)) {
push (@errors,{ push (@errors,{
@ -1089,7 +1094,8 @@ sub www_process {
delete $var->{entryId}; delete $var->{entryId};
} }
if ($row{status} eq "hidden") { if ($row{status} eq "hidden") {
$value = WebGUI::Macro::process($row{defaultValue}); $value = $row{defaultValue};
WebGUI::Macro::process(\$value);
} }
unless ($hadErrors) { unless ($hadErrors) {
my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=".quote($entryId)." my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=".quote($entryId)."

View file

@ -15,7 +15,6 @@ use Tie::CPHash;
use WebGUI::DateTime; use WebGUI::DateTime;
use WebGUI::ErrorHandler; use WebGUI::ErrorHandler;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Privilege; use WebGUI::Privilege;
use WebGUI::Id; use WebGUI::Id;
use WebGUI::Session; use WebGUI::Session;

View file

@ -235,7 +235,9 @@ sub view {
$var{query} .= " ".join(" ",map("-".$_,split(/\s+/,$var{without}))) if ($var{without}); $var{query} .= " ".join(" ",map("-".$_,split(/\s+/,$var{without}))) if ($var{without});
# Remove macro's from query # 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 # Set some standard vars
$var{submit} = WebGUI::Form::submit({value=>WebGUI::International::get(16, "Asset_IndexedSearch")}); $var{submit} = WebGUI::Form::submit({value=>WebGUI::International::get(16, "Asset_IndexedSearch")});

View file

@ -293,7 +293,7 @@ sub _parsePlaceholderParams {
} elsif ($type =~ /^query(\d)/) { } elsif ($type =~ /^query(\d)/) {
$param = $self->{_query}{$1}{rowData}{$field}; $param = $self->{_query}{$1}{rowData}{$field};
} }
$param = WebGUI::Macro::process($param); WebGUI::Macro::process(\$param);
push(@placeholderParams, $param); push(@placeholderParams, $param);
} }
return \@placeholderParams; return \@placeholderParams;
@ -316,7 +316,8 @@ sub _processQuery {
# Preprocess macros # Preprocess macros
if ($self->{_query}{$nr}{preprocessMacros}) { if ($self->{_query}{$nr}{preprocessMacros}) {
$query = WebGUI::Macro::process($self->{_query}{$nr}{dbQuery}); my $query = $self->{_query}{$nr}{dbQuery};
WebGUI::Macro::process(\$query);
} else { } else {
$query = $self->{_query}{$nr}{dbQuery}; $query = $self->{_query}{$nr}{dbQuery};
} }

View file

@ -298,8 +298,10 @@ sub view {
# snag our SOAP call and preprocess if needed # snag our SOAP call and preprocess if needed
if ($self->get('preprocessMacros')) { if ($self->get('preprocessMacros')) {
$call = WebGUI::Macro::process($self->get("callMethod")); $call = $self->get("callMethod");
$param_str = WebGUI::Macro::process($self->get("params")); WebGUI::Macro::process(\$call);
$param_str = $self->get("params");
WebGUI::Macro::process(\$param_str);
} else { } else {
$call = $self->get('callMethod'); $call = $self->get('callMethod');
$param_str = $self->get('params'); $param_str = $self->get('params');

View file

@ -261,7 +261,9 @@ sub createAccountSave {
WebGUI::Session::convertVisitorToUser($session{var}{sessionId},$userId); WebGUI::Session::convertVisitorToUser($session{var}{sessionId},$userId);
_logLogin($userId,"success"); _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}); WebGUI::MessageLog::addInternationalizedEntry('',$session{setting}{onNewUserAlertGroup},'',536) if ($session{setting}{alertOnNewUser});
return ""; return "";
} }
@ -739,7 +741,8 @@ Validates the a username.
sub validUsername { sub validUsername {
my $self = shift; my $self = shift;
my $username = WebGUI::Macro::negate($_[0]); my $username = shift;
WebGUI::Macro::negate(\$username);
my $error = ""; my $error = "";
if($self->_isDuplicateUsername($username)){ if($self->_isDuplicateUsername($username)){

View file

@ -39,8 +39,10 @@ our @ISA = qw(WebGUI::Auth);
sub _isValidPassword { sub _isValidPassword {
my $self = shift; my $self = shift;
my $password = WebGUI::Macro::negate(shift); my $password = shift;
my $confirm = WebGUI::Macro::negate(shift); WebGUI::Macro::negate(\$password);
my $confirm = shift;
WebGUI::Macro::negate(\$confirm);
my $error = ""; my $error = "";
if ($password ne $confirm) { if ($password ne $confirm) {

View file

@ -172,8 +172,7 @@ Adds a FATAL type message to the log, outputs an error message to the user, and
sub fatal { sub fatal {
my $message = shift; my $message = shift;
my $logger = getLogger(); 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->fatal($message);
$logger->debug("Stack trace for FATAL ".$message."\n".getStackTrace()); $logger->debug("Stack trace for FATAL ".$message."\n".getStackTrace());
unless ($WebGUI::Session::session{setting}{showDebug}) { unless ($WebGUI::Session::session{setting}{showDebug}) {

View file

@ -20,6 +20,7 @@ use WebGUI::Cache;
use WebGUI::DateTime; use WebGUI::DateTime;
use WebGUI::ErrorHandler; use WebGUI::ErrorHandler;
use WebGUI::LDAPLink; use WebGUI::LDAPLink;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
use WebGUI::Utility; use WebGUI::Utility;
@ -427,7 +428,9 @@ sub isInGroup {
my $dbh = $dbLink->dbh; my $dbh = $dbLink->dbh;
if (defined $dbh) { if (defined $dbh) {
if ($group{dbQuery} =~ /select 1/i) { 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); my $sth = WebGUI::SQL->unconditionalRead($group{dbQuery},$dbh);
unless ($sth->errorCode < 1) { unless ($sth->errorCode < 1) {
WebGUI::ErrorHandler::warn("There was a problem with the database query for group ID $gid."); WebGUI::ErrorHandler::warn("There was a problem with the database query for group ID $gid.");

View file

@ -102,14 +102,13 @@ Choose from "all", "none", "macros", "javascript", or "most". Defaults to "most"
=cut =cut
sub filter { sub filter {
my ($filter, $html, $type); my $html = shift;
$type = $_[1]; my $type = shift;
if ($type eq "all") { if ($type eq "all") {
$filter = HTML::TagFilter->new(allow=>{'none'},strip_comments=>1); my $filter = HTML::TagFilter->new(allow=>{'none'},strip_comments=>1);
$html = $filter->filter($_[0]); $html = $filter->filter($html);
return WebGUI::Macro::negate($html); WebGUI::Macro::negate(\$html);
} elsif ($type eq "javascript") { } elsif ($type eq "javascript") {
$html = $_[0];
$html =~ s/\<script.*?\/script\>//ixsg; $html =~ s/\<script.*?\/script\>//ixsg;
$html =~ s/(href="??)javascript\:.*?\)/$1removed/ixsg; $html =~ s/(href="??)javascript\:.*?\)/$1removed/ixsg;
$html =~ s/onClick/removed/ixsg; $html =~ s/onClick/removed/ixsg;
@ -125,16 +124,17 @@ sub filter {
$html =~ s/onKeyDown/removed/ixsg; $html =~ s/onKeyDown/removed/ixsg;
$html =~ s/onSubmit/removed/ixsg; $html =~ s/onSubmit/removed/ixsg;
$html =~ s/onReset/removed/ixsg; $html =~ s/onReset/removed/ixsg;
$html = WebGUI::Macro::negate($html); WebGUI::Macro::negate(\$html);
} elsif ($type eq "macros") { } elsif ($type eq "macros") {
return WebGUI::Macro::negate($_[0]); WebGUI::Macro::negate(\$html);
} elsif ($type eq "none") { } elsif ($type eq "none") {
return $_[0]; # do nothing
} else { } else {
$filter = HTML::TagFilter->new; # defaultly strips almost everything my $filter = HTML::TagFilter->new; # defaultly strips almost everything
$html = $filter->filter($_[0]); $html = $filter->filter($html);
return WebGUI::Macro::filter($html); WebGUI::Macro::filter(\$html);
} }
return $html;
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------

View file

@ -16,6 +16,7 @@ package WebGUI::HTTP;
use strict; use strict;
use Apache2::Cookie;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Style; use WebGUI::Style;
@ -31,6 +32,7 @@ This package allows the manipulation of HTTP protocol information.
use WebGUI::HTTP; use WebGUI::HTTP;
$cookies = WebGUI::HTTP::getCookies();
$header = WebGUI::HTTP::getHeader(); $header = WebGUI::HTTP::getHeader();
$mimetype = WebGUI::HTTP::getMimeType(); $mimetype = WebGUI::HTTP::getMimeType();
$code = WebGUI::HTTP::getStatus(); $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 ( ) =head2 getHeader ( )

View file

@ -33,10 +33,12 @@ B<NOTE:> This entire system is likely to be replaced in the near future. It has
=head1 SYNOPSIS =head1 SYNOPSIS
use WebGUI::Macro; use WebGUI::Macro;
$html = WebGUI::Macro::filter($html);
@array = WebGUI::Macro::getParams($parameterString); @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 =head1 METHODS
@ -73,43 +75,18 @@ Removes all the macros from the HTML segment.
=head3 html =head3 html
The segment to be filtered. The segment to be filtered as a scalar reference.
=cut =cut
sub filter { sub filter {
my $content = shift; my $content = shift;
while ($content =~ /($nestedMacro)/gs) { while ($$content =~ /($nestedMacro)/gs) {
$content =~ s/\Q$1//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 ) =head2 negate ( html )
@ -118,14 +95,13 @@ Nullifies all macros in this content segment.
=head3 html =head3 html
A string of HTML to be processed. A scalar refernece of HTML to be processed.
=cut =cut
sub negate { sub negate {
my $html = $_[0]; my $html = shift;
$html =~ s/\^/\&\#94\;/g; $$html =~ s/\^/\&\#94\;/g;
return $html;
} }
@ -137,27 +113,34 @@ Runs all the WebGUI macros to and replaces them in the HTML with their output.
=head3 html =head3 html
A string of HTML to be processed. A scalar reference of HTML to be processed.
=cut =cut
sub process { sub process {
my $content = shift; my $content = shift;
while ($content =~ /$nestedMacro/gs) { while ($$content =~ /$nestedMacro/gs) {
my ($macro, $searchString, $params) = ($1, $2, $3); my ($macro, $searchString, $params) = ($1, $2, $3);
next if ($searchString =~ /^\d+$/); # don't process ^0; ^1; ^2; etc. next if ($searchString =~ /^\d+$/); # don't process ^0; ^1; ^2; etc.
next if ($searchString =~ /^\-$/); # don't process ^-; next if ($searchString =~ /^\-$/); # don't process ^-;
if ($params ne "") { if ($params ne "") {
$params =~ s/(^\(|\)$)//g; # remove parenthesis $params =~ s/(^\(|\)$)//g; # remove parenthesis
$params = &process($params); # recursive process params &process(\$params); # recursive process params
} }
if ($WebGUI::Session::session{config}{macros}{$searchString} ne "") { if ($WebGUI::Session::session{config}{macros}{$searchString} ne "") {
my $cmd = "WebGUI::Macro::".$WebGUI::Session::session{config}{macros}{$searchString}; my $cmd = "WebGUI::Macro::".$WebGUI::Session::session{config}{macros}{$searchString};
my $load = "use ".$cmd; my $load = "use ".$cmd;
eval($load); eval($load);
WebGUI::ErrorHandler::error("Macro failed to compile: $cmd.".$@) if($@); 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"; $cmd = $cmd."::process";
my $result = eval{&$cmd($params)}; my $result = eval{&$cmd(@param)};
if ($@) { if ($@) {
WebGUI::ErrorHandler::error("Processing failed on macro: $macro: ".$@); WebGUI::ErrorHandler::error("Processing failed on macro: $macro: ".$@);
} else { } else {
@ -165,14 +148,11 @@ sub process {
$result = "Endless macro loop detected. Stopping recursion."; $result = "Endless macro loop detected. Stopping recursion.";
WebGUI::ErrorHandler::warn($macro." : ".$result) WebGUI::ErrorHandler::warn($macro." : ".$result)
} }
$content =~ s/\Q$macro/$result/ges; $$content =~ s/\Q$macro/$result/ges;
} }
} }
} }
return $content;
} }
1; 1;

View file

@ -11,14 +11,13 @@ package WebGUI::Macro::AOIHits;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my (@param, $temp); my (@param, $temp);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
my $key = $param[0]; my $key = $param[0];
my $value = $param[1]; my $value = $param[1];
my $sql = "select count from passiveProfileAOI a, metaData_properties f my $sql = "select count from passiveProfileAOI a, metaData_properties f

View file

@ -11,14 +11,13 @@ package WebGUI::Macro::AOIRank;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my (@param, $temp); my (@param, $temp);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
my $key = $param[0]; my $key = $param[0];
my $rank = $param[1] || 1; # 1 is highest rank my $rank = $param[1] || 1; # 1 is highest rank
$rank--; # Rank is zero based $rank--; # Rank is zero based

View file

@ -18,7 +18,6 @@ use WebGUI::Asset;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
use WebGUI::URL; use WebGUI::URL;
@ -27,7 +26,7 @@ use WebGUI::Utility;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
return "" unless ($session{var}{adminOn}); return "" unless ($session{var}{adminOn});
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
my $templateId = $param[0] || "PBtmpl0000000000000090"; my $templateId = $param[0] || "PBtmpl0000000000000090";
my %var; my %var;
my (%cphash, %hash2, %hash, $r, @item, $query); my (%cphash, %hash2, %hash, $r, @item, $query);

View file

@ -11,12 +11,11 @@ package WebGUI::Macro::AdminText;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams(shift); my @param = @_;
return "" unless ($session{var}{adminOn}); return "" unless ($session{var}{adminOn});
return $param[0]; return $param[0];
} }

View file

@ -13,7 +13,6 @@ package WebGUI::Macro::AdminToggle;
use strict; use strict;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
@ -22,7 +21,7 @@ use WebGUI::URL;
sub process { sub process {
if (WebGUI::Grouping::isInGroup(12)) { if (WebGUI::Grouping::isInGroup(12)) {
my %var; my %var;
my ($turnOn,$turnOff,$templateName) = WebGUI::Macro::getParams($_[0]); my ($turnOn,$turnOff,$templateName) = @_;
$turnOn ||= WebGUI::International::get(516,'Macro_AdminToggle'); $turnOn ||= WebGUI::International::get(516,'Macro_AdminToggle');
$turnOff ||= WebGUI::International::get(517,'Macro_AdminToggle'); $turnOff ||= WebGUI::International::get(517,'Macro_AdminToggle');
if (WebGUI::Session::isAdminOn()) { if (WebGUI::Session::isAdminOn()) {

View file

@ -14,12 +14,11 @@ use strict;
use Time::HiRes; use Time::HiRes;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::ErrorHandler; use WebGUI::ErrorHandler;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($url) = WebGUI::Macro::getParams(shift); my $url = shift;
my $t = [Time::HiRes::gettimeofday()] if (WebGUI::ErrorHandler::canShowPerformanceIndicators()); my $t = [Time::HiRes::gettimeofday()] if (WebGUI::ErrorHandler::canShowPerformanceIndicators());
my $asset = WebGUI::Asset->newByUrl($url); my $asset = WebGUI::Asset->newByUrl($url);
#Sorry, you cannot proxy the notfound page. #Sorry, you cannot proxy the notfound page.

View file

@ -11,12 +11,11 @@ package WebGUI::Macro::CanEditText;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
if (exists $session{asset} && $session{asset}->canEdit) { if (exists $session{asset} && $session{asset}->canEdit) {
return $param[0]; return $param[0];
} else { } else {

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::D_date;
use strict; use strict;
use WebGUI::DateTime; use WebGUI::DateTime;
use WebGUI::Macro;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my (@param, $temp, $time); my (@param, $temp, $time);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
$time = $param[1] || time(); $time = $param[1] || time();
$temp = epochToHuman($time,$param[0]); $temp = epochToHuman($time,$param[0]);
return $temp; return $temp;

View file

@ -13,7 +13,6 @@ package WebGUI::Macro::EditableToggle;
use strict; use strict;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
@ -22,7 +21,7 @@ use WebGUI::URL;
sub process { sub process {
if (exists $session{asset} && $session{asset}->canEdit && WebGUI::Grouping::isInGroup(12)) { if (exists $session{asset} && $session{asset}->canEdit && WebGUI::Grouping::isInGroup(12)) {
my %var; my %var;
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
my $turnOn = $param[0] || WebGUI::International::get(516,'Macro_EditableToggle'); my $turnOn = $param[0] || WebGUI::International::get(516,'Macro_EditableToggle');
my $turnOff = $param[1] || WebGUI::International::get(517,'Macro_EditableToggle'); my $turnOff = $param[1] || WebGUI::International::get(517,'Macro_EditableToggle');
if ($session{var}{adminOn}) { if ($session{var}{adminOn}) {

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::Env;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); return $session{env}{shift};
return $session{env}{$param[0]};
} }
1; 1;

View file

@ -11,11 +11,10 @@ package WebGUI::Macro::Execute;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /\.conf/) { if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /\.conf/) {
return "SECURITY VIOLATION"; return "SECURITY VIOLATION";
} else { } else {

View file

@ -12,13 +12,12 @@ package WebGUI::Macro::FileUrl;
use strict; use strict;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Storage; use WebGUI::Storage;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($url) = WebGUI::Macro::getParams(shift); my $url = shift;
my $asset = WebGUI::Asset->newByUrl($url); my $asset = WebGUI::Asset->newByUrl($url);
if (defined $asset) { if (defined $asset) {
my $storage = WebGUI::Storage->get($asset->get("storageId")); my $storage = WebGUI::Storage->get($asset->get("storageId"));

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::FormParam;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); return $session{form}{shift};
return $session{form}{$param[0]};
} }

View file

@ -13,14 +13,13 @@ package WebGUI::Macro::GroupAdd;
use strict; use strict;
use WebGUI::Group; use WebGUI::Group;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
return "" if ($param[0] eq ""); return "" if ($param[0] eq "");
return "" if ($param[1] eq ""); return "" if ($param[1] eq "");
return "" if ($session{user}{userId} eq '1'); return "" if ($session{user}{userId} eq '1');

View file

@ -13,14 +13,13 @@ package WebGUI::Macro::GroupDelete;
use strict; use strict;
use WebGUI::Group; use WebGUI::Group;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
return "" if ($param[0] eq ""); return "" if ($param[0] eq "");
return "" if ($param[1] eq ""); return "" if ($param[1] eq "");
return "" if ($session{user}{userId} eq '1'); return "" if ($session{user}{userId} eq '1');

View file

@ -12,13 +12,12 @@ package WebGUI::Macro::GroupText;
use strict; use strict;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::SQL; use WebGUI::SQL;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { 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); my ($groupId) = WebGUI::SQL->quickArray("select groupId from groups where groupName=".quote($param[0]),WebGUI::SQL->getSlave);
$groupId = 3 if ($groupId eq ""); $groupId = 3 if ($groupId eq "");
if (WebGUI::Grouping::isInGroup($groupId)) { if (WebGUI::Grouping::isInGroup($groupId)) {

View file

@ -14,12 +14,11 @@ use strict;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($label, $templateUrl) = WebGUI::Macro::getParams(shift); my ($label, $templateUrl) = @_;
my $home = WebGUI::Asset->getDefault; my $home = WebGUI::Asset->getDefault;
if ($label ne "linkonly") { if ($label ne "linkonly") {
my %var; my %var;

View file

@ -13,10 +13,9 @@ package WebGUI::Macro::If;
use strict; use strict;
use Safe; use Safe;
use WebGUI::Macro;
sub process { sub process {
my ($expression, $true, $false) = WebGUI::Macro::getParams(shift); my ($expression, $true, $false) = @_;
my $output = $false; my $output = $false;
# Workaround to "Safely" eval $expression # Workaround to "Safely" eval $expression

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::Include;
use strict; use strict;
use FileHandle; use FileHandle;
use WebGUI::Macro;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my (@param, $temp, $file); my (@param, $temp, $file);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /WebGUI.conf/) { if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /WebGUI.conf/) {
$temp = "SECURITY VIOLATION"; $temp = "SECURITY VIOLATION";
} else { } else {

View file

@ -12,13 +12,11 @@ package WebGUI::Macro::International;
use strict; use strict;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); return WebGUI::International::get(shift,shift);
return WebGUI::International::get($param[0],$param[1]);
} }

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::JavaScript;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Style; use WebGUI::Style;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($script) = WebGUI::Macro::getParams(shift); WebGUI::Style::setScript(shift,{type=>'text/javascript'});
WebGUI::Style::setScript($script,{type=>'text/javascript'});
return ""; return "";
} }

View file

@ -13,7 +13,6 @@ package WebGUI::Macro::L_loginBox;
use strict; use strict;
use WebGUI::Form; use WebGUI::Form;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
@ -25,7 +24,7 @@ sub _createURL {
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
my $templateId = $param[2] || "PBtmpl0000000000000044"; my $templateId = $param[2] || "PBtmpl0000000000000044";
my %var; my %var;
$var{'user.isVisitor'} = ($session{user}{userId} eq "1"); $var{'user.isVisitor'} = ($session{user}{userId} eq "1");

View file

@ -12,7 +12,6 @@ package WebGUI::Macro::LastModified;
use strict; use strict;
use WebGUI::DateTime; use WebGUI::DateTime;
use WebGUI::Macro;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::International; use WebGUI::International;
@ -22,7 +21,7 @@ use WebGUI::SQL;
sub process { sub process {
return '' unless $session{asset}; return '' unless $session{asset};
my ($label, $format, $time); my ($label, $format, $time);
($label, $format) = WebGUI::Macro::getParams(shift); ($label, $format) = @_;
$format = '%z' if ($format eq ""); $format = '%z' if ($format eq "");
($time) = WebGUI::SQL->quickArray("SELECT max(revisionDate) FROM assetData where assetId=".quote($session{asset}->getId),WebGUI::SQL->getSlave); ($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; return WebGUI::International::get(43,'Asset_Survey') if $time eq 0;

View file

@ -12,14 +12,13 @@ package WebGUI::Macro::LoginToggle;
use strict; use strict;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); my @param = @_;
my $login = $param[0] || WebGUI::International::get(716,'Macro_LoginToggle'); my $login = $param[0] || WebGUI::International::get(716,'Macro_LoginToggle');
my $logout = $param[1] || WebGUI::International::get(717,'Macro_LoginToggle'); my $logout = $param[1] || WebGUI::International::get(717,'Macro_LoginToggle');
my %var; my %var;

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::Page;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]);
if (exists $session{asset}) { if (exists $session{asset}) {
return $session{asset}->get($param[0]); return $session{asset}->get(shift);
} }
return ""; return "";
} }

View file

@ -2,7 +2,6 @@ package WebGUI::Macro::Product;
use strict; use strict;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Macro;
use WebGUI::Product; use WebGUI::Product;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::SQL; use WebGUI::SQL;
@ -11,7 +10,7 @@ use WebGUI::International;
sub process { sub process {
my (@param, $productId, $variantId, $product, $variant, $output, $templateId, @variantLoop, %var); my (@param, $productId, $variantId, $product, $variant, $output, $templateId, @variantLoop, %var);
@param = WebGUI::Macro::getParams(@_); @param = @_;
return 'No SKU or productId passed' unless ($_[0]); return 'No SKU or productId passed' unless ($_[0]);

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::Quote;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::SQL; use WebGUI::SQL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($value) = WebGUI::Macro::getParams(shift); return quote(shift);
return quote($value);
} }

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::RandomAssetProxy;
use strict; use strict;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($url) = WebGUI::Macro::getParams(shift); my $url = shift;
my $asset = WebGUI::Asset->newByUrl($url); my $asset = WebGUI::Asset->newByUrl($url);
if (defined $asset) { if (defined $asset) {
my $children = $asset->getLineage(["children"]); my $children = $asset->getLineage(["children"]);

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::RawHeadTags;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Style; use WebGUI::Style;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($html) = WebGUI::Macro::getParams(shift); WebGUI::Style::setRawHeadTags(shift);
WebGUI::Style::setRawHeadTags($html);
return ""; return "";
} }

View file

@ -11,14 +11,13 @@ package WebGUI::Macro::SQL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($output, @data, $rownum, $temp); my ($output, @data, $rownum, $temp);
my ($statement, $format) = WebGUI::Macro::getParams(shift); my ($statement, $format) = @_;
$format = '^0;' if ($format eq ""); $format = '^0;' if ($format eq "");
if ($statement =~ /^\s*select/i || $statement =~ /^\s*show/i || $statement =~ /^\s*describe/i) { if ($statement =~ /^\s*select/i || $statement =~ /^\s*show/i || $statement =~ /^\s*describe/i) {
my $sth = WebGUI::SQL->unconditionalRead($statement,WebGUI::SQL->getSlave); my $sth = WebGUI::SQL->unconditionalRead($statement,WebGUI::SQL->getSlave);

View file

@ -12,13 +12,12 @@ package WebGUI::Macro::Spacer;
use strict; use strict;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Macro;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($output, @param, $width, $height); my ($output, @param, $width, $height);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
$width = $param[0] if defined $param[0]; $width = $param[0] if defined $param[0];
$height = $param[1] if defined $param[1]; $height = $param[1] if defined $param[1];
$output = '<img src="'.$session{config}{extrasURL}.'/spacer.gif"'.(defined $width?' width="'.$width.'"':'').(defined $height?' height="'.$height.'"':'').' border="0" alt="" />'; $output = '<img src="'.$session{config}{extrasURL}.'/spacer.gif"'.(defined $width?' width="'.$width.'"':'').(defined $height?' height="'.$height.'"':'').' border="0" alt="" />';

View file

@ -11,13 +11,12 @@ package WebGUI::Macro::Splat_random;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Utility; use WebGUI::Utility;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($temp, @param); my ($temp, @param);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
if ($param[0] ne "") { if ($param[0] ne "") {
$temp = round(rand()*$param[0]); $temp = round(rand()*$param[0]);
} else { } else {

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::StyleSheet;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Style; use WebGUI::Style;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($file) = WebGUI::Macro::getParams(shift); WebGUI::Style::setLink(shift,{
WebGUI::Style::setLink($file,{
type=>'text/css', type=>'text/css',
rel=>'stylesheet' rel=>'stylesheet'
}); });

View file

@ -2,13 +2,12 @@ package WebGUI::Macro::SubscriptionItem;
use strict; use strict;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::Macro;
use WebGUI::SQL; use WebGUI::SQL;
use WebGUI::URL; use WebGUI::URL;
sub process { sub process {
my ($subscriptionId, $templateId, %var); my ($subscriptionId, $templateId, %var);
($subscriptionId, $templateId) = WebGUI::Macro::getParams(@_); ($subscriptionId, $templateId) = @_;
%var = WebGUI::SQL->quickHash('select * from subscription where subscriptionId='.quote($subscriptionId)); %var = WebGUI::SQL->quickHash('select * from subscription where subscriptionId='.quote($subscriptionId));
$var{url} = WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId); $var{url} = WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId);
return WebGUI::Asset::Template->new($templateId || "PBtmpl0000000000000046")->process(\%var); return WebGUI::Asset::Template->new($templateId || "PBtmpl0000000000000046")->process(\%var);

View file

@ -1,12 +1,10 @@
package WebGUI::Macro::SubscriptionItemPurchaseUrl; package WebGUI::Macro::SubscriptionItemPurchaseUrl;
use strict; use strict;
use WebGUI::Macro;
use WebGUI::URL; use WebGUI::URL;
sub process { sub process {
my ($subscriptionId) = WebGUI::Macro::getParams(@_); return WebGUI::URL::page('op=purchaseSubscription;sid='.shift);
return WebGUI::URL::page('op=purchaseSubscription;sid='.$subscriptionId);
} }
1; 1;

View file

@ -12,12 +12,11 @@ package WebGUI::Macro::Thumbnail;
use strict; use strict;
use WebGUI::Asset::File::Image; use WebGUI::Asset::File::Image;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($url) = WebGUI::Macro::getParams(shift); my $url = shift;
if (my $image = WebGUI::Asset::File::Image->newByUrl($url)) { if (my $image = WebGUI::Asset::File::Image->newByUrl($url)) {
return $image->getThumbnailUrl; return $image->getThumbnailUrl;
} else { } else {

View file

@ -11,14 +11,12 @@ package WebGUI::Macro::URLEncode;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::URL; use WebGUI::URL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); return WebGUI::URL::escape(shift);
return WebGUI::URL::escape($param[0]);
} }

View file

@ -11,13 +11,11 @@ package WebGUI::Macro::User;
#------------------------------------------------------------------- #-------------------------------------------------------------------
use strict; use strict;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my @param = WebGUI::Macro::getParams($_[0]); return $session{user}{shift};
return $session{user}{$param[0]};
} }

View file

@ -12,7 +12,6 @@ package WebGUI::Macro::a_account;
use strict; use strict;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
@ -20,7 +19,7 @@ use WebGUI::URL;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my %var; my %var;
my @param = WebGUI::Macro::getParams(shift); my @param = @_;
return WebGUI::URL::page("op=auth;method=init") if ($param[0] eq "linkonly"); 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.url'} = WebGUI::URL::page('op=auth;method=init');
$var{'account.text'} = $param[0] || WebGUI::International::get(46,'Macro_a_account'); $var{'account.text'} = $param[0] || WebGUI::International::get(46,'Macro_a_account');

View file

@ -12,7 +12,6 @@ package WebGUI::Macro::r_printable;
use strict; use strict;
use WebGUI::International; use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::Asset::Template; use WebGUI::Asset::Template;
use WebGUI::URL; use WebGUI::URL;
@ -21,7 +20,7 @@ use WebGUI::Utility;
#------------------------------------------------------------------- #-------------------------------------------------------------------
sub process { sub process {
my ($temp, @param, $styleId); my ($temp, @param, $styleId);
@param = WebGUI::Macro::getParams($_[0]); @param = @_;
my $append = 'op=makePrintable'; my $append = 'op=makePrintable';
if ($session{env}{REQUEST_URI} =~ /op\=/) { if ($session{env}{REQUEST_URI} =~ /op\=/) {
$append = 'op2='.WebGUI::URL::escape($append); $append = 'op2='.WebGUI::URL::escape($append);

View file

@ -99,11 +99,13 @@ sub send {
$message .= "Content-Type: text/plain; charset=UTF-8\n"; $message .= "Content-Type: text/plain; charset=UTF-8\n";
} }
$message .= "\n"; $message .= "\n";
$message = WebGUI::Macro::process($message); WebGUI::Macro::process(\$message);
#body #body
$message .= $_[2]."\n"; $message .= $_[2]."\n";
#footer #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}); $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 ($session{setting}{smtpServer} =~ /\/sendmail/) {
if (open(MAIL,"| $session{setting}{smtpServer} -t -oi")) { if (open(MAIL,"| $session{setting}{smtpServer} -t -oi")) {

View file

@ -213,7 +213,8 @@ sub addInternationalizedEntry {
$subject{$u->profileField("language")} = $subject{1} if ($subject{$u->profileField("language")} eq ""); $subject{$u->profileField("language")} = $subject{1} if ($subject{$u->profileField("language")} eq "");
$subject = $subject{$u->profileField("language")}; $subject = $subject{$u->profileField("language")};
$message{$u->profileField("language")} = $message{1} if ($message{$u->profileField("language")} eq ""); $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).", WebGUI::SQL->write("insert into messageLog values (".quote($messageLogId).",".quote($u->userId).",
".quote($message).",".quote($url).",".time().",".quote($message).",".quote($status).")"); ".quote($message).",".quote($url).",".time().",".quote($message).",".quote($status).")");
if ($url ne "") { if ($url ne "") {

View file

@ -96,8 +96,9 @@ sub www_viewHelp {
my $body = WebGUI::Asset::Template->new("PBtmplHelp000000000001")->process(\%vars); 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=viewHelpIndex'),WebGUI::International::get(95));
$ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpTOC'),WebGUI::International::get('help contents')); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpTOC'),WebGUI::International::get('help contents'));
WebGUI::Macro::process(\$body);
return $ac->render( return $ac->render(
WebGUI::Macro::process($body), $body,
WebGUI::International::get(93).': '.$i18n->get($help->{title}) WebGUI::International::get(93).': '.$i18n->get($help->{title})
); );
} }

View file

@ -114,7 +114,10 @@ sub validateProfileData {
$a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId $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"); and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
while (%field = $a->hash) { 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 "") { if ($field{required} && $data{$field{fieldName}} eq "") {
$error .= '<li>'.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'</li>'; $error .= '<li>'.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'</li>';
}elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){ }elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){

View file

@ -287,13 +287,12 @@ sub execute {
=head2 finish ( ) =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 =cut
sub finish { sub finish {
$_[0]->{_sth}->finish; return $_[0]->{_sth}->finish;
return "";
} }

View file

@ -150,9 +150,9 @@ if (WebGUI::Grouping::isInGroup(2)) {
} else { } else {
$output = "WebGUI was unable to instantiate your style template.".$var{'body.content'}; $output = "WebGUI was unable to instantiate your style template.".$var{'body.content'};
} }
$output = WebGUI::Macro::process($output); WebGUI::Macro::process(\$output);
my $macroHeadTags = generateAdditionalHeadTags(); my $macroHeadTags = generateAdditionalHeadTags();
$macroHeadTags = WebGUI::Macro::process($macroHeadTags); WebGUI::Macro::process(\$macroHeadTags);
$output =~ s/\<\!-- macro head tags --\>/$macroHeadTags/; $output =~ s/\<\!-- macro head tags --\>/$macroHeadTags/;
return $output; return $output;
} }

View file

@ -3,6 +3,7 @@ package WebGUI::Subscription;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::Macro;
use WebGUI::Utility; use WebGUI::Utility;
use WebGUI::Commerce::Payment; use WebGUI::Commerce::Payment;
use WebGUI::DateTime; 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}); WebGUI::User->new($userId)->karma($self->{_properties}{karma}, 'Subscription', 'Added for purchasing subscription '.$self->{_properties}{name});
# Process executeOnPurchase field # 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 "");
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------

View file

@ -305,7 +305,7 @@ sub profileField {
$self = shift; $self = shift;
$fieldName = shift; $fieldName = shift;
$value = shift; $value = shift;
$value = WebGUI::Macro::negate($value); WebGUI::Macro::negate(\$value);
if (defined $value) { if (defined $value) {
$self->uncache; $self->uncache;
$self->{_profile}{$fieldName} = $value; $self->{_profile}{$fieldName} = $value;

View file

@ -45,6 +45,7 @@ if ($] >= 5.006) {
checkModule("LWP",5.80); checkModule("LWP",5.80);
checkModule("HTTP::Request",1.40); checkModule("HTTP::Request",1.40);
checkModule("HTTP::Headers",1.61); checkModule("HTTP::Headers",1.61);
checkModule("Test::More",0.61);
checkModule("Digest::MD5",2.20); checkModule("Digest::MD5",2.20);
checkModule("DBI",1.40); checkModule("DBI",1.40);
checkModule("DBD::mysql",2.1021); checkModule("DBD::mysql",2.1021);

View file

@ -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 (<FILE>) {
$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;