create ticket on custom field change, RT#10139
[freeside.git] / rt / lib / RT / Condition / CustomFieldChange.pm
diff --git a/rt/lib/RT/Condition/CustomFieldChange.pm b/rt/lib/RT/Condition/CustomFieldChange.pm
new file mode 100644 (file)
index 0000000..b9228a5
--- /dev/null
@@ -0,0 +1,56 @@
+package RT::Condition::CustomFieldChange;
+use base 'RT::Condition';
+use strict;
+
+=head2 IsApplicable
+
+If a custom field has a particular value.
+
+=cut
+
+# Based on Chuck Boeheim's code posted on the RT Wiki 3/13/06
+
+sub IsApplicable {
+    my $self = shift;
+    my $trans = $self->TransactionObj;
+    my $scrip = $self->ScripObj;
+    my %Rules = $self->Rules;
+    my ($field, $value) = @Rules{'field', 'value'};
+    return if !defined($field) or !defined($value);
+
+    if ($trans->Type eq 'Create') {
+        return 1 if $trans->TicketObj->FirstCustomFieldValue($field) eq $value;
+    }
+    if ($trans->Type eq 'CustomField') {
+        my $cf = RT::CustomField->new($self->CurrentUser);
+        $cf->Load($field);
+        return 1 if $trans->Field == $cf->Id and $trans->NewValue eq $value;
+    }
+    return undef;
+}
+
+sub Options {
+  my $self = shift;
+  my %args = ( 'QueueObj' => undef, @_ );
+  my $QueueObj = $args{'QueueObj'};
+  my $cfs = $QueueObj->TicketCustomFields();
+  my @fieldnames;
+  while ( my $cf = $cfs->Next ) {
+    push @fieldnames, $cf->Name, $cf->Name;
+  }
+  return (
+    { 
+      'name'    => 'field',
+      'label'   => 'Custom Field',
+      'type'    => 'select',
+      'options' => \@fieldnames,
+    },
+    {
+      'name'    => 'value',
+      'label'   => 'Value',
+      'type'    => 'text',
+    },
+  );
+}
+1;
+