--- /dev/null
+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;
+