summaryrefslogtreecommitdiff
path: root/FS/FS/Cron
diff options
context:
space:
mode:
authormark <mark>2011-01-25 10:13:16 +0000
committermark <mark>2011-01-25 10:13:16 +0000
commit6cc42813cd4e39154b2589c315e1271fa6b43ff1 (patch)
treec16ca6733a62d281ba235ccc4283f451281d342d /FS/FS/Cron
parent82a358b848e8755e3f710a3beb4232b9e59cf18c (diff)
ticket escalation, part 2, RT#8254
Diffstat (limited to 'FS/FS/Cron')
-rw-r--r--FS/FS/Cron/rt_tasks.pm37
1 files changed, 29 insertions, 8 deletions
diff --git a/FS/FS/Cron/rt_tasks.pm b/FS/FS/Cron/rt_tasks.pm
index 066aeeb..26e305d 100644
--- a/FS/FS/Cron/rt_tasks.pm
+++ b/FS/FS/Cron/rt_tasks.pm
@@ -42,6 +42,7 @@ sub rt_escalate {
foreach (qw(
Search::ActiveTicketsInQueue
Action::EscalatePriority
+ Action::EscalateQueue
)) {
eval "use RT::$_";
die $@ if $@;
@@ -51,7 +52,7 @@ sub rt_escalate {
# Mechanics:
# We're using EscalatePriority, so search in all queues that have a
# priority range defined. Select all active tickets in those queues and
- # LinearEscalate them.
+ # EscalatePriority, then EscalateQueue them.
# to make some actions work without complaining
%void = map { $_ => "RT::$_"->new($CurrentUser) }
@@ -61,6 +62,8 @@ sub rt_escalate {
# we might want to do, but escalation is the only one we do now.
my $queues = RT::Queues->new($CurrentUser);
$queues->UnLimit;
+ my @actions = ();
+ my @active_tickets = ();
while (my $queue = $queues->Next) {
if ( $queue->InitialPriority == $queue->FinalPriority ) {
warn "Queue '".$queue->Name."' (skipped)\n" if $DEBUG;
@@ -76,8 +79,24 @@ sub rt_escalate {
$search->Prepare;
while (my $ticket = $tickets->Next) {
warn 'Ticket #'.$ticket->Id()."\n" if $DEBUG;
- # We don't need transaction stuff from rt-crontool here
- action($ticket, 'EscalatePriority', "CurrentTime:$time");
+ my @a = (
+ action($ticket, 'EscalatePriority', "CurrentTime:$time"),
+ action($ticket, 'EscalateQueue')
+ );
+ next if !@a;
+ push @actions, @a;
+ push @active_tickets, $ticket; # avoid RT's overzealous garbage collector
+ }
+ }
+ foreach (grep {$_} @actions) {
+ my ($val, $msg) = $_->Commit;
+ if ( $DEBUG ) {
+ if ($val) {
+ warn "Action committed: ".ref($_)." #".$_->TicketObj->Id."\n";
+ }
+ else {
+ warn "Action returned $msg: #".$_->TicketObj->Id."\n";
+ }
}
}
return;
@@ -98,11 +117,13 @@ sub action {
ScripAction => $void{'ScripAction'},
CurrentUser => $CurrentUser,
);
- return unless $action_obj->Prepare;
- warn "Action prepared: $action\n" if $DEBUG;
- $action_obj->Commit;
- warn "Action committed: $action\n" if $DEBUG;
- return;
+ if ( $action_obj->Prepare ) {
+ warn "Action prepared: $action\n" if $DEBUG;
+ return $action_obj;
+ }
+ else {
+ return;
+ }
}
1;