X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FScrip_Overlay.pm;h=7d1a6979f1310d33941ebb449f9c720d6c713935;hp=1e1854a0084708d889f1ac8bcb98289baed7341e;hb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm index 1e1854a00..7d1a6979f 100644 --- a/rt/lib/RT/Scrip_Overlay.pm +++ b/rt/lib/RT/Scrip_Overlay.pm @@ -1,8 +1,8 @@ -# {{{ BEGIN BPS TAGGED BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -22,7 +22,9 @@ # # 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., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/copyleft/gpl.html. # # # CONTRIBUTION SUBMISSION POLICY: @@ -42,7 +44,7 @@ # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # -# }}} END BPS TAGGED BLOCK +# END BPS TAGGED BLOCK }}} =head1 NAME RT::Scrip - an RT Scrip object @@ -98,6 +100,9 @@ ok ($ticket2->Priority != '87', "Ticket priority is set right"); =cut + +package RT::Scrip; + use strict; no warnings qw(redefine); @@ -136,10 +141,10 @@ sub Create { CustomPrepareCode => undef, CustomCommitCode => undef, CustomIsApplicableCode => undef, + @_ + ); - @_ ); - - if ( !$args{'Queue'} ) { + unless ( $args{'Queue'} ) { unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'ModifyScrips' ) ) { @@ -148,9 +153,9 @@ sub Create { $args{'Queue'} = 0; # avoid undef sneaking in } else { - my $QueueObj = new RT::Queue( $self->CurrentUser ); + my $QueueObj = RT::Queue->new( $self->CurrentUser ); $QueueObj->Load( $args{'Queue'} ); - unless ( $QueueObj->id() ) { + unless ( $QueueObj->id ) { return ( 0, $self->loc('Invalid queue') ); } unless ( $QueueObj->CurrentUserHasRight('ModifyScrips') ) { @@ -162,28 +167,28 @@ sub Create { #TODO +++ validate input require RT::ScripAction; - my $action = new RT::ScripAction( $self->CurrentUser ); - if ( $args{'ScripAction'} ) { - $action->Load( $args{'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; + unless $action->Id; require RT::Template; - my $template = new RT::Template( $self->CurrentUser ); - if ( $args{'Template'} ) { - $template->Load( $args{'Template'} ); - } - return ( 0, $self->loc('Template not found') ) unless $template->Id; + 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 not found') ) + unless $template->Id; require RT::ScripCondition; - my $condition = new RT::ScripCondition( $self->CurrentUser ); - if ( $args{'ScripCondition'} ) { - $condition->Load( $args{'ScripCondition'} ); - } - unless ( $condition->Id ) { - return ( 0, $self->loc('Condition not found') ); - } + 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 not found') ) + unless $condition->Id; my ( $id, $msg ) = $self->SUPER::Create( Queue => $args{'Queue'}, @@ -195,9 +200,8 @@ sub Create { CustomPrepareCode => $args{'CustomPrepareCode'}, CustomCommitCode => $args{'CustomCommitCode'}, CustomIsApplicableCode => $args{'CustomIsApplicableCode'}, - ); - if ($id) { + if ( $id ) { return ( $id, $self->loc('Scrip Created') ); } else { @@ -265,7 +269,7 @@ sub ActionObj { $self->{'ScripActionObj'} = RT::ScripAction->new( $self->CurrentUser ); #TODO: why are we loading Actions with templates like this. - # two seperate methods might make more sense + # two separate methods might make more sense $self->{'ScripActionObj'}->Load( $self->ScripAction, $self->Template ); } return ( $self->{'ScripActionObj'} ); @@ -336,6 +340,9 @@ 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, @@ -417,16 +424,19 @@ sub IsApplicable { $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 - $self->ConditionObj->LoadCondition( + $ConditionObj->LoadCondition( ScripObj => $self, TicketObj => $args{'TicketObj'}, TransactionObj => $TransactionObj, ); - if ( $self->ConditionObj->IsApplicable() ) { + if ( $ConditionObj->IsApplicable() ) { # We found an application Transaction -- return it $return = $TransactionObj; last; @@ -502,7 +512,7 @@ sub Commit { $args{'TicketObj'}->Load( $args{'TicketObj'}->Id ); if ($@) { - $RT::Logger->error( "Scrip IsApplicable " . $self->Id . " died. - " . $@ ); + $RT::Logger->error( "Scrip Commit " . $self->Id . " died. - " . $@ ); return (undef); } @@ -586,15 +596,17 @@ sub HasRight { Principal => undef, @_ ); - if ( ( defined $self->SUPER::_Value('Queue') ) - and ( $self->SUPER::_Value('Queue') != 0 ) ) { - return ( $args{'Principal'}->HasRight( Right => $args{'Right'}, - Object => $self->QueueObj ) ); - + 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'} ) ); + return $args{'Principal'}->HasRight( + Object => $RT::System, + Right => $args{'Right'}, + ); } }