[Rt-commit] rt branch, 4.4/core-admincondionsandactions-extension, created. rt-4.4.1-122-g4cb43e7
Dustin Collins
strega at bestpractical.com
Mon Oct 17 14:23:25 EDT 2016
The branch, 4.4/core-admincondionsandactions-extension has been created
at 4cb43e7933ace99924206cc4be52606f0a2ba126 (commit)
- Log -----------------------------------------------------------------
commit 4cb43e7933ace99924206cc4be52606f0a2ba126
Author: Dustin Collins <strega at bestpractical.com>
Date: Mon Oct 17 14:06:57 2016 -0400
Merge RT-Extension-AdminConditionsAndActions
Fixes #T159936
diff --git a/docs/conditions_and_actions.pod b/docs/conditions_and_actions.pod
new file mode 100644
index 0000000..7825dc5
--- /dev/null
+++ b/docs/conditions_and_actions.pod
@@ -0,0 +1,314 @@
+NAME
+ RT-Extension-AdminConditionsAndActions - Admin Conditions And Actions
+
+DESCRIPTION
+ A web UI for managing RT conditions and actions.
+
+RT VERSIONS
+ This extension is compatible with RT 4.0 and RT 4.2.
+
+INSTALLATION
+ perl Makefile.PL
+ make
+ make install
+ May need root permissions
+
+ Edit your /opt/rt4/etc/RT_SiteConfig.pm
+ If you are using RT 4.2 or greater, add this line:
+
+ Plugin('RT::Extension::AdminConditionsAndActions');
+
+ For RT 4.0, add this line:
+
+ Set(@Plugins, qw(RT::Extension::AdminConditionsAndActions));
+
+ or add RT::Extension::AdminConditionsAndActions to your existing
+ @Plugins line.
+
+ You can customize Condition/Action list format by config
+ %AdminSearchResultFormat, e.g.
+
+ Set(%AdminSearchResultFormat,
+ ...
+ Conditions =>
+ q{'<a href="__WebPath__/Admin/Conditions/Modify.html?&id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Conditions/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,'__Description__','__UsedBy__},
+ Actions =>
+ q{'<a href="__WebPath__/Admin/Actions/Modify.html?&id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Actions/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,'__Description__','__UsedBy__},
+ );
+
+ Clear your mason cache
+ rm -rf /opt/rt4/var/mason_data/obj
+
+ Restart your webserver
+
+USAGE
+ The core building blocks of scrips in RT are the conditions and actions
+ you select when configuring the scrip. A condition defines the criteria
+ for an action to run in the context of the current transaction. The
+ result is true or false: if true, the condition is satisfied and the
+ action runs, if false, the action is skipped. Actions define something
+ to be done when a condition is true and they can be anything you can
+ capture in code, either changing things in RT or calling out to other
+ systems, DBs, or APIs.
+
+ You can view all of the scrips that come standard with RT by going to
+ Tools > Global > Scrips (RT 4.0) or Admin > Global > Scrips (RT 4.2). In
+ the scrips list you'll see each has a condition and an action and these
+ are provided with the initial RT installation. You might also see
+ additional conditions and actions added by extensions or through a local
+ customization.
+
+ This extension provides a web UI to allow you to easily register your
+ own conditions and actions in RT, making it easier than ever to
+ customize RT for your specific needs.
+
+ User Defined Conditions and Actions
+ The simplest way to add a custom condition or action is to create a new
+ scrip and select "User Defined" as the Condition or Action. You can then
+ put your custom code right in the "User Defined" boxes on the bottom of
+ the scrip modification page.
+
+ However, you might prefer writing your condition or action in a module
+ with the code in a file. This allows you to track it in version control
+ and call it from other places like rt-crontool. The following sections
+ describe how to create these modules.
+
+ Custom Conditions
+ Let's assume you have a custom lifecycle with a status called 'review'
+ and you want an 'On Review Needed' condition so you can trigger actions
+ when a ticket is put in review status. You notice RT already has 'On
+ Resolve' and other similar conditions, so you look at the configuration
+ at Admin > Global > Conditions and click on 'On Resolve' (in RT 4.0,
+ select Tools > Global > Conditions.)
+
+ The condition has a Name, which is displayed in the Condition dropdown
+ when you create a scrip, and a Description to identify it. The Condition
+ Module is the RT module that executes the condition, in this case
+ StatusChange. You can find the code in
+ /opt/rt4/lib/RT/Condition/StatusChange.pm and view the documentation on
+ the Best Practical "documentation site". (Confirm your RT version when
+ checking the documentation.)
+
+ Parameters to Pass shows the actual parameter that is passed to the
+ module when this condition is executed. When you look at the module
+ documentation it makes sense when you see that StatusChange accepts a
+ valid status and returns true if the transaction is setting the status
+ to the provided value. Finally, Applicable Transaction Types lists the
+ transactions for which this condition will run, and in this case it's
+ Status transactions.
+
+ This is really close to what we might need for our 'On Review Needed' so
+ you can click the Copy Condition button to copy the current condition.
+ On the new condition page, you can update the Name and Description and
+ set the Parameters to Pass to 'review'. Then click save and you have
+ your new condition. You can now create a new scrip and select it from
+ the Condition dropdown.
+
+ Custom Condition Module
+ Now assume we have an additional requirement to check if a custom field
+ value 'Special' is selected when we check the review status. For this
+ one we'll need to write some code. To start, create a new file for your
+ new SpecialReviewNeeded module here:
+
+ /opt/rt4/local/lib/RT/Condition/SpecialReviewNeeded.pm
+
+ Creating it in the local directory will keep it safe when you apply RT
+ upgrades in the future.
+
+ The basics of a condition module are as follows:
+
+ package RT::Condition::SpecialReviewNeeded;
+
+ use strict;
+ use warnings;
+ use base 'RT::Condition';
+
+ sub IsApplicable {
+ my $self = shift;
+
+ # Your code here
+
+ return 1; # True if condition is true, false if not
+ }
+
+ 1; # Don't forget module needs this
+
+ IsApplicable is the method you will override from the RT::Condition base
+ class. The return value of this method, true or false, determines
+ whether the condition passes or not.
+
+ $self gives you access to the ticket object and transaction object via:
+
+ $self->TransactionObj
+ $self->TicketObj
+
+ These are your main hooks into the current ticket and transaction.
+
+ To check review status and the custom field value, we might add
+ something like this:
+
+ # Setting status to review?
+ return 0 unless $self->TransactionObj->Type eq 'Status'
+ and $self->TransactionObj->NewValue eq 'review';
+
+ # Is 'Special' set to Yes?
+ return 0 unless $self->TicketObj->FirstCustomFieldValue('Special') eq 'Yes';
+
+ return 1;
+
+ We've hardcoded review and Special here, but as with StatusChange, you
+ could pass a value from the Parameters to Pass field. You can access
+ this value by calling the Argument method.
+
+ my $arg = $self->Argument;
+
+ Using passed arguments can make your conditions and actions more general
+ and potentially reusable.
+
+ Once the file is created, return to the RT web UI and create a new
+ condition, possibly by editing On Review Needed and clicking Copy
+ Condition. You can name it Special Review Needed and set the Condition
+ Module to SpecialReviewNeeded.
+
+ Custom Actions
+ Once you have the correct condition you can now think about the action.
+ You want to send email to a group of people, so to start you look at
+ some of the existing actions on the action display page at Admin >
+ Global > Actions (in RT 4.0, Tools > Global > Actions). You find Notify
+ AdminCcs, which might be close. Taking a quick look you see it has a
+ Name and Description, like conditions, and the module it calls is
+ Notify, which can be found at /opt/rt4/lib/RT/Action/Notify.pm.
+
+ The Parameter to Pass is AdminCc, and if you look at other notification
+ actions you'll see many use Notify and just pass a different ticket
+ role.
+
+ Your reviewers aren't always AdminCcs on tickets, so you'd rather send a
+ notification to a group. You can create this new action using the
+ existing action module NotifyGroup. On the action list page, click
+ Create and add something like the following:
+
+ Name Notify Review Group
+ Description Send notification to the review group
+ Action Module NotifyGroup
+ Parameters to Pass Review Group
+
+ The 'Review Group' can be whatever your group name is. Then you can
+ build a template with some custom ticket information for reviewers and
+ set up a new scrip to send email to the review group whenever a ticket
+ status is set to review.
+
+ Custom Action Modules
+ As part of the request to add a condition to check for the 'Special'
+ custom field, we now want to route these special requests to the person
+ who handles them. This extra bit of functionality will require a module,
+ maybe called SetOwner. Create the new file in:
+
+ /local/lib/RT/Action/SetOwner.pm
+
+ The base action code looks like this:
+
+ package RT::Action::SetOwner;
+
+ use strict;
+ use warnings;
+ use base 'RT::Action';
+
+ sub Prepare {
+ my $self = shift;
+
+ # Your code here
+
+ return 1; # True if Commit should run, false if not
+ }
+
+ sub Commit {
+ my $self = shift;
+
+ # Your code here
+
+ return 1; # True if action was successful
+ }
+
+ 1; # Don't forget module needs this
+
+ Actions have two methods you can override. The Prepare method provides
+ you with a chance to make sure the action should actually run. If
+ Prepare returns false, Commit will not run. You'll typically handle this
+ in your condition, in which case you can just omit Prepare from your
+ action. However, when you have a condition that covers a common general
+ case, but you want to check one extra criteria for a particular action,
+ the Prepare method can be helpful. In our example, you might choose to
+ keep just the On Review Needed condition and add the check for the
+ 'Special' custom field to the Prepare method.
+
+ Commit is where you do the actual work of the action. It should return
+ true on success. On failure, you can use RT::Logger to write errors or
+ debugging information to RTs logs so you can track down the problem.
+
+ In actions, $self gives you access to the transaction and ticket
+ objects, just like conditions, via:
+
+ $self->TransactionObj
+ $self->TicketObj
+
+ For our SetOwner action, we don't need Prepare and can add the following
+ to Commit:
+
+ my $user = RT::User->new(RT->SystemUser);
+ my ($ret, $msg) = $user->Load($self->Argument);
+ RT::Logger->error('Unable to load user: '
+ . $self->Argument . " $msg") unless $ret;
+
+ $self->TicketObj->SetOwner($user->Id);
+ return 1;
+
+ The Argument method returns the value set for Parameters to Pass in the
+ action configuration. This example expects the argument to be the
+ username of an RT user.
+
+ Now you can create the new action in RT. Go to the action page, click
+ Create, and enter the following:
+
+ Name Set Owner
+ Description Set owner
+ Action Module SetOwner
+ Parameters to Pass reviewer_username
+
+ Click save and the new action will be available when creating scrips.
+
+ Note that actions you perform in scrips can themselves create new
+ transactions, as is the case with SetOwner. When this action runs, the
+ set owner transaction will fire the default On Owner Change Notify Owner
+ scrip, if it is enabled.
+
+ADDITIONAL INFORMATION
+ When writing actions and conditions, it's helpful to look at the actions
+ and conditions provided with RT. You can find more information about the
+ methods available from ticket and transaction objects in your RT
+ distribution and on the "Best Practical website"
+ <http://docs.bestpractical.com>.
+
+AUTHOR
+ Best Practical Solutions, LLC <modules at bestpractical.com>
+
+BUGS
+ All bugs should be reported via email to
+
+ L<bug-RT-Extension-AdminConditionsAndActions at rt.cpan.org|mailto:bug-RT-Extension-AdminConditionsAndActions at rt.cpan.org>
+
+ or via the web at
+
+ L<rt.cpan.org|http://rt.cpan.org/Public/Dist/Display.html?Name=RT-Extension-AdminConditionsAndActions>.
+
+LICENSE AND COPYRIGHT
+ This software is Copyright (c) 2014 by Best Practical Solutions
+
+ This is free software, licensed under:
+
+ The GNU General Public License, Version 2, June 1991
+
diff --git a/lib/RT/ScripAction.pm b/lib/RT/ScripAction.pm
index d0c16d7..00bce54 100644
--- a/lib/RT/ScripAction.pm
+++ b/lib/RT/ScripAction.pm
@@ -101,11 +101,30 @@ sub Create {
return($self->SUPER::Create(@_));
}
-sub Delete {
+sub Delete {
my $self = shift;
+
+ unless ( $self->CurrentUser->HasRight( Object => RT->System, Right => 'ModifyScrips' ) ) {
+ return ( 0, $self->loc('Permission Denied') );
+ }
+
+ my $scrips = RT::Scrips->new( RT->SystemUser );
+ $scrips->Limit( FIELD => 'ScripAction', VALUE => $self->id );
+ if ( $scrips->Count ) {
+ return ( 0, $self->loc('Action is in use') );
+ }
+
return (0, "ScripAction->Delete not implemented");
}
+sub UsedBy {
+ my $self = shift;
+
+ my $scrips = RT::Scrips->new( $self->CurrentUser );
+ $scrips->Limit( FIELD => 'ScripAction', VALUE => $self->Id );
+ return $scrips;
+}
+
=head2 Load IDENTIFIER
diff --git a/lib/RT/ScripCondition.pm b/lib/RT/ScripCondition.pm
index 71aebf4..37e3036 100644
--- a/lib/RT/ScripCondition.pm
+++ b/lib/RT/ScripCondition.pm
@@ -112,11 +112,30 @@ No API available for deleting things just yet.
=cut
-sub Delete {
+sub Delete {
my $self = shift;
+
+ unless ( $self->CurrentUser->HasRight( Object => RT->System, Right => 'ModifyScrips' ) ) {
+ return ( 0, $self->loc('Permission Denied') );
+ }
+
+ my $scrips = RT::Scrips->new( RT->SystemUser );
+ $scrips->Limit( FIELD => 'ScripCondition', VALUE => $self->id );
+ if ( $scrips->Count ) {
+ return ( 0, $self->loc('Condition is in use') );
+ }
+
return(0, $self->loc('Unimplemented'));
}
+sub UsedBy {
+ my $self = shift;
+
+ my $scrips = RT::Scrips->new( $self->CurrentUser );
+ $scrips->Limit( FIELD => 'ScripCondition', VALUE => $self->Id );
+ return $scrips;
+}
+
=head2 Load IDENTIFIER
diff --git a/share/html/Admin/Actions/Create.html b/share/html/Admin/Actions/Create.html
new file mode 100644
index 0000000..fe4fa1a
--- /dev/null
+++ b/share/html/Admin/Actions/Create.html
@@ -0,0 +1,102 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => "Create a global action" &>
+<& /Elements/Tabs &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Create.html" id="CreateAction" name="CreateAction">
+
+<&| /Widgets/TitleBox, title => loc('Basics') &>
+<table>
+<& Elements/EditBasics, %ARGS, Action => $action, &>
+</table>
+</&>
+
+<& /Elements/Submit,
+ Label => loc('Create'),
+ Name => 'Create',
+&>
+
+</form>
+<%ARGS>
+$Create => undef
+$id => undef
+</%ARGS>
+<%INIT>
+my @results;
+
+if ( $id ) {
+ my $action = RT::ScripAction->new( $session{'CurrentUser'} );
+ $action->Load( $id );
+ if ( $action ) {
+ for my $item ( qw/Name Description ExecModule Argument/ ) {
+ $ARGS{$item} ||= $action->$item;
+ }
+ }
+}
+
+my $action = RT::ScripAction->new( $session{'CurrentUser'} );
+if ( $Create ) {
+ my ($status, $msg) = $action->Create(
+ Name => $ARGS{"Name"},
+ Description => $ARGS{"Description"},
+ ExecModule => $ARGS{"ExecModule"},
+ Argument => $ARGS{"Argument"},
+ );
+
+ MaybeRedirectForResults(
+ Force => 1,
+ Actions => [ $msg ],
+ Path => 'Admin/Actions/Modify.html',
+ Arguments => { id => $action->id },
+ ) if $status;
+
+ push @results, $msg;
+}
+
+</%INIT>
diff --git a/share/html/Admin/Actions/Display.html b/share/html/Admin/Actions/Display.html
new file mode 100644
index 0000000..ad8f038
--- /dev/null
+++ b/share/html/Admin/Actions/Display.html
@@ -0,0 +1,74 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc("Display action #[_1]", $id) &>
+<& /Elements/Tabs &>
+
+<&| /Widgets/TitleBox, title => loc('Basics') &>
+<table>
+<& Elements/ShowBasics, %ARGS, Action => $action, &>
+</table>
+</&>
+<form>
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+<& /Elements/Submit, Label => loc('Copy Action'), Name => 'Copy' &>
+</form>
+
+<%ARGS>
+$id => undef
+$Copy => undef
+</%ARGS>
+<%INIT>
+
+if ( $Copy ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Admin/Actions/Create.html?id=$id" );
+}
+
+my $action = RT::ScripAction->new( $session{'CurrentUser'} );
+$action->Load( $id );
+Abort(loc("Couldn't load action #[_1]", $id)) unless $action->id;
+</%INIT>
diff --git a/share/html/Admin/Actions/Elements/EditBasics b/share/html/Admin/Actions/Elements/EditBasics
new file mode 100644
index 0000000..bcbb9bb
--- /dev/null
+++ b/share/html/Admin/Actions/Elements/EditBasics
@@ -0,0 +1,78 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<tr>
+ <td class="label"><&|/l&>Name</&>:</td>
+ <td class="value">
+ <input name="Name" size="60" value="<% $ARGS{"Name"} || $Action->Name || '' %>" />
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Description</&>:</td>
+ <td class="value">
+ <input name="Description" size="60" value="<% $ARGS{"Description"} || $Action->Description || '' %>" />
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Action Module</&>:</td>
+ <td class="value">
+ <input name="ExecModule" size="60" value="<% $ARGS{"ExecModule"} || $Action->ExecModule || ''%>" />
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Parameters to Pass</&>:</td>
+ <td class="value">
+ <input name="Argument" size="60" value="<% $ARGS{"Argument"} || $Action->Argument || '' %>"/>
+ </td>
+</tr>
+
+<%ARGS>
+$Action
+</%ARGS>
diff --git a/share/html/Admin/Actions/Elements/ShowBasics b/share/html/Admin/Actions/Elements/ShowBasics
new file mode 100644
index 0000000..1ec2d35
--- /dev/null
+++ b/share/html/Admin/Actions/Elements/ShowBasics
@@ -0,0 +1,78 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<tr>
+ <td class="label"><&|/l&>Name</&>:</td>
+ <td class="value">
+ <% $ARGS{"Name"} || $Action->Name || '' %>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Description</&>:</td>
+ <td class="value">
+ <% $ARGS{"Description"} || $Action->Description || '' %>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Action Module</&>:</td>
+ <td class="value">
+ <% $ARGS{"ExecModule"} || $Action->ExecModule || ''%>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Parameters to Pass</&>:</td>
+ <td class="value">
+ <% $ARGS{"Argument"} || $Action->Argument || '' %>
+ </td>
+</tr>
+
+<%ARGS>
+$Action
+</%ARGS>
diff --git a/share/html/Admin/Actions/Modify.html b/share/html/Admin/Actions/Modify.html
new file mode 100644
index 0000000..675c700
--- /dev/null
+++ b/share/html/Admin/Actions/Modify.html
@@ -0,0 +1,101 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc("Modify action #[_1]", $id) &>
+<& /Elements/Tabs &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Modify.html" id="ModifyAction" name="ModifyAction">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+<&| /Widgets/TitleBox, title => loc('Basics') &>
+<table>
+<& Elements/EditBasics, %ARGS, Action => $action, &>
+</table>
+</&>
+<& /Elements/Submit, Label => loc('Copy Action'), Name => 'Copy' &>
+
+<& /Elements/Submit, Label => loc('Save Changes'), Name => 'Update', Reset => 1 &>
+
+
+</form>
+<%ARGS>
+$id => undef
+$Update => undef
+$Copy => undef
+</%ARGS>
+<%INIT>
+
+my $action = RT::ScripAction->new( $session{'CurrentUser'} );
+$action->Load( $id );
+Abort(loc("Couldn't load action #[_1]", $id)) unless $action->id;
+
+if ( $action->Creator == RT->SystemUser->id ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Admin/Actions/Display.html?id=$id" );
+}
+
+my @results;
+if ( $Update ) {
+ my @attribs = qw(
+ Name Description
+ ExecModule Argument
+ );
+ @results = UpdateRecordObject(
+ AttributesRef => \@attribs,
+ Object => $action,
+ ARGSRef => \%ARGS
+ );
+ MaybeRedirectForResults(
+ Actions => \@results,
+ Arguments => { id => $action->id },
+ );
+}
+elsif ( $Copy ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Admin/Actions/Create.html?id=$id" );
+}
+
+</%INIT>
diff --git a/share/html/Admin/Actions/autohandler b/share/html/Admin/Actions/autohandler
new file mode 100644
index 0000000..0351cca
--- /dev/null
+++ b/share/html/Admin/Actions/autohandler
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+return $m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'ShowScrips',
+ Object => $RT::System,
+) && $session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'ModifyScrips',
+ Object => $RT::System,
+);
+
+$m->clear_and_abort(403);
+</%init>
diff --git a/share/html/Admin/Conditions/Create.html b/share/html/Admin/Conditions/Create.html
new file mode 100644
index 0000000..b5865df
--- /dev/null
+++ b/share/html/Admin/Conditions/Create.html
@@ -0,0 +1,103 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => "Create a global condition" &>
+<& /Elements/Tabs &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Create.html" id="CreateCondition" name="CreateCondition">
+
+<&| /Widgets/TitleBox, title => loc('Basics') &>
+<table>
+<& Elements/EditBasics, %ARGS, Condition => $condition, &>
+</table>
+</&>
+
+<& /Elements/Submit,
+ Label => loc('Create'),
+ Name => 'Create',
+&>
+
+</form>
+<%ARGS>
+$Create => undef
+$id => undef
+</%ARGS>
+<%INIT>
+my @results;
+
+if ( $id ) {
+ my $condition = RT::ScripCondition->new( $session{'CurrentUser'} );
+ $condition->Load( $id );
+ if ( $condition ) {
+ for my $item ( qw/Name Description ExecModule Argument ApplicableTransTypes/ ) {
+ $ARGS{$item} ||= $condition->$item;
+ }
+ }
+}
+
+my $condition = RT::ScripCondition->new( $session{'CurrentUser'} );
+if ( $Create ) {
+ my ($status, $msg) = $condition->Create(
+ Name => $ARGS{"Name"},
+ Description => $ARGS{"Description"},
+ ExecModule => $ARGS{"ExecModule"},
+ Argument => $ARGS{"Argument"},
+ ApplicableTransTypes => $ARGS{"ApplicableTransTypes"},
+ );
+
+ MaybeRedirectForResults(
+ Force => 1,
+ Actions => [ $msg ],
+ Path => 'Admin/Conditions/Modify.html',
+ Arguments => { id => $condition->id },
+ ) if $status;
+
+ push @results, $msg;
+}
+
+</%INIT>
diff --git a/share/html/Admin/Conditions/Display.html b/share/html/Admin/Conditions/Display.html
new file mode 100644
index 0000000..f359b5d
--- /dev/null
+++ b/share/html/Admin/Conditions/Display.html
@@ -0,0 +1,72 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc("Display action #[_1]", $id) &>
+<& /Elements/Tabs &>
+
+<&| /Widgets/TitleBox, title => loc('Basics') &>
+<table>
+<& Elements/ShowBasics, %ARGS, Condition => $condition, &>
+</table>
+</&>
+<form>
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+<& /Elements/Submit, Label => loc('Copy Condition'), Name => 'Copy' &>
+</form>
+<%ARGS>
+$id => undef
+$Copy => undef
+</%ARGS>
+<%INIT>
+if ( $Copy ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Admin/Conditions/Create.html?id=$id" );
+}
+
+my $condition = RT::ScripCondition->new( $session{'CurrentUser'} );
+$condition->Load( $id );
+Abort(loc("Couldn't load condition #[_1]", $id)) unless $condition->id;
+</%INIT>
diff --git a/share/html/Admin/Conditions/Elements/EditBasics b/share/html/Admin/Conditions/Elements/EditBasics
new file mode 100644
index 0000000..11b0c2d
--- /dev/null
+++ b/share/html/Admin/Conditions/Elements/EditBasics
@@ -0,0 +1,85 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<tr>
+ <td class="label"><&|/l&>Name</&>:</td>
+ <td class="value">
+ <input name="Name" size="60" value="<% $ARGS{"Name"} || $Condition->Name || '' %>" />
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Description</&>:</td>
+ <td class="value">
+ <input name="Description" size="60" value="<% $ARGS{"Description"} || $Condition->Description || '' %>" />
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Condition Module</&>:</td>
+ <td class="value">
+ <input name="ExecModule" size="60" value="<% $ARGS{"ExecModule"} || $Condition->ExecModule || ''%>" />
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Parameters to Pass</&>:</td>
+ <td class="value">
+ <input name="Argument" size="60" value="<% $ARGS{"Argument"} || $Condition->Argument || '' %>"/>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Applicable Transaction Types</&>:</td>
+ <td class="value">
+ <input name="ApplicableTransTypes" size="60" value="<% $ARGS{"ApplicableTransTypes"} || $Condition->ApplicableTransTypes || '' %>" />
+ </td>
+</tr>
+
+<%ARGS>
+$Condition
+</%ARGS>
diff --git a/share/html/Admin/Conditions/Elements/ShowBasics b/share/html/Admin/Conditions/Elements/ShowBasics
new file mode 100644
index 0000000..3f0cb34
--- /dev/null
+++ b/share/html/Admin/Conditions/Elements/ShowBasics
@@ -0,0 +1,85 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<tr>
+ <td class="label"><&|/l&>Name</&>:</td>
+ <td class="value">
+ <% $ARGS{"Name"} || $Condition->Name || '' %>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Description</&>:</td>
+ <td class="value">
+ <% $ARGS{"Description"} || $Condition->Description || '' %>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Condition Module</&>:</td>
+ <td class="value">
+ <% $ARGS{"ExecModule"} || $Condition->ExecModule || ''%>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Parameters to Pass</&>:</td>
+ <td class="value">
+ <% $ARGS{"Argument"} || $Condition->Argument || '' %>
+ </td>
+</tr>
+
+<tr>
+ <td class="label"><&|/l&>Applicable Transaction Types</&>:</td>
+ <td class="value">
+ <% $ARGS{"ApplicableTransTypes"} || $Condition->ApplicableTransTypes || '' %>
+ </td>
+</tr>
+
+<%ARGS>
+$Condition
+</%ARGS>
diff --git a/share/html/Admin/Conditions/Modify.html b/share/html/Admin/Conditions/Modify.html
new file mode 100644
index 0000000..e850595
--- /dev/null
+++ b/share/html/Admin/Conditions/Modify.html
@@ -0,0 +1,100 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => loc("Modify condition #[_1]", $id) &>
+<& /Elements/Tabs &>
+<& /Elements/ListActions, actions => \@results &>
+
+<form method="post" action="Modify.html" id="ModifyCondition" name="ModifyCondition">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+<&| /Widgets/TitleBox, title => loc('Basics') &>
+<table>
+<& Elements/EditBasics, %ARGS, Condition => $condition, &>
+</table>
+</&>
+<& /Elements/Submit, Label => loc('Copy Condition'), Name => 'Copy' &>
+
+<& /Elements/Submit, Label => loc('Save Changes'), Name => 'Update', Reset => 1 &>
+
+</form>
+<%ARGS>
+$id => undef
+$Update => undef
+$Copy => undef
+</%ARGS>
+<%INIT>
+
+my $condition = RT::ScripCondition->new( $session{'CurrentUser'} );
+$condition->Load( $id );
+Abort(loc("Couldn't load condition #[_1]", $id)) unless $condition->id;
+
+if ( $condition->Creator == RT->SystemUser->id ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Admin/Conditions/Display.html?id=$id" );
+}
+
+my @results;
+if ( $Update ) {
+ my @attribs = qw(
+ Name Description
+ ExecModule Argument ApplicableTransTypes
+ );
+ @results = UpdateRecordObject(
+ AttributesRef => \@attribs,
+ Object => $condition,
+ ARGSRef => \%ARGS
+ );
+ MaybeRedirectForResults(
+ Actions => \@results,
+ Arguments => { id => $condition->id },
+ );
+}
+elsif ( $Copy ) {
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Admin/Conditions/Create.html?id=$id" );
+}
+
+</%INIT>
diff --git a/share/html/Admin/Conditions/autohandler b/share/html/Admin/Conditions/autohandler
new file mode 100644
index 0000000..c45ea0a
--- /dev/null
+++ b/share/html/Admin/Conditions/autohandler
@@ -0,0 +1,55 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%init>
+return $m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'ModifyScrips',
+ Object => $RT::System,
+);
+
+$m->clear_and_abort(403);
+</%init>
diff --git a/share/html/Admin/Elements/EditActions b/share/html/Admin/Elements/EditActions
new file mode 100644
index 0000000..ebbd4d7
--- /dev/null
+++ b/share/html/Admin/Elements/EditActions
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@actions &>
+
+<form action="Actions.html" method="post">
+
+<h2><&|/l&>System Actions</&></h2>
+<div class="admin-hint"></div>
+% if ( $system_actions->Count ){
+<& /Elements/CollectionList, %common_applied_args, DisplayFormat => $Format, Collection => $system_actions &>
+% } else {
+<p><i><&|/l&>Click Create to add a new custom action.</&></i></p>
+% }
+
+<h2><&|/l&>Custom Actions</&></h2>
+<div class="admin-hint"></div>
+% if ( $actions->Count ){
+<& /Elements/CollectionList, %common_applied_args, Collection => $actions &>
+% } else {
+<p><i><&|/l&>Click Create to add a new custom action.</&></i></p>
+% }
+
+<& /Elements/Submit,
+ Name => 'RemoveActions',
+ Caption => loc("Delete selected actions"),
+ Label => loc("Delete"),
+&>
+
+</form>
+
+<%init>
+unless ( $session{CurrentUser}->HasRight( Object => RT->System, Right => 'ShowScrips' )
+ && $session{CurrentUser}->HasRight( Object => RT->System, Right => 'ModifyScrips' ) )
+{
+ Abort( loc('You must have ShowScrips/ModifyScrips rights to work with actions.') );
+}
+
+my (@actions);
+
+my $system_actions = RT::ScripActions->new($session{'CurrentUser'});
+$system_actions->Limit( FIELD => 'Creator', VALUE => RT->SystemUser->id );
+
+my $actions = RT::ScripActions->new($session{'CurrentUser'});
+$actions->Limit( FIELD => 'Creator', VALUE => RT->SystemUser->id, OPERATOR => '!=' );
+
+my $Format = RT->Config->Get('AdminSearchResultFormat')->{'Actions'}
+ || q{'<a href="__WebPath__/Admin/Actions/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ . q{,'<a href="__WebPath__/Admin/Actions/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ . q{,'__Description__','__UsedBy__};
+
+my $DisplayFormat = "__CheckBox.{RemoveAction}__, $Format";
+
+my %common_applied_args = (
+ %ARGS,
+ Format => $Format,
+ DisplayFormat => $DisplayFormat,
+ Rows => 0,
+ Page => 1,
+ AllowSorting => 1,
+);
+
+if ( $RemoveActions ) {
+ foreach my $id ( @RemoveAction ) {
+ my $action = RT::ScripAction->new( $session{'CurrentUser'} );
+ $action->Load( $id );
+ next unless $action->id;
+
+ my ($status, $msg) = $action->Delete();
+ push @actions, $msg;
+ }
+}
+
+</%init>
+
+<%ARGS>
+ at RemoveAction => ()
+$RemoveActions => undef
+</%ARGS>
diff --git a/share/html/Admin/Elements/EditConditions b/share/html/Admin/Elements/EditConditions
new file mode 100644
index 0000000..6cce7d5
--- /dev/null
+++ b/share/html/Admin/Elements/EditConditions
@@ -0,0 +1,123 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/ListActions, actions => \@actions &>
+
+<form action="Conditions.html" method="post">
+
+<h2><&|/l&>System Conditions</&></h2>
+<div class="admin-hint"></div>
+% if ( $system_conditions->Count ){
+<& /Elements/CollectionList, %common_applied_args, DisplayFormat => $Format, Collection => $system_conditions &>
+% } else {
+<p><i><&|/l&>Click Create to add a new custom condition.</&></i></p>
+% }
+
+<h2><&|/l&>Custom Conditions</&></h2>
+<div class="admin-hint"></div>
+% if ( $conditions->Count ){
+<& /Elements/CollectionList, %common_applied_args, Collection => $conditions &>
+% } else {
+<p><i><&|/l&>Click Create to add a new custom condition.</&></i></p>
+% }
+
+<& /Elements/Submit,
+ Name => 'RemoveConditions',
+ Caption => loc("Delete selected conditions"),
+ Label => loc("Delete"),
+&>
+
+</form>
+
+<%init>
+unless ( $session{CurrentUser}->HasRight( Object => RT->System, Right => 'ShowScrips' )
+ && $session{CurrentUser}->HasRight( Object => RT->System, Right => 'ModifyScrips' ) )
+{
+ Abort( loc('You must have ShowScrips/ModifyScrips rights to work with conditions.') );
+}
+
+my (@actions);
+
+my $system_conditions = RT::ScripConditions->new($session{'CurrentUser'});
+$system_conditions->Limit( FIELD => 'Creator', VALUE => RT->SystemUser->id );
+
+my $conditions = RT::ScripConditions->new($session{'CurrentUser'});
+$conditions->Limit( FIELD => 'Creator', VALUE => RT->SystemUser->id, OPERATOR => '!=' );
+
+my $Format = RT->Config->Get('AdminSearchResultFormat')->{'Conditions'}
+ || q{'<a href="__WebPath__/Admin/Conditions/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ . q{,'<a href="__WebPath__/Admin/Conditions/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ . q{,'__Description__','__UsedBy__};
+
+my $DisplayFormat = "__CheckBox.{RemoveCondition}__, $Format";
+
+my %common_applied_args = (
+ %ARGS,
+ Format => $Format,
+ DisplayFormat => $DisplayFormat,
+ Rows => 0,
+ Page => 1,
+ AllowSorting => 1,
+);
+
+if ( $RemoveConditions ) {
+ foreach my $id ( @RemoveCondition ) {
+ my $condition = RT::ScripCondition->new( $session{'CurrentUser'} );
+ $condition->Load( $id );
+ next unless $condition->id;
+
+ my ($status, $msg) = $condition->Delete();
+ push @actions, $msg;
+ }
+}
+
+</%init>
+
+<%ARGS>
+ at RemoveCondition => ()
+$RemoveConditions => undef
+</%ARGS>
diff --git a/share/html/Admin/Global/Actions.html b/share/html/Admin/Global/Actions.html
new file mode 100644
index 0000000..c681e06
--- /dev/null
+++ b/share/html/Admin/Global/Actions.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Elements/Tabs &>
+<& /Admin/Elements/EditActions, title => $title, id => $id, %ARGS &>
+</form>
+<%init>
+my $title = loc("Actions");
+my (@actions);
+</%init>
+<%ARGS>
+$id => 0
+</%ARGS>
diff --git a/share/html/Admin/Global/Conditions.html b/share/html/Admin/Global/Conditions.html
new file mode 100644
index 0000000..84da8a5
--- /dev/null
+++ b/share/html/Admin/Global/Conditions.html
@@ -0,0 +1,58 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Admin/Elements/Header, Title => $title &>
+<& /Elements/Tabs &>
+<& /Admin/Elements/EditConditions, title => $title, %ARGS &>
+</form>
+<%init>
+my $title = loc("Conditions");
+my (@actions);
+</%init>
+<%ARGS>
+$id => 0
+</%ARGS>
diff --git a/share/html/Elements/RT__ScripAction/ColumnMap b/share/html/Elements/RT__ScripAction/ColumnMap
new file mode 100644
index 0000000..17188b5
--- /dev/null
+++ b/share/html/Elements/RT__ScripAction/ColumnMap
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+$GenericMap => {}
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ Name => {
+ title => 'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name() },
+ },
+ Description => {
+ title => 'Description', # loc
+ attribute => 'Description',
+ value => sub { return $_[0]->Description() },
+ },
+ UsedBy => {
+ title => 'Used by scrips', # loc
+ value => sub {
+ my @res;
+ my $scrips = $_[0]->UsedBy;
+ while ( my $scrip = $scrips->Next ) {
+ push @res, ', ' if @res;
+ push @res, \'<a href="', RT->Config->Get('WebPath'), '/Admin/Scrips/Modify.html';
+ push @res, '?id='. $scrip->id;
+ push @res, \'" title="', $scrip->Description, \'">', $scrip->id, \'</a>';
+ }
+ return @res;
+ },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
diff --git a/share/html/Elements/RT__ScripCondition/ColumnMap b/share/html/Elements/RT__ScripCondition/ColumnMap
new file mode 100644
index 0000000..17188b5
--- /dev/null
+++ b/share/html/Elements/RT__ScripCondition/ColumnMap
@@ -0,0 +1,91 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+$GenericMap => {}
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+ Name => {
+ title => 'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name() },
+ },
+ Description => {
+ title => 'Description', # loc
+ attribute => 'Description',
+ value => sub { return $_[0]->Description() },
+ },
+ UsedBy => {
+ title => 'Used by scrips', # loc
+ value => sub {
+ my @res;
+ my $scrips = $_[0]->UsedBy;
+ while ( my $scrip = $scrips->Next ) {
+ push @res, ', ' if @res;
+ push @res, \'<a href="', RT->Config->Get('WebPath'), '/Admin/Scrips/Modify.html';
+ push @res, '?id='. $scrip->id;
+ push @res, \'" title="', $scrip->Description, \'">', $scrip->id, \'</a>';
+ }
+ return @res;
+ },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
+</%INIT>
diff --git a/share/html/Elements/Tabs b/share/html/Elements/Tabs
index e672e3b..de4a05e 100644
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@ -1107,9 +1107,46 @@ my $build_main_nav = sub {
PageMenu()->child( edit => title => loc('Edit'), path => '/Prefs/MyRT.html' );
}
+ AdminConditionsAndActions();
+
$m->callback( CallbackName => 'Privileged', Path => $request_path, ARGSRef => \%ARGS );
};
+sub AdminConditionsAndActions {
+ return unless $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'ModifyScrips' );
+
+ my $admin = Menu->child('admin') || Menu->child('tools')->child('config');
+ my $admin_global = $admin->child('global');
+
+ my $conditions = $admin_global->child(
+ conditions => title => loc('Conditions'),
+ description => loc('Edit system conditions'),
+ path => '/Admin/Global/Conditions.html',
+ );
+ $conditions->child( select => title => loc('Select'), path => "/Admin/Global/Conditions.html" );
+ $conditions->child( create => title => loc('Create'), path => "/Admin/Conditions/Create.html" );
+
+ my $request_path = $HTML::Mason::Commands::r->path_info;
+ if ( $request_path =~ qr{^/Admin(?:/Global)?/Conditions} ) {
+ my $tabs = PageMenu();
+ $tabs->child( select => title => loc('Select'), path => "/Admin/Global/Conditions.html" );
+ $tabs->child( create => title => loc('Create'), path => "/Admin/Conditions/Create.html" );
+ }
+
+ my $actions = $admin_global->child(
+ actions => title => loc('Actions'),
+ description => loc('Edit system actions'),
+ path => '/Admin/Global/Actions.html',
+ );
+ $actions->child( select => title => loc('Select'), path => "/Admin/Global/Actions.html" );
+ $actions->child( create => title => loc('Create'), path => "/Admin/Actions/Create.html" );
+ if ( $request_path =~ qr{^/Admin(?:/Global)?/Actions} ) {
+ my $tabs = PageMenu();
+ $tabs->child( select => title => loc('Select'), path => "/Admin/Global/Actions.html" );
+ $tabs->child( create => title => loc('Create'), path => "/Admin/Actions/Create.html" );
+ }
+}
+
my $build_selfservice_nav = sub {
my $queues = RT::Queues->new( $session{'CurrentUser'} );
$queues->UnLimit;
-----------------------------------------------------------------------
More information about the rt-commit
mailing list