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 9bf6c79a6..0370b67ef 100644 --- a/docs/upgrades/upgrade_6.8.7-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.7-6.99.0.pl @@ -179,6 +179,9 @@ sub addWorkflow { $activity = $workflow->addActivity("WebGUI::Workflow::Activity::PurgeOldAssetRevisions", "pbwfactivity0000000008"); $activity->set("title", "delete asset revisions older than a year from the database"); $activity->set("purgeAfter", 60*60*24*365); + $activity = $workflow->addActivity("WebGUI::Workflow::Activity::PurgeOldTrash", "pbwfactivity0000000010"); + $activity->set("title", "delete assets from trash that have been sitting around for 30 days"); + $activity->set("purgeAfter", 60*60*24*30); WebGUI::Workflow::Cron->create($session, { title=>'Weekly Maintenance', enabled=>1, @@ -214,6 +217,8 @@ sub addWorkflow { $session->config->delete("DeleteExpiredClipboard_offset"); $session->config->delete("DeleteExpiredEvents_offset"); $session->config->delete("TrashExpiredContent_offset"); + $session->config->delete("DeleteExpiredTrash_offset"); + $session->config->delete("DeleteExpiredRevisions_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.", diff --git a/etc/WebGUI.conf.original b/etc/WebGUI.conf.original index b5b40ee9b..55be66bd3 100644 --- a/etc/WebGUI.conf.original +++ b/etc/WebGUI.conf.original @@ -283,16 +283,6 @@ "passiveProfileInterval" : 86400, -# Specify the number of days content should remain in the trash -# before it gets purged from the system completely. - -"DeleteExpiredTrash_offset" : 30, - -# Specify the number of days old revisions of assets should remain -# available for rollbacks. - -"DeleteExpiredRevisions_offset" : 365, - # 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/Workflow/Activity/PurgeOldTrash.pm b/lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm new file mode 100644 index 000000000..a55801eb2 --- /dev/null +++ b/lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm @@ -0,0 +1,92 @@ +package WebGUI::Workflow::Activity::PurgeOldTrash; + + +=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; + +=head1 NAME + +Package WebGUI::Workflow::Activity::PurgeOldTrash + +=head1 DESCRIPTION + +Purges trash that's been in the system for a while. + +=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"); + push(@{$definition}, { + name=>$i18n->get("purge old trash"), + properties=> { + purgeAfter=>{ + fieldType=>"interval", + defaultValue=>60*60*24*30, + label=>$i18n->get("purge trash after"), + hoverHelp=>$i18n->get("purge 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,className from asset where state='trash' and stateChanged < ?", [time() - $self->get("purgeAfter")]); + while (my ($id, $class) = $sth->array) { + my $asset = WebGUI::Asset->new($self->session, $id,$class); + $asset->purge if (defined $asset); + } + return 1; +} + + + + +1; + + diff --git a/lib/WebGUI/i18n/English/Asset.pm b/lib/WebGUI/i18n/English/Asset.pm index ef2db82ac..2aa40166d 100644 --- a/lib/WebGUI/i18n/English/Asset.pm +++ b/lib/WebGUI/i18n/English/Asset.pm @@ -6,6 +6,25 @@ our $I18N = { lastUpdated => 0, context => q|a suffix for a measurement of time, like "3 seconds ago"| }, + + 'purge old trash' => { + message => q|Purge Old Trash|, + lastUpdated => 0, + context => q|title of the purge trash workflow activity| + }, + + 'purge trash after' => { + message => q|Purge Old Trash After|, + lastUpdated => 0, + context => q|the label used in the purge old trash workflow activity| + }, + + 'purge trash after help' => { + message => q|How long should an asset stay in the trash before it's considered old enough to purge? Note that when it get's purged all it's revisions and descendants will be purged as well.|, + lastUpdated => 0, + context => q|the hover help for the purge trash after field| + }, + 'purge old asset revisions' => { message => q|Purge Old Asset Revisions|, lastUpdated => 0, diff --git a/sbin/Hourly/DeleteExpiredTrash.pm b/sbin/Hourly/DeleteExpiredTrash.pm deleted file mode 100644 index 8dad6004e..000000000 --- a/sbin/Hourly/DeleteExpiredTrash.pm +++ /dev/null @@ -1,33 +0,0 @@ -package Hourly::DeleteExpiredTrash; - -#------------------------------------------------------------------- -# 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::Asset; -use WebGUI::Session; -use WebGUI::SQL; - -#----------------------------------------- -sub process { - if ($session{config}{DeleteExpiredTrash_offset} ne "") { - my $expireDate = (time()-(86400*$session{config}{DeleteExpiredTrash_offset})); - my $sth = WebGUI::SQL->read("select assetId,className from asset where state='trash' and stateChanged <".$expireDate); - while (my ($id, $class) = $sth->array) { - my $asset = WebGUI::Asset->new($id,$class); - $asset->purge; - } - $sth->finish; - } -} - -1; -