import rt 3.6.4
[freeside.git] / rt / lib / RT / Scrip_Overlay.pm
index 1e1854a..7d1a697 100644 (file)
@@ -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 
 #                                          <jesse@bestpractical.com>
 # 
 # (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'},
+        );
     }
 }