lib/RT/CustomField.pm #CheckMandatoryFields
lib/RT/CustomField_Overlay.pm #customfield date patch
lib/RT/Interface/Web.pm #customfield date patch
+lib/RT/Action.pm
+lib/RT/Condition.pm
+lib/RT/Scrip_Overlay.pm
+lib/RT/Action/CreateTickets.pm
+lib/RT/Condition/CustomFieldChange.pm
lib/RT/Interface/Web_Vendor.pm
lib/RT/Interface/Web/Handler.pm #freeside comp_root for dashboard emails
lib/RT/Record.pm #and customfield date patch
share/html/autohandler #Footer getting appended where unwelcome
share/html/index.html #option to redirect to ticket display on quick create
share/html/Admin/CustomFields/Modify.html #CheckMandatoryFields
+ share/html/Admin/Elements/EditScrip
+ share/html/Admin/Elements/EditScripOptions
+ share/html/Admin/Elements/SelectScripAction
+ share/html/Admin/Elements/SelectScripCondition
share/html/Admin/Users/Modify.html
share/html/Elements/CollectionList
share/html/Elements/EditCustomFieldDate #customfield date patch (NEW)
}
# }}}
+sub Options {
+ my $self = shift;
+ return();
+}
+
+sub Rules {
+ my $self = shift;
+ return () if !$self->ScripObj or !$self->ScripObj->ActionRules;
+ return(split "\n", $self->ScripObj->ActionRules);
+}
+
# {{{ sub DESTROY
sub DESTROY {
my $self = shift;
FinalPriority => $args{'finalpriority'} || 0,
SquelchMailTo => $args{'squelchmailto'},
Type => $args{'type'},
+ $self->Rules
);
if ( $args{content} ) {
}
+sub Options {
+ my $self = shift;
+ my $queues = RT::Queues->new($self->CurrentUser);
+ $queues->UnLimit;
+ my @names;
+ while (my $queue = $queues->Next) {
+ push @names, $queue->Id, $queue->Name;
+ }
+ return (
+ {
+ 'name' => 'Queue',
+ 'label' => 'In queue',
+ 'type' => 'select',
+ 'options' => \@names
+ }
+ )
+}
+
eval "require RT::Action::CreateTickets_Vendor";
die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Vendor.pm} );
eval "require RT::Action::CreateTickets_Local";
}
# }}}
+sub Options {
+ my $self = shift;
+ return();
+}
+
+sub Rules {
+ my $self = shift;
+ return () if !$self->ScripObj or !$self->ScripObj->ConditionRules;
+ # By default, option names and values are on consecutive lines.
+ # Override this if you need anything more interesting.
+ return(split "\n", $self->ScripObj->ConditionRules);
+}
+
# {{{ sub DESTROY
sub DESTROY {
my $self = shift;
--- /dev/null
+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;
+
CustomPrepareCode => undef,
CustomCommitCode => undef,
CustomIsApplicableCode => undef,
+ ConditionRules => undef,
+ ActionRules => undef,
@_
);
CustomPrepareCode => $args{'CustomPrepareCode'},
CustomCommitCode => $args{'CustomCommitCode'},
CustomIsApplicableCode => $args{'CustomIsApplicableCode'},
+ ConditionRules => $args{'ConditionRules'},
+ ActionRules => $args{'ActionRules'},
);
if ( $id ) {
return ( $id, $self->loc('Scrip Created') );
<& /Admin/Elements/SelectScripCondition,
Name => "Scrip-$id-ScripCondition",
Default => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
+ ScripObj => $scrip,
+ Queue => $Queue,
&></td></tr>
+<& /Admin/Elements/EditScripOptions,
+ Name => "Condition",
+ Default => $ARGS{"Scrip-$id-ConditionRules"} || $scrip->ConditionRules,
+ Queue => $Queue,
+ ScripX => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
+&>
+
<tr><td align="right"><&|/l&>Action</&>:</td><td>
<& /Admin/Elements/SelectScripAction,
Name => "Scrip-$id-ScripAction",
Default => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
+ ScripObj => $scrip,
+ Queue => $Queue,
&></td></tr>
+<& /Admin/Elements/EditScripOptions,
+ Name => "Action",
+ Default => $ARGS{"Scrip-$id-ActionRules"} || $scrip->ActionRules,
+ Queue => $Queue,
+ ScripX => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
+&>
+
<tr><td align="right"><&|/l&>Template</&>:</td><td>
<& /Admin/Elements/SelectTemplate,
Name => "Scrip-$id-Template",
<%INIT>
return ($id) unless $id;
+my @rules = ('ConditionRules', 'ActionRules');
+if ( exists($ARGS{"Scrip-$id-ScripCondition"}) ) {
+ foreach my $rules (@rules) {
+ my $prefix = join('-', 'Scrip', $id, $rules);
+ $ARGS{$prefix} = join("\n", map {
+ $_ =~ /^$rules-(.*)$/ ?
+ ($1, $ARGS{$_}) : ()
+ } keys(%ARGS)
+ );
+ }
+}
+
my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
if ( $id eq 'new' ) {
return $scrip->Create(
CustomCommitCode => $ARGS{"Scrip-new-CustomCommitCode"},
CustomIsApplicableCode => $ARGS{"Scrip-new-CustomIsApplicableCode"},
Stage => $ARGS{"Scrip-new-Stage"},
+ ConditionRules => $ARGS{"Scrip-new-ConditionRules"},
+ ActionRules => $ARGS{"Scrip-new-ActionRules"},
);
}
else {
unless $scrip->id;
my @attribs = qw(Queue ScripAction ScripCondition Template Stage
- Description CustomPrepareCode CustomCommitCode CustomIsApplicableCode);
+ Description CustomPrepareCode CustomCommitCode CustomIsApplicableCode
+ ConditionRules ActionRules);
my @results = UpdateRecordObject(
AttributesRef => \@attribs,
AttributePrefix => 'Scrip-'.$scrip->Id,
--- /dev/null
+% return if !@options;
+<tr><td></td><td><table>
+% my $prefix = $Name.'Rules-';
+% foreach my $o (@options) {
+ <tr><td align="right"><% $o->{'label'} %>:</td>
+ <td>
+% if ( $o->{'type'} eq 'text' ) {
+ <input type="text" name="<% $prefix.$o->{'name'} %>" value="<% $rules{$o->{'name'}} %>">
+% }
+% elsif ( $o->{'type'} eq 'select' and ref $o->{'options'} ) {
+ <select name="<% $prefix.$o->{'name'} %>">
+% my @choices = @{ $o->{'options'} };
+% while (@choices) {
+% my $v = shift @choices;
+% my $l = shift @choices;
+ <option value="<% $v %>"<% ($rules{$o->{'name'}} eq $v) ? ' SELECTED' : ''%>>
+ <% $l %></option>
+% }
+ </select>
+% } # else $o->{'type'}
+</td></tr>
+% } #foreach $o
+</table></td></tr>
+
+<%INIT>
+my (@options, %rules);
+if ( $ScripX ) {
+ my $ScripXObj = "RT::Scrip$Name"->new($session{'CurrentUser'});
+ $ScripXObj->Load($ScripX);
+ my $QueueObj = RT::Queue->new($session{'CurrentUser'});
+ $QueueObj->Load($Queue);
+ my $method = "Load$Name";
+ my $XObj = $ScripXObj->$method();
+ @options = $XObj->Options('QueueObj' => $QueueObj);
+ %rules = split("\n", $Default);
+}
+</%INIT>
+
+<%ARGS>
+$Name => undef
+$Default => undef
+$Queue => 0
+$ScripX => undef
+</%ARGS>
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<%$Name%>">
+<select name="<%$Name%>"
+onchange="var idobj = document.getElementsByName('id')[0];
+if (idobj.value=='new') idobj.value = '';
+form.submit()">
<option value=""
<% ! defined $Default && qq[ selected="selected"] |n %>
>-</option>
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<%$Name%>">
+<select name="<%$Name%>"
+onchange="var idobj = document.getElementsByName('id')[0];
+if (idobj.value=='new') idobj.value = '';
+form.submit()">
<option value=""
<% ! defined $Default && qq[ selected="selected"] %>
>-</option>