summaryrefslogtreecommitdiff
path: root/rt/lib/RT/Condition/StatusChangeQuietResolve.pm
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/RT/Condition/StatusChangeQuietResolve.pm')
-rw-r--r--rt/lib/RT/Condition/StatusChangeQuietResolve.pm48
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;