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 2429e5530..a5e29cef1 100644 --- a/docs/upgrades/upgrade_6.8.7-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.7-6.99.0.pl @@ -125,6 +125,14 @@ sub addWorkflow { value text, primary key (activityId, name) )"); + $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::User"=>["WebGUI::Workflow::Activity::CreateCronJob"], + "WebGUI::VersionTag"=>["WebGUI::Workflow::Activity::CommitVersionTag", "WebGUI::Workflow::Activity::RollbackVersionTag", + "WebGUI::Workflow::Activity::TrashVersionTag", "WebGUI::Workflow::Activity::CreateCronJob"] + }); my $workflow = WebGUI::Workflow->create($session, { title=>"Daily Maintenance Tasks", description=>"This workflow runs daily maintenance tasks such as cleaning up old temporary files and cache.", @@ -137,6 +145,11 @@ sub addWorkflow { $activity = $workflow->addActivity("WebGUI::Workflow::Activity::CleanFileCache", "pbwfactivity0000000002"); $activity->set("title","Prune cache larger than 100MB"); $activity->set("sizeLimit", 1000000000); + $activity = $workflow->addActivity("WebGUI::Workflow::Activity::ArchiveOldThreads", "pbwfactivity0000000005"); + $activity->set("title", "Archive old CS threads"); + $activity = $workflow->addActivity("WebGUI::Workflow::Activity::TrashExpiredEvents", "pbwfactivity0000000006"); + $activity->set("title", "Trash old Events Calendar Events"); + $activity->set("trashAfter", 60*60*24*30); WebGUI::Workflow::Cron->create($session, { title=>'Daily Maintenance', enabled=>1, @@ -146,13 +159,6 @@ sub addWorkflow { priority=>3, workflowId=>$workflow->getId }, "pbcron0000000000000001"); - $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"], - User=>[], - VersionTag=>["WebGUI::Workflow::Activity::CommitVersionTag", "WebGUI::Workflow::Activity::RollbackVersionTag", - "WebGUI::Workflow::Activity::TrashVersionTag"] - }); $session->db->write("alter table assetData drop column startDate"); $session->db->write("alter table assetData drop column endDate"); $workflow = WebGUI::Workflow->create($session, { @@ -167,10 +173,8 @@ sub addWorkflow { $activity = $workflow->addActivity("WebGUI::Workflow::Activity::TrashClipboard", "pbwfactivity0000000004"); $activity->set("title", "Move clipboard items older than 30 days to trash"); $activity->set("trashAfter", 60*60*24*30); - $activity = $workflow->addActivity("WebGUI::Workflow::Activity::ArchiveOldThreads", "pbwfactivity0000000005"); - $activity->set("title", "Archive old CS threads"); WebGUI::Workflow::Cron->create($session, { - title=>'Weekly Maintenance Maintenance', + title=>'Weekly Maintenance', enabled=>1, runOnce=>0, minuteOfHour=>"30", @@ -186,11 +190,13 @@ sub addWorkflow { $session->config->delete("DecayKarma_minimumKarma"); $session->config->delete("DecayKarma_decayFactor"); $session->config->delete("DeleteExpiredClipboard_offset"); + $session->config->delete("DeleteExpiredEvents_offset"); + $session->config->delete("TrashExpiredContent_offset"); $workflow = WebGUI::Workflow->create($session, { title=>"Commit Without Approval", description=>"This workflow commits all the assets in this version tag without asking for any approval.", enabled=>1, - type=>"VersionTag" + type=>"WebGUI::VersionTag" }, "pbworkflow000000000003"); $activity = $workflow->addActivity("WebGUI::Workflow::Activity::CommitVersionTag", "pbwfactivity0000000006"); $activity->set("title", "Commit Assets"); diff --git a/etc/WebGUI.conf.original b/etc/WebGUI.conf.original index 1a28d3792..b5b40ee9b 100644 --- a/etc/WebGUI.conf.original +++ b/etc/WebGUI.conf.original @@ -229,12 +229,6 @@ "soapHttpHeaderOverride" : 0, -# Specify the number of days after an event has passed that it -# should be purged from the Events Calendar. Comment it out if -# you never want events to be purged automatically. - -"DeleteExpiredEvents_offset" : 30, - # Specify the list of macros you wish to be processed on each page. "macros" : { @@ -299,11 +293,6 @@ "DeleteExpiredRevisions_offset" : 365, -# How many days after a piece of content expires should it be -# moved to the trash. - -"TrashExpiredContent_offset" : 30, - # What hour of the day (for example, 22 : 10 PM = 22:00:00) # should WebGUI try to synchronize user profile information from # the LDAP server. Note that this will only happen for users diff --git a/lib/WebGUI/Operation/Cron.pm b/lib/WebGUI/Operation/Cron.pm index 4d0297cda..8668931cf 100644 --- a/lib/WebGUI/Operation/Cron.pm +++ b/lib/WebGUI/Operation/Cron.pm @@ -95,7 +95,10 @@ sub www_editCronJob { hoverHelp=>$i18n->get("run once help") ); my $value = $cron->get("workflowId") if defined $cron; - my $type = "None" unless defined $cron; + my $type = "None"; + if (defined $cron) { + $type = $cron->get("className"); + } $f->workflow( name=>"workflowId", value=>$value, diff --git a/lib/WebGUI/Workflow.pm b/lib/WebGUI/Workflow.pm index 8377aedb8..2a3d3a9b9 100644 --- a/lib/WebGUI/Workflow.pm +++ b/lib/WebGUI/Workflow.pm @@ -330,7 +330,7 @@ A boolean indicating whether this workflow may be executed right now. =head4 type -A string indicating the type of object this workflow will be operating on. Valid values are "None", "VersionTag" and "User". +A string indicating the type of object this workflow will be operating on. Valid values are "None", or any object type, like "WebGUI::VersionTag". =head4 isSerial diff --git a/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm b/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm new file mode 100644 index 000000000..2b62fa9c5 --- /dev/null +++ b/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm @@ -0,0 +1,94 @@ +package WebGUI::Workflow::Activity::TrashExpiredEvents; + + +=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'; +use WebGUI::Asset::Event; + +=head1 NAME + +Package WebGUI::Workflow::Activity::TrashExpiredEvents + +=head1 DESCRIPTION + +Any events that are past a certain interval will be trashed. + +=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, "Asset_Event"); + push(@{$definition}, { + name=>$i18n->get("trash expired events"), + properties=> { + trashAfter => { + fieldType=>"interval", + label=>$i18n->get("trash after"), + defaultValue=>60*60*24*30, + hoverHelp=>$i18n->get("trash after help") + } + } + }); + 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 assetId from EventsCalendar_event where eventEndDate < ?", [time()-$self->get("trashAfter")]); + while (my ($id) = $sth->array) { + my $asset = WebGUI::Asset::Event->new($self->session, $id); + if (defined $asset && $asset->get("eventEndDate") < time()-$self->get("trashAfter")) { + $asset->trash; + } + } + $sth->finish; + return 1; +} + + + +1; + + diff --git a/lib/WebGUI/i18n/English/Asset_Event.pm b/lib/WebGUI/i18n/English/Asset_Event.pm index 4d3e15e6a..d53e4eff5 100644 --- a/lib/WebGUI/i18n/English/Asset_Event.pm +++ b/lib/WebGUI/i18n/English/Asset_Event.pm @@ -2,6 +2,24 @@ package WebGUI::i18n::English::Asset_Event; our $I18N = { + 'trash after' => { + message => q|Trash After|, + lastUpdated => 0, + context=> q|a label for the workflow activity property that sets how long old events stick around| + }, + + 'trash after help' => { + message => q|How long should old events stay in the calendar before being trashed?|, + lastUpdated => 0, + context=> q|hover help for the trash after field| + }, + + 'trash expired events' => { + message => q|Trash Expired Events|, + lastUpdated => 0, + context=> q|The label for the workflow activity that trashes old events.| + }, + '72' => { message => q|Event, Add/Edit|, lastUpdated => 1038887363 diff --git a/sbin/Hourly/DeleteExpiredEvents.pm b/sbin/Hourly/DeleteExpiredEvents.pm deleted file mode 100644 index 1f3cc94b9..000000000 --- a/sbin/Hourly/DeleteExpiredEvents.pm +++ /dev/null @@ -1,32 +0,0 @@ -package Hourly::DeleteExpiredEvents; - -#------------------------------------------------------------------- -# 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; -use WebGUI::Asset::Event; - -#----------------------------------------- -sub process { - if ($session{config}{DeleteExpiredEvents_offset} ne "") { - my $sth = WebGUI::SQL->read("select assetId from EventsCalendar_event where eventEndDate < ".(time()-(86400*$session{config}{DeleteExpiredEvents_offset}))); - while (my ($id) = $sth->array) { - WebGUI::Asset::Event->new($id)->purge; - } - $sth->finish; - } -} - -1; -