diff options
Diffstat (limited to 'rt/lib/RT/Condition/StatusChangeQuietResolve.pm')
-rw-r--r-- | rt/lib/RT/Condition/StatusChangeQuietResolve.pm | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/rt/lib/RT/Condition/StatusChangeQuietResolve.pm b/rt/lib/RT/Condition/StatusChangeQuietResolve.pm new file mode 100644 index 000000000..842614182 --- /dev/null +++ b/rt/lib/RT/Condition/StatusChangeQuietResolve.pm @@ -0,0 +1,48 @@ +package RT::Condition::StatusChangeQuietResolve; +use base 'RT::Condition'; +use strict; +use warnings; + +=head2 DESCRIPTION + +This condition allows for muting of resolution notifications when +combined with the ticket status 'resolved_quiet' + +If status has been updated as 'resolved_quiet', this condition +will block notification, and update ticket status to 'resolved' + +If status has been updated as 'resolved', this condition +will block notification only if the previous ticket status +had been 'resolved_quiet' + +=cut + +sub IsApplicable { + my $self = shift; + my $txn = $self->TransactionObj; + my ($type, $field) = ($txn->Type, $txn->Field); + + return 0 + unless $type eq 'Status' + || ($type eq 'Set' && $field eq 'Status'); + + return 0 + unless $txn->NewValue eq 'resolved' + || $txn->NewValue eq 'resolved_quiet'; + + my $ticket = $self->TicketObj; + + if ($txn->NewValue eq 'resolved_quiet') { + $ticket->SetStatus('resolved'); + return 0; + } + elsif ($txn->NewValue eq 'resolved' && $txn->OldValue eq 'resolved_quiet') { + return 0; + } + + return 1; +} + +RT::Base->_ImportOverlays(); + +1; |