automatic creation of subtask tickets, #34061
[freeside.git] / rt / lib / RT / Condition / CustomFieldEquals.pm
diff --git a/rt/lib/RT/Condition/CustomFieldEquals.pm b/rt/lib/RT/Condition/CustomFieldEquals.pm
new file mode 100644 (file)
index 0000000..69dedcb
--- /dev/null
@@ -0,0 +1,39 @@
+package RT::Condition::CustomFieldEquals;
+use base 'RT::Condition';
+use strict;
+
+=head2 IsApplicable
+
+If a custom field has a value equal to some specified value.
+
+=cut
+
+# Based on Chuck Boeheim's code posted on the RT Wiki 3/13/06
+# Simplified to avoid carrying old schema around. The new mechanics are that
+# the ScripCondition's "Argument" is the custom field name = value. If the 
+# transaction initially sets the CF value to a the specified value, or 
+# changes it from not equaling to equaling the specified value, the condition
+# returns true.
+# Don't use this on custom fields that allow multiple values.
+
+sub IsApplicable {
+    my $self = shift;
+    my $trans = $self->TransactionObj;
+    my $scrip = $self->ScripObj;
+    my ($field, $value) = split('=', $self->Argument, 2);
+
+    if ($trans->Type eq 'Create') {
+        return ($trans->TicketObj->FirstCustomFieldValue($field) eq $value);
+    }
+    if ($trans->Type eq 'CustomField') {
+        my $cf = RT::CustomField->new($self->CurrentUser);
+        $cf->Load($field);
+        return $trans->Field == $cf->Id
+               and ($trans->NewValue eq $value)
+               and ($trans->OldValue ne $value)
+    }
+    return undef;
+}
+
+1;
+