From 250d8ff944a5dc99592edb5615a8d7b22682db1c Mon Sep 17 00:00:00 2001 From: Matthew Wilson Date: Sun, 15 Jan 2006 04:25:33 +0000 Subject: [PATCH] lots o' fixes. --- lib/WebGUI.pm | 4 ---- lib/WebGUI/Asset.pm | 2 +- lib/WebGUI/Asset/Event.pm | 5 +++-- lib/WebGUI/Asset/Post.pm | 5 +++-- lib/WebGUI/Asset/Redirect.pm | 6 ++--- lib/WebGUI/Asset/Shortcut.pm | 5 +++-- lib/WebGUI/Asset/Snippet.pm | 5 +++-- lib/WebGUI/Asset/Wobject.pm | 10 +++++---- lib/WebGUI/Cache.pm | 2 +- lib/WebGUI/Form/Email.pm | 2 +- lib/WebGUI/Form/Submit.pm | 2 +- lib/WebGUI/HTMLForm.pm | 2 +- lib/WebGUI/Operation/WebGUI.pm | 13 ++++++----- lib/WebGUI/Session.pm | 11 +++++---- lib/WebGUI/Session/Scratch.pm | 41 +++++++++++++++++++++------------- lib/WebGUI/Session/Var.pm | 2 +- 16 files changed, 64 insertions(+), 53 deletions(-) diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm index 16e3a12dc..82e1fb941 100644 --- a/lib/WebGUI.pm +++ b/lib/WebGUI.pm @@ -58,10 +58,6 @@ sub contentHandler { my $s = Apache2::ServerUtil->server; ### Open new or existing user session based on user-agent's cookie. my $session = WebGUI::Session->open($s->dir_config('WebguiRoot'),$r->dir_config('WebguiConfig'),$r, $s); - ### form variables -# foreach ($session->{_request}->param) { -# $session{form}{$_} = $session->{_request}->body($_) || $session->{_request}->param($_); -# } if ($session->env->get("HTTP_X_MOZ") eq "prefetch") { # browser prefetch is a bad thing $session->http->setStatus("403","We don't allow prefetch, because it increases bandwidth, hurts stats, and can break web sites."); $r->print($session->http->getHeader); diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index 9de675427..15ecd7706 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -1032,7 +1032,7 @@ sub new { } $class = $className; } - my $cache = WebGUI::Cache->new($session,$session, ["asset",$assetId,$revisionDate]); + my $cache = WebGUI::Cache->new($session, ["asset",$assetId,$revisionDate]); my $properties = $cache->get; if (exists $properties->{assetId}) { # got properties from cache diff --git a/lib/WebGUI/Asset/Event.pm b/lib/WebGUI/Asset/Event.pm index edbcaa2ef..70af5b169 100644 --- a/lib/WebGUI/Asset/Event.pm +++ b/lib/WebGUI/Asset/Event.pm @@ -25,8 +25,9 @@ our @ISA = qw(WebGUI::Asset); #------------------------------------------------------------------- sub definition { my $class = shift; + my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($self->session,"Asset_Event"); + my $i18n = WebGUI::International->new($session,"Asset_Event"); push(@{$definition}, { assetName=>$i18n->get('assetName'), icon=>'calendar.gif', @@ -59,7 +60,7 @@ sub definition { } } }); - return $class->SUPER::definition($definition); + return $class->SUPER::definition($session,$definition); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Post.pm b/lib/WebGUI/Asset/Post.pm index 7c88e2122..aa2050659 100644 --- a/lib/WebGUI/Asset/Post.pm +++ b/lib/WebGUI/Asset/Post.pm @@ -102,8 +102,9 @@ sub chopTitle { #------------------------------------------------------------------- sub definition { my $class = shift; + my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($self->session,"Asset_Post"); + my $i18n = WebGUI::International->new($session,"Asset_Post"); push(@{$definition}, { assetName=>$i18n->get('assetName'), icon=>'post.gif', @@ -173,7 +174,7 @@ sub definition { } }, }); - return $class->SUPER::definition($definition); + return $class->SUPER::definition($session,$definition); } diff --git a/lib/WebGUI/Asset/Redirect.pm b/lib/WebGUI/Asset/Redirect.pm index 65d694e32..870d4205a 100644 --- a/lib/WebGUI/Asset/Redirect.pm +++ b/lib/WebGUI/Asset/Redirect.pm @@ -58,9 +58,9 @@ sub definition { my $class = shift; my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($session); + my $i18n = WebGUI::International->new($session,"Asset_Redirect"); push(@{$definition}, { - assetName=>$i18n->get('assetName',"Asset_Redirect"), + assetName=>$i18n->get('assetName'), uiLevel => 9, icon=>'redirect.gif', tableName=>'redirect', @@ -72,7 +72,7 @@ sub definition { } } }); - return $class->SUPER::definition($definition); + return $class->SUPER::definition($session,$definition); } diff --git a/lib/WebGUI/Asset/Shortcut.pm b/lib/WebGUI/Asset/Shortcut.pm index a59269d4c..8bbc433b8 100644 --- a/lib/WebGUI/Asset/Shortcut.pm +++ b/lib/WebGUI/Asset/Shortcut.pm @@ -155,8 +155,9 @@ sub canManage { #------------------------------------------------------------------- sub definition { my $class = shift; + my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($self->session,"Asset_Shortcut"); + my $i18n = WebGUI::International->new($session,"Asset_Shortcut"); push(@{$definition}, { assetName=>$i18n->get('assetName'), icon=>'shortcut.gif', @@ -206,7 +207,7 @@ sub definition { } } }); - return $class->SUPER::definition($definition); + return $class->SUPER::definition($session,$definition); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Snippet.pm b/lib/WebGUI/Asset/Snippet.pm index 192422ac6..0e5c59163 100644 --- a/lib/WebGUI/Asset/Snippet.pm +++ b/lib/WebGUI/Asset/Snippet.pm @@ -57,8 +57,9 @@ A hash reference passed in from a subclass definition. sub definition { my $class = shift; + my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($self->session,"Asset_Snippet"); + my $i18n = WebGUI::International->new($session,"Asset_Snippet"); push(@{$definition}, { assetName=>$i18n->get('assetName'), uiLevel => 5, @@ -81,7 +82,7 @@ sub definition { } }); - return $class->SUPER::definition($definition); + return $class->SUPER::definition($session,$definition); } diff --git a/lib/WebGUI/Asset/Wobject.pm b/lib/WebGUI/Asset/Wobject.pm index 3a9ef3036..6cdf4c91a 100644 --- a/lib/WebGUI/Asset/Wobject.pm +++ b/lib/WebGUI/Asset/Wobject.pm @@ -60,8 +60,9 @@ An array of hashes to prepend to the list sub definition { my $class = shift; + my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($self->session,'Wobject'); + my $i18n = WebGUI::International->new($session,'Wobject'); my %properties; tie %properties, 'Tie::IxHash'; %properties = ( @@ -119,7 +120,7 @@ sub definition { autoGenerateForms=>1, properties => \%properties }); - return $class->SUPER::definition($definition); + return $class->SUPER::definition($session,$definition); } @@ -191,6 +192,7 @@ A comparison expression to be used when checking whether the action should be al =cut sub confirm { + my $self = shift; return $self->session->privilege->vitalComponent() if ($_[4]); my $noURL = $_[3] || $_[0]->getUrl; my $i18n = WebGUI::International->new($self->session,'Wobject'); @@ -278,8 +280,8 @@ Logs the view of the wobject to the passive profiling mechanism. sub logView { my $self = shift; if ($self->session->setting->get("passiveProfilingEnabled")) { - WebGUI::PassiveProfiling::add($session,$self->get("assetId")); - WebGUI::PassiveProfiling::addPage($session,$self->get("assetId")); # add wobjects on asset to passive profile log + WebGUI::PassiveProfiling::add($self->session,$self->get("assetId")); + WebGUI::PassiveProfiling::addPage($self->session,$self->get("assetId")); # add wobjects on asset to passive profile log } return; } diff --git a/lib/WebGUI/Cache.pm b/lib/WebGUI/Cache.pm index b8b6c3d6e..de71770c9 100644 --- a/lib/WebGUI/Cache.pm +++ b/lib/WebGUI/Cache.pm @@ -117,7 +117,7 @@ sub new { my $cache; my $class = shift; my $session = shift; - if($session->config->get("memcached_servers")) { + if ($session->config->get("memcached_servers")) { require WebGUI::Cache::Memcached; return WebGUI::Cache::Memcached->new($session,@_); } else { diff --git a/lib/WebGUI/Form/Email.pm b/lib/WebGUI/Form/Email.pm index e28efbdad..ff843f577 100644 --- a/lib/WebGUI/Form/Email.pm +++ b/lib/WebGUI/Form/Email.pm @@ -97,7 +97,7 @@ Renders an email address field. sub toHtml { my $self = shift; $self->session->style->setScript($self->session->config->get("extrasURL").'/emailCheck.js',{ type=>'text/javascript' }); - $self->get("extras") .= ' onchange="emailCheck(this.value)" '; + $self->{_params}{extras} .= ' onchange="emailCheck(this.value)" '; return $self->SUPER::toHtml; } diff --git a/lib/WebGUI/Form/Submit.pm b/lib/WebGUI/Form/Submit.pm index c25104fc6..432b0403b 100644 --- a/lib/WebGUI/Form/Submit.pm +++ b/lib/WebGUI/Form/Submit.pm @@ -69,7 +69,7 @@ sub toHtml { my $self = shift; my $value = $self->fixQuotes($self->get("value")); my $i18n = WebGUI::International->new($self->session); - $self->get("extras") ||= 'onclick="this.value=\''.$i18n->get(452).'\'"'; + $self->{_params}{extras}; ||= 'onclick="this.value=\''.$i18n->get(452).'\'"'; my $html = 'get("name").'" ' if ($self->get("name")); $html .= 'id="'.$self->{id}.'" ' unless ($self->{id} eq "_formId"); diff --git a/lib/WebGUI/HTMLForm.pm b/lib/WebGUI/HTMLForm.pm index 83181af62..77f0d9bf8 100644 --- a/lib/WebGUI/HTMLForm.pm +++ b/lib/WebGUI/HTMLForm.pm @@ -90,7 +90,7 @@ sub AUTOLOAD { return undef; } my $class = "WebGUI::Form::".$name; - $self->{_data} .= $class->new(%params)->toHtmlWithWrapper; + $self->{_data} .= $class->new($self->session,%params)->toHtmlWithWrapper; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Operation/WebGUI.pm b/lib/WebGUI/Operation/WebGUI.pm index d36309f20..5ce52d676 100644 --- a/lib/WebGUI/Operation/WebGUI.pm +++ b/lib/WebGUI/Operation/WebGUI.pm @@ -52,6 +52,7 @@ password and email address, as well as some other WebGUI settings. #------------------------------------------------------------------- sub www_setup { my $session = shift; + $session->http->setMimeType("text/html"); return "" unless ($session->setting->get("specialState") eq "init"); my $i18n = WebGUI::International->new($session, "WebGUI"); my $output = 'submit; $output .= $f->print; } elsif ($session->form->process("step") eq "3") { - WebGUI::Setting::remove('specialState'); - WebGUI::Setting::set('companyName',$session->form->text("companyName")); - WebGUI::Setting::set('companyURL',$session->form->url("companyURL")); - WebGUI::Setting::set('companyEmail',$session->form->email("companyEmail")); - WebGUI::HTTP::setRedirect($session->url->gateway()); + $session->setting->remove('specialState'); + $session->setting->set('companyName',$session->form->text("companyName")); + $session->setting->set('companyURL',$session->form->url("companyURL")); + $session->setting->set('companyEmail',$session->form->email("companyEmail")); + $session->setting->setRedirect($session->url->gateway()); return ""; } else { $output .= 'Admin Account'; - my $u = WebGUI::User->new('3'); + my $u = WebGUI::User->new($session,'3'); my $f = WebGUI::HTMLForm->new($session,action=>$session->url->gateway()); $f->hidden( -name=>"op", diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm index 67eb5e58b..8817203e8 100644 --- a/lib/WebGUI/Session.pm +++ b/lib/WebGUI/Session.pm @@ -114,10 +114,8 @@ Cleans up a WebGUI session information from memory and disconnects from any reso sub close { my $self = shift; ##Must destroy the logger last! - my %keys = grep { $_ ne '_errorHandler' } keys %{ $self }; - foreach my $object (keys %{$self}) { - next if ($object eq '_request' || $object eq '_sessionId' || $object eq '_server'); - ##Don't destroy things that don's exist + my %mykeys = grep { ($_ ne '_errorHandler' && $_ ne '_request' && $_ eq '_sessionId' && $_ eq '_server') } keys %{ $self }; + foreach my $object (keys %mykeys) { $self->{$object} and $self->{$object}->DESTROY; } $self->{_errorHandler} and $self->{_errorHandler}->DESTROY; @@ -359,8 +357,9 @@ sub open { my $server = shift; my $sessionId = shift; my $config = WebGUI::Config->new($webguiRoot,$configFile); - my $self = {_sessionId=>$sessionId, _config=>$config, _server=>$server}; + my $self = {_config=>$config, _server=>$server}; bless $self , $class; + $self->{_var} = WebGUI::Session::Var->new($self,$sessionId); $self->{_request} = Apache2::Request->new($request, POST_MAX => 1024 * $self->setting->get("maxAttachmentSize")) if (defined $request); return $self; } @@ -422,7 +421,7 @@ Returns a WebGUI::Session::Scratch object. sub scratch { my $self = shift; unless (exists $self->{_scratch}) { - $self->{_scratch} = WebGUI::Session::Scratch->new($self->getId, $self->db); + $self->{_scratch} = WebGUI::Session::Scratch->new($self); } return $self->{_scratch}; } diff --git a/lib/WebGUI/Session/Scratch.pm b/lib/WebGUI/Session/Scratch.pm index 6d9f615b9..d9e222fdd 100644 --- a/lib/WebGUI/Session/Scratch.pm +++ b/lib/WebGUI/Session/Scratch.pm @@ -26,7 +26,7 @@ This package allows you to attach arbitrary data to the session that lasts until =head1 SYNOPSIS -$scratch = WebGUI::Session::Scratch->new($sessionId, $db); +$scratch = WebGUI::Session::Scratch->new($session); $scratch->delete('temp'); $scratch->set('temp',$value); @@ -61,7 +61,7 @@ sub delete { my $name = shift; return undef unless ($name); delete $self->{_data}{$name}; - $self->{_db}->deleteRow("userSessionScratch","sessionId",$self->{_sessionId}); + $self->session->db->deleteRow("userSessionScratch","sessionId",$self->{_sessionId}); } @@ -76,7 +76,7 @@ Deletes all scratch variables for this session. sub deleteAll { my $self = shift; delete $self->{_data}; - $self->session->db->write("delete from userSessionScratch where sessionId=".quote($self->{_sessionId})); + $self->session->db->write("delete from userSessionScratch where sessionId=".quote($self->{_sessionId})); } @@ -97,7 +97,7 @@ sub deleteName { my $name = shift; return undef unless ($name); delete $self->{_data}{$name}; - $self->session->db->write("delete from userSessionScratch where name=".quote($name)); + $self->session->db->write("delete from userSessionScratch where name=".quote($name)); } @@ -136,26 +136,35 @@ sub get { #------------------------------------------------------------------- -=head2 new ( sessionId, db ) +=head2 new ( session ) Constructor. Returns a scratch object. -=head3 sessionId +=head3 session -The unique id of the current session. - -=head3 db - -An active WebGUI::SQL database handler. +The current session. =cut sub new { my $class = shift; - my $sessionId = shift; - my $db = shift; - my $data = $db->buildHashRef("select name,value from userSessionScratch where sessionId=".$db->quote($sessionId)); - bless {_sessionId=>$sessionId, _db=>$db, _data=>$data}, $class; + my $session = shift; + my $data = $session->db->buildHashRef("select name,value from userSessionScratch where sessionId=".$session->db->quote($session->getId)); + bless {_session=>$session,_sessionId=>$session->getId, _data=>$data}, $class; +} + + +#------------------------------------------------------------------- + +=head2 session ( ) + +Returns a reference to the WebGUI::Session object. + +=cut + +sub session { + my $self = shift; + return $self->{_session}; } @@ -181,7 +190,7 @@ sub set { my $value = shift; return undef unless ($name); $self->{_data}{$name} = $value; - $self->{_db}->write("replace into userSessionScratch (sessionId, name, value) values (".$self->{_db}->quoteAndJoin([$self->{_sessionId}, $name, $value]).")"); + $self->session->db->write("replace into userSessionScratch (sessionId, name, value) values (".$self->session->db->quoteAndJoin([$self->{_sessionId}, $name, $value]).")"); } diff --git a/lib/WebGUI/Session/Var.pm b/lib/WebGUI/Session/Var.pm index 4da85e3c2..8b49f2a8d 100644 --- a/lib/WebGUI/Session/Var.pm +++ b/lib/WebGUI/Session/Var.pm @@ -170,7 +170,7 @@ sub new { $self->end; } if ($self->{_var}{sessionId} ne "") { - $self->{_var}{lastPageView} =$session->datetime->time(); + $self->{_var}{lastPageView} = $session->datetime->time(); $self->{_var}{lastIP} = $session->env("REMOTE_ADDR"); $self->{_var}{expires} = $session->datetime->time() + $session->setting->get("sessionTimeout"); $session->db->setRow("userSession","sessionId",$self->{_var});