diff --git a/docs/upgrades/upgrade_6.8.7-6.99.0.pl b/docs/upgrades/upgrade_6.8.7-6.99.0.pl index 5f8de1e13..9bf6c79a6 100644 --- a/docs/upgrades/upgrade_6.8.7-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.7-6.99.0.pl @@ -128,7 +128,7 @@ sub addWorkflow { $session->config->set("workflowActivities", { None=>["WebGUI::Workflow::Activity::DecayKarma", "WebGUI::Workflow::Activity::TrashClipboard", "WebGUI::Workflow::Activity::CleanTempStorage", "WebGUI::Workflow::Activity::CleanFileCache", "WebGUI::Workflow::Activity::CleanLoginHistory", "WebGUI::Workflow::Activity::ArchiveOldThreads", - "WebGUI::Workflow::Activity::TrashExpiredEvents", "WebGUI::Workflow::Activity::CreateCronJob", + "WebGUI::Workflow::Activity::TrashExpiredEvents", "WebGUI::Workflow::Activity::CreateCronJob", "WebGUI::Workflow::Activity::DeleteExpiredSessions", "WebGUI::Workflow::Activity::DeleteExpiredGroupings", "WebGUI::Workflow::Activity::PurgeOldAssetRevisions"], "WebGUI::User"=>["WebGUI::Workflow::Activity::CreateCronJob"], "WebGUI::VersionTag"=>["WebGUI::Workflow::Activity::CommitVersionTag", "WebGUI::Workflow::Activity::RollbackVersionTag", @@ -189,6 +189,22 @@ sub addWorkflow { priority=>3, workflowId=>$workflow->getId }, "pbcron0000000000000002"); + $workflow = WebGUI::Workflow->create($session, { + title=>"Hourly Maintenance Tasks", + description=>"This workflow runs once per hour to perform maintenance tasks like deleting expired user sessions.", + enabled=>1, + type=>"None" + }, "pbworkflow000000000004"); + $activity = $workflow->addActivity("WebGUI::Workflow::Activity::DeleteExpiredSessions", "pbwfactivity0000000009"); + $activity->set("title", "delete expired sessions"); + WebGUI::Workflow::Cron->create($session, { + title=>'Hourly Maintenance', + enabled=>1, + runOnce=>0, + minuteOfHour=>"15", + priority=>3, + workflowId=>$workflow->getId + }, "pbcron0000000000000003"); $session->db->write("alter table assetVersionTag add column isLocked int not null default 0"); $session->db->write("alter table assetVersionTag add column lockedBy varchar(22) binary not null"); $session->config->delete("fileCacheSizeLimit"); diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm index f98ced7bb..1b5323d49 100644 --- a/lib/WebGUI/Session.pm +++ b/lib/WebGUI/Session.pm @@ -325,7 +325,7 @@ sub id { #------------------------------------------------------------------- -=head2 open ( webguiRoot, configFile [, requestObject, serverObject, sessionId ] ) +=head2 open ( webguiRoot, configFile [, requestObject, serverObject, sessionId, noFuss ] ) Constructor. Opens a closed ( or new ) WebGUI session. @@ -349,6 +349,10 @@ The Apache server object (Apache2::ServerUtil). If this session is being instanc Optionally retrieve a specific session id. Normally this is set by a cookie in the user's browser. +=head3 noFuss + +Uses simple session vars. See WebGUI::Session::Var::new() for more details. + =cut sub open { @@ -362,7 +366,8 @@ sub open { bless $self , $class; $self->{_request} = Apache2::Request->new($request, POST_MAX => 1024 * $self->setting->get("maxAttachmentSize")) if (defined $request); my $sessionId = shift || $self->http->getCookies->{"wgSession"} || $self->id->generate; - $self->{_var} = WebGUI::Session::Var->new($self,$sessionId); + my $noFuss = shift; + $self->{_var} = WebGUI::Session::Var->new($self,$sessionId, $noFuss); return $self; } diff --git a/lib/WebGUI/Session/Var.pm b/lib/WebGUI/Session/Var.pm index a9f433c8c..3253776fa 100644 --- a/lib/WebGUI/Session/Var.pm +++ b/lib/WebGUI/Session/Var.pm @@ -147,7 +147,7 @@ sub isAdminOn { #------------------------------------------------------------------- -=head2 new ( session ) +=head2 new ( session, noFuss ) Constructor. Returns a var object. @@ -155,6 +155,10 @@ Constructor. Returns a var object. A reference to the session. +=head3 noFuss + +A boolean, that if true will not update the session, or check if it's expired. This is mainly for WebGUI session maintenance, and shouldn't normally be used by anyone. + =cut sub new { diff --git a/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm b/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm new file mode 100644 index 000000000..69b897fd3 --- /dev/null +++ b/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm @@ -0,0 +1,86 @@ +package WebGUI::Workflow::Activity::DeleteExpiredSessions; + + +=head1 LEGAL + + ------------------------------------------------------------------- + WebGUI is Copyright 2001-2006 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 + ------------------------------------------------------------------- + +=cut + +use strict; +use base 'WebGUI::Workflow::Activity'; + +=head1 NAME + +Package WebGUI::Workflow::Activity::DeleteExpiredSessions + +=head1 DESCRIPTION + +Deletes expired WebGUI sessions. + +=head1 SYNOPSIS + +See WebGUI::Workflow::Activity for details on how to use any activity. + +=head1 METHODS + +These methods are available from this class: + +=cut + + +#------------------------------------------------------------------- + +=head2 definition ( session, definition ) + +See WebGUI::Workflow::Activity::defintion() for details. + +=cut + +sub definition { + my $class = shift; + my $session = shift; + my $definition = shift; + my $i18n = WebGUI::International->new($session, "Workflow_Activity_DeleteExpiredSessions"); + push(@{$definition}, { + name=>$i18n->get("topicName"), + properties=> { } + }); + return $class->SUPER::definition($session,$definition); +} + + +#------------------------------------------------------------------- + +=head2 execute ( ) + +See WebGUI::Workflow::Activity::execute() for details. + +=cut + +sub execute { + my $self = shift; + my $sth = $self->session->db->read("select sessionId from userSession where expiresarray) { + my $session = WebGUI::Session->open($self->session->config->getWebguiRoot, $self->session->config->getFilename, undef, undef, $sessionId, 1); + if (defined $session) { + $session->var->end; + $session->close; + } + } + $sth->finish; +} + + + +1; + + diff --git a/lib/WebGUI/i18n/English/Workflow_Activity_DeleteExpiredSessions.pm b/lib/WebGUI/i18n/English/Workflow_Activity_DeleteExpiredSessions.pm new file mode 100644 index 000000000..7d20d5ca6 --- /dev/null +++ b/lib/WebGUI/i18n/English/Workflow_Activity_DeleteExpiredSessions.pm @@ -0,0 +1,12 @@ +package WebGUI::i18n::English::Workflow_Activity_DeleteExpiredSessions; + +our $I18N = { + 'topicName' => { + message => q|Delete Expired Sessions|, + context => q|The name of this workflow activity.|, + lastUpdated => 0, + }, + +}; + +1; diff --git a/sbin/Hourly/DeleteExpiredSessions.pm b/sbin/Hourly/DeleteExpiredSessions.pm deleted file mode 100644 index bea691aae..000000000 --- a/sbin/Hourly/DeleteExpiredSessions.pm +++ /dev/null @@ -1,29 +0,0 @@ -package Hourly::DeleteExpiredSessions; - -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2006 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 strict; -use WebGUI::DateTime; -use WebGUI::Session; -use WebGUI::SQL; - -#------------------------------------------------------------------- -sub process { - my $epoch = WebGUI::DateTime::time(); - my $sth = WebGUI::SQL->read("select sessionId from userSession where expires<".$epoch); - while (my ($sessionId) = $sth->array) { - WebGUI::Session::end($sessionId); - } - $sth->finish; -} - -1; -