summaryrefslogtreecommitdiff
path: root/rt/lib/RT/Scrip_Overlay.pm
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/RT/Scrip_Overlay.pm')
-rw-r--r--rt/lib/RT/Scrip_Overlay.pm592
1 files changed, 0 insertions, 592 deletions
diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm
deleted file mode 100644
index b5beb3434..000000000
--- a/rt/lib/RT/Scrip_Overlay.pm
+++ /dev/null
@@ -1,592 +0,0 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-# <jesse@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 }}}
-
-=head1 NAME
-
- RT::Scrip - an RT Scrip object
-
-=head1 SYNOPSIS
-
- use RT::Scrip;
-
-=head1 DESCRIPTION
-
-
-=head1 METHODS
-
-
-=cut
-
-
-package RT::Scrip;
-
-use strict;
-no warnings qw(redefine);
-
-# {{{ sub Create
-
-=head2 Create
-
-Creates a new entry in the Scrips table. Takes a paramhash with:
-
- Queue => 0,
- Description => undef,
- Template => undef,
- ScripAction => undef,
- ScripCondition => undef,
- CustomPrepareCode => undef,
- CustomCommitCode => undef,
- CustomIsApplicableCode => undef,
-
-
-
-
-Returns (retval, msg);
-retval is 0 for failure or scrip id. msg is a textual description of what happened.
-
-=cut
-
-sub Create {
- my $self = shift;
- my %args = (
- Queue => 0,
- Template => 0, # name or id
- ScripAction => 0, # name or id
- ScripCondition => 0, # name or id
- Stage => 'TransactionCreate',
- Description => undef,
- CustomPrepareCode => undef,
- CustomCommitCode => undef,
- CustomIsApplicableCode => undef,
- ConditionRules => undef,
- ActionRules => undef,
- @_
- );
-
- unless ( $args{'Queue'} ) {
- unless ( $self->CurrentUser->HasRight( Object => $RT::System,
- Right => 'ModifyScrips' ) )
- {
- return ( 0, $self->loc('Permission Denied') );
- }
- $args{'Queue'} = 0; # avoid undef sneaking in
- }
- else {
- my $QueueObj = RT::Queue->new( $self->CurrentUser );
- $QueueObj->Load( $args{'Queue'} );
- unless ( $QueueObj->id ) {
- return ( 0, $self->loc('Invalid queue') );
- }
- unless ( $QueueObj->CurrentUserHasRight('ModifyScrips') ) {
- return ( 0, $self->loc('Permission Denied') );
- }
- $args{'Queue'} = $QueueObj->id;
- }
-
- #TODO +++ validate input
-
- require RT::ScripAction;
- return ( 0, $self->loc("Action is mandatory argument") )
- unless $args{'ScripAction'};
- my $action = RT::ScripAction->new( $self->CurrentUser );
- $action->Load( $args{'ScripAction'} );
- return ( 0, $self->loc( "Action '[_1]' not found", $args{'ScripAction'} ) )
- unless $action->Id;
-
- require RT::Template;
- return ( 0, $self->loc("Template is mandatory argument") )
- unless $args{'Template'};
- my $template = RT::Template->new( $self->CurrentUser );
- $template->Load( $args{'Template'} );
- return ( 0, $self->loc( "Template '[_1]' not found", $args{'Template'} ) )
- unless $template->Id;
-
- require RT::ScripCondition;
- return ( 0, $self->loc("Condition is mandatory argument") )
- unless $args{'ScripCondition'};
- my $condition = RT::ScripCondition->new( $self->CurrentUser );
- $condition->Load( $args{'ScripCondition'} );
- return ( 0, $self->loc( "Condition '[_1]' not found", $args{'ScripCondition'} ) )
- unless $condition->Id;
-
- my ( $id, $msg ) = $self->SUPER::Create(
- Queue => $args{'Queue'},
- Template => $template->Id,
- ScripCondition => $condition->id,
- Stage => $args{'Stage'},
- ScripAction => $action->Id,
- Description => $args{'Description'},
- CustomPrepareCode => $args{'CustomPrepareCode'},
- CustomCommitCode => $args{'CustomCommitCode'},
- CustomIsApplicableCode => $args{'CustomIsApplicableCode'},
- ConditionRules => $args{'ConditionRules'},
- ActionRules => $args{'ActionRules'},
- );
- if ( $id ) {
- return ( $id, $self->loc('Scrip Created') );
- }
- else {
- return ( $id, $msg );
- }
-}
-
-# }}}
-
-# {{{ sub Delete
-
-=head2 Delete
-
-Delete this object
-
-=cut
-
-sub Delete {
- my $self = shift;
-
- unless ( $self->CurrentUserHasRight('ModifyScrips') ) {
- return ( 0, $self->loc('Permission Denied') );
- }
-
- return ( $self->SUPER::Delete(@_) );
-}
-
-# }}}
-
-# {{{ sub QueueObj
-
-=head2 QueueObj
-
-Retuns an RT::Queue object with this Scrip\'s queue
-
-=cut
-
-sub QueueObj {
- my $self = shift;
-
- if ( !$self->{'QueueObj'} ) {
- require RT::Queue;
- $self->{'QueueObj'} = RT::Queue->new( $self->CurrentUser );
- $self->{'QueueObj'}->Load( $self->__Value('Queue') );
- }
- return ( $self->{'QueueObj'} );
-}
-
-# }}}
-
-# {{{ sub ActionObj
-
-=head2 ActionObj
-
-Retuns an RT::Action object with this Scrip\'s Action
-
-=cut
-
-sub ActionObj {
- my $self = shift;
-
- unless ( defined $self->{'ScripActionObj'} ) {
- require RT::ScripAction;
-
- $self->{'ScripActionObj'} = RT::ScripAction->new( $self->CurrentUser );
-
- #TODO: why are we loading Actions with templates like this.
- # two separate methods might make more sense
- $self->{'ScripActionObj'}->Load( $self->ScripAction, $self->Template );
- }
- return ( $self->{'ScripActionObj'} );
-}
-
-# }}}
-
-# {{{ sub ConditionObj
-
-=head2 ConditionObj
-
-Retuns an L<RT::ScripCondition> object with this Scrip's IsApplicable
-
-=cut
-
-sub ConditionObj {
- my $self = shift;
-
- my $res = RT::ScripCondition->new( $self->CurrentUser );
- $res->Load( $self->ScripCondition );
- return $res;
-}
-
-# }}}
-
-=head2 LoadModules
-
-Loads scrip's condition and action modules.
-
-=cut
-
-sub LoadModules {
- my $self = shift;
-
- $self->ConditionObj->LoadCondition;
- $self->ActionObj->LoadAction;
-}
-
-# {{{ sub TemplateObj
-
-=head2 TemplateObj
-
-Retuns an RT::Template object with this Scrip\'s Template
-
-=cut
-
-sub TemplateObj {
- my $self = shift;
-
- unless ( defined $self->{'TemplateObj'} ) {
- require RT::Template;
- $self->{'TemplateObj'} = RT::Template->new( $self->CurrentUser );
- $self->{'TemplateObj'}->Load( $self->Template );
- }
- return ( $self->{'TemplateObj'} );
-}
-
-# }}}
-
-# {{{ Dealing with this instance of a scrip
-
-# {{{ sub Apply
-
-=head2 Apply { TicketObj => undef, TransactionObj => undef}
-
-This method instantiates the ScripCondition and ScripAction objects for a
-single execution of this scrip. it then calls the IsApplicable method of the
-ScripCondition.
-If that succeeds, it calls the Prepare method of the
-ScripAction. If that succeeds, it calls the Commit method of the ScripAction.
-
-Usually, the ticket and transaction objects passed to this method
-should be loaded by the SuperUser role
-
-=cut
-
-
-# XXX TODO : This code appears to be obsoleted in favor of similar code in Scrips->Apply.
-# Why is this here? Is it still called?
-
-sub Apply {
- my $self = shift;
- my %args = ( TicketObj => undef,
- TransactionObj => undef,
- @_ );
-
- $RT::Logger->debug("Now applying scrip ".$self->Id . " for transaction ".$args{'TransactionObj'}->id);
-
- my $ApplicableTransactionObj = $self->IsApplicable( TicketObj => $args{'TicketObj'},
- TransactionObj => $args{'TransactionObj'} );
- unless ( $ApplicableTransactionObj ) {
- return undef;
- }
-
- if ( $ApplicableTransactionObj->id != $args{'TransactionObj'}->id ) {
- $RT::Logger->debug("Found an applicable transaction ".$ApplicableTransactionObj->Id . " in the same batch with transaction ".$args{'TransactionObj'}->id);
- }
-
- #If it's applicable, prepare and commit it
- $RT::Logger->debug("Now preparing scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id);
- unless ( $self->Prepare( TicketObj => $args{'TicketObj'},
- TransactionObj => $ApplicableTransactionObj )
- ) {
- return undef;
- }
-
- $RT::Logger->debug("Now commiting scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id);
- unless ( $self->Commit( TicketObj => $args{'TicketObj'},
- TransactionObj => $ApplicableTransactionObj)
- ) {
- return undef;
- }
-
- $RT::Logger->debug("We actually finished scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id);
- return (1);
-
-}
-
-# }}}
-
-# {{{ sub IsApplicable
-
-=head2 IsApplicable
-
-Calls the Condition object\'s IsApplicable method
-
-Upon success, returns the applicable Transaction object.
-Otherwise, undef is returned.
-
-If the Scrip is in the TransactionCreate Stage (the usual case), only test
-the associated Transaction object to see if it is applicable.
-
-For Scrips in the TransactionBatch Stage, test all Transaction objects
-created during the Ticket object's lifetime, and returns the first one
-that is applicable.
-
-=cut
-
-sub IsApplicable {
- my $self = shift;
- my %args = ( TicketObj => undef,
- TransactionObj => undef,
- @_ );
-
- my $return;
- eval {
-
- my @Transactions;
-
- if ( $self->Stage eq 'TransactionCreate') {
- # Only look at our current Transaction
- @Transactions = ( $args{'TransactionObj'} );
- }
- elsif ( $self->Stage eq 'TransactionBatch') {
- # Look at all Transactions in this Batch
- @Transactions = @{ $args{'TicketObj'}->TransactionBatch || [] };
- }
- else {
- $RT::Logger->error( "Unknown Scrip stage:" . $self->Stage );
- return (undef);
- }
- my $ConditionObj = $self->ConditionObj;
- foreach my $TransactionObj ( @Transactions ) {
- # in TxnBatch stage we can select scrips that are not applicable to all txns
- my $txn_type = $TransactionObj->Type;
- next unless( $ConditionObj->ApplicableTransTypes =~ /(?:^|,)(?:Any|\Q$txn_type\E)(?:,|$)/i );
- # Load the scrip's Condition object
- $ConditionObj->LoadCondition(
- ScripObj => $self,
- TicketObj => $args{'TicketObj'},
- TransactionObj => $TransactionObj,
- );
-
- if ( $ConditionObj->IsApplicable() ) {
- # We found an application Transaction -- return it
- $return = $TransactionObj;
- last;
- }
- }
- };
-
- if ($@) {
- $RT::Logger->error( "Scrip IsApplicable " . $self->Id . " died. - " . $@ );
- return (undef);
- }
-
- return ($return);
-
-}
-
-# }}}
-
-# {{{ SUb Prepare
-
-=head2 Prepare
-
-Calls the action object's prepare method
-
-=cut
-
-sub Prepare {
- my $self = shift;
- my %args = ( TicketObj => undef,
- TransactionObj => undef,
- @_ );
-
- my $return;
- eval {
- $self->ActionObj->LoadAction( ScripObj => $self,
- TicketObj => $args{'TicketObj'},
- TransactionObj => $args{'TransactionObj'},
- );
-
- $return = $self->ActionObj->Prepare();
- };
- if ($@) {
- $RT::Logger->error( "Scrip Prepare " . $self->Id . " died. - " . $@ );
- return (undef);
- }
- unless ($return) {
- }
- return ($return);
-}
-
-# }}}
-
-# {{{ sub Commit
-
-=head2 Commit
-
-Calls the action object's commit method
-
-=cut
-
-sub Commit {
- my $self = shift;
- my %args = ( TicketObj => undef,
- TransactionObj => undef,
- @_ );
-
- my $return;
- eval {
- $return = $self->ActionObj->Commit();
- };
-
-#Searchbuilder caching isn't perfectly coherent. got to reload the ticket object, since it
-# may have changed
- $args{'TicketObj'}->Load( $args{'TicketObj'}->Id );
-
- if ($@) {
- $RT::Logger->error( "Scrip Commit " . $self->Id . " died. - " . $@ );
- return (undef);
- }
-
- # Not destroying or weakening hte Action and Condition here could cause a
- # leak
-
- return ($return);
-}
-
-# }}}
-
-# }}}
-
-# {{{ ACL related methods
-
-# {{{ sub _Set
-
-# does an acl check and then passes off the call
-sub _Set {
- my $self = shift;
-
- unless ( $self->CurrentUserHasRight('ModifyScrips') ) {
- $RT::Logger->debug(
- "CurrentUser can't modify Scrips for " . $self->Queue . "\n" );
- return ( 0, $self->loc('Permission Denied') );
- }
- return $self->__Set(@_);
-}
-
-# }}}
-
-# {{{ sub _Value
-# does an acl check and then passes off the call
-sub _Value {
- my $self = shift;
-
- unless ( $self->CurrentUserHasRight('ShowScrips') ) {
- $RT::Logger->debug( "CurrentUser can't modify Scrips for "
- . $self->__Value('Queue')
- . "\n" );
- return (undef);
- }
-
- return $self->__Value(@_);
-}
-
-# }}}
-
-# {{{ sub CurrentUserHasRight
-
-=head2 CurrentUserHasRight
-
-Helper menthod for HasRight. Presets Principal to CurrentUser then
-calls HasRight.
-
-=cut
-
-sub CurrentUserHasRight {
- my $self = shift;
- my $right = shift;
- return ( $self->HasRight( Principal => $self->CurrentUser->UserObj,
- Right => $right ) );
-
-}
-
-# }}}
-
-# {{{ sub HasRight
-
-=head2 HasRight
-
-Takes a param-hash consisting of "Right" and "Principal" Principal is
-an RT::User object or an RT::CurrentUser object. "Right" is a textual
-Right string that applies to Scrips.
-
-=cut
-
-sub HasRight {
- my $self = shift;
- my %args = ( Right => undef,
- Principal => undef,
- @_ );
-
- if ( $self->SUPER::_Value('Queue') ) {
- return $args{'Principal'}->HasRight(
- Right => $args{'Right'},
- Object => $self->QueueObj
- );
- }
- else {
- return $args{'Principal'}->HasRight(
- Object => $RT::System,
- Right => $args{'Right'},
- );
- }
-}
-
-# }}}
-
-# }}}
-
-1;
-