diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-07-08 22:45:58 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-07-08 22:45:58 -0700 |
commit | a6fe07e49e3fc12169e801b1ed6874c3a5bd8500 (patch) | |
tree | b87a7e6f37da5c8e13eb4d4653cfc8ce9239d8f0 /rt/lib/RT/Action/AutoOpen.pm | |
parent | e27244386c346f459d1569db26344407a0372a05 (diff) | |
parent | 005424d0c899aa899f43f583a6c74deb13ea4be1 (diff) |
Merge branch 'master' of git.freeside.biz:/home/git/freeside
Conflicts:
httemplate/misc/process/cancel_pkg.html
Diffstat (limited to 'rt/lib/RT/Action/AutoOpen.pm')
-rw-r--r-- | rt/lib/RT/Action/AutoOpen.pm | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/rt/lib/RT/Action/AutoOpen.pm b/rt/lib/RT/Action/AutoOpen.pm index b99b21474..5f96e0649 100644 --- a/rt/lib/RT/Action/AutoOpen.pm +++ b/rt/lib/RT/Action/AutoOpen.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC # <sales@bestpractical.com> # # (Except where explicitly superseded by other copyright notices) @@ -51,49 +51,64 @@ package RT::Action::AutoOpen; use strict; use warnings; - use base qw(RT::Action); =head1 DESCRIPTION -Opens a ticket unless it's allready open, but only unless transaction -L<RT::Transaction/IsInbound is inbound>. +This action automatically moves a ticket to an active status. + +Status is not changed if there is no active statuses in the lifecycle. + +Status is not changed if the current status is first active for ticket's status +lifecycle. For example if ticket's status is 'processing' and active statuses are +'processing', 'on hold' and 'waiting' then status is not changed, but for ticket +with status 'on hold' other rules are checked. + +Status is not changed if it's in the list of C<initial> statuses for the +current scheme and creator of the current transaction +is one of the ticket's requestors. -Doesn't open a ticket if message's head has field C<RT-Control> with -C<no-autoopen> substring. +Status is not changed if message's head has field C<RT-Control> with C<no-autoopen> +substring. + +Status is set to the first possible active status. If the ticket's +status is C<Stalled> then RT finds all possible transitions from C<Stalled> +status and selects first one that results in the ticket having an +active status. =cut sub Prepare { my $self = shift; - # if the ticket is already open or the ticket is new and the message is more mail from the - # requestor, don't reopen it. + my $ticket = $self->TicketObj; + my $next = $ticket->FirstActiveStatus; + return 1 unless defined $next; - my $status = $self->TicketObj->Status; - return undef if $status eq 'open'; - return undef if $status eq 'new' && $self->TransactionObj->IsInbound; + # no change if the ticket is in initial status and the message is a mail + # from a requestor + return 1 if $ticket->QueueObj->Lifecycle->IsInitial($ticket->Status) + && $self->TransactionObj->IsInbound; if ( my $msg = $self->TransactionObj->Message->First ) { - return undef if ($msg->GetHeader('RT-Control') || '') =~ /\bno-autoopen\b/i; + return 1 if ($msg->GetHeader('RT-Control') || '') =~ /\bno-autoopen\b/i; } + $self->{'set_status_to'} = $next; + return 1; } sub Commit { my $self = shift; - my $oldstatus = $self->TicketObj->Status; - $self->TicketObj->__Set( Field => 'Status', Value => 'open' ); - $self->TicketObj->_NewTransaction( - Type => 'Status', - Field => 'Status', - OldValue => $oldstatus, - NewValue => 'open', - Data => 'Ticket auto-opened on incoming correspondence' - ); + return 1 unless my $new_status = $self->{'set_status_to'}; + my ($val, $msg) = $self->TicketObj->SetStatus( $new_status ); + unless ( $val ) { + $RT::Logger->error( "Couldn't auto-open ticket: ". $msg ); + return 0; + } return 1; } |