X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FScrips_Overlay.pm;h=eecf2935277d6039516994cb1182725ece948486;hb=fc6209f398899f0211cfcedeb81a3cd65e04a941;hp=2f395ffd07c393d1dd41f32507d0db8a3134b6fa;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de;p=freeside.git diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm index 2f395ffd0..eecf29352 100644 --- a/rt/lib/RT/Scrips_Overlay.pm +++ b/rt/lib/RT/Scrips_Overlay.pm @@ -1,38 +1,40 @@ -# {{{ 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-2011 Best Practical Solutions, LLC +# +# # (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., 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/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 @@ -41,8 +43,9 @@ # 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 +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Scrips - a collection of RT Scrip objects @@ -57,13 +60,11 @@ =head1 METHODS -=begin testing -ok (require RT::Scrips); +=cut -=end testing -=cut +package RT::Scrips; use strict; no warnings qw(redefine); @@ -153,7 +154,9 @@ sub Next { =head2 Apply -Run through the relevant scrips. +Run through the relevant scrips. Scrips will run in order based on +description. (Most common use case is to prepend a number to the description, +forcing the scrips to run in ascending alphanumerical order.) =cut @@ -184,6 +187,11 @@ sub Commit { foreach my $scrip (@{$self->Prepared}) { + $RT::Logger->debug( + "Committing scrip #". $scrip->id + ." on txn #". $self->{'TransactionObj'}->id + ." of ticket #". $self->{'TicketObj'}->id + ); $scrip->Commit( TicketObj => $self->{'TicketObj'}, TransactionObj => $self->{'TransactionObj'} ); @@ -221,17 +229,21 @@ sub Prepare { #Iterate through each script and check it's applicability. while ( my $scrip = $self->Next() ) { - next unless ( $scrip->IsApplicable( TicketObj => $self->{'TicketObj'}, TransactionObj => $self->{'TransactionObj'} - ) ); + ) ) { + $RT::Logger->debug("Skipping Scrip #".$scrip->Id." because it isn't applicable"); + next; + } #If it's applicable, prepare and commit it - next unless ( $scrip->Prepare( TicketObj => $self->{'TicketObj'}, TransactionObj => $self->{'TransactionObj'} - ) ); + ) ) { + $RT::Logger->debug("Skipping Scrip #".$scrip->Id." because it didn't Prepare"); + next; + } push @{$self->{'prepared_scrips'}}, $scrip; } @@ -254,6 +266,7 @@ sub Prepared { # {{{ sup _SetupSourceObjects + =head2 _SetupSourceObjects { TicketObj , Ticket, Transaction, TransactionObj } Setup a ticket and transaction for this Scrip collection to work with as it runs through the @@ -274,13 +287,16 @@ sub _SetupSourceObjects { TransactionObj => undef, @_ ); - if ( ( $self->{'TicketObj'} = $args{'TicketObj'} ) ) { + + if ( $args{'TicketObj'} ) { + # clone the ticket here as we need to change CurrentUser + $self->{'TicketObj'} = bless { %{$args{'TicketObj'} } }, 'RT::Ticket'; $self->{'TicketObj'}->CurrentUser( $self->CurrentUser ); } else { $self->{'TicketObj'} = RT::Ticket->new( $self->CurrentUser ); $self->{'TicketObj'}->Load( $args{'Ticket'} ) - || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n"); + || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}"); } if ( ( $self->{'TransactionObj'} = $args{'TransactionObj'} ) ) { @@ -289,7 +305,7 @@ sub _SetupSourceObjects { else { $self->{'TransactionObj'} = RT::Transaction->new( $self->CurrentUser ); $self->{'TransactionObj'}->Load( $args{'Transaction'} ) - || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}\n"); + || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}"); } } @@ -299,7 +315,10 @@ sub _SetupSourceObjects { =head2 _FindScrips -Find only the apropriate scrips for whatever we're doing now +Find only the apropriate scrips for whatever we're doing now. Order them +by their description. (Most common use case is to prepend a number to the +description, forcing the scrips to display and run in ascending alphanumerical +order.) =cut @@ -313,8 +332,8 @@ sub _FindScrips { $self->LimitToQueue( $self->{'TicketObj'}->QueueObj->Id ) ; #Limit it to $Ticket->QueueObj->Id - $self->LimitToGlobal() - unless $self->{'TicketObj'}->QueueObj->Disabled; # or to "global" + $self->LimitToGlobal(); + # or to "global" $self->Limit( FIELD => "Stage", VALUE => $args{'Stage'} ); @@ -328,14 +347,16 @@ sub _FindScrips { ); #We only want things where the scrip applies to this sort of transaction - $self->Limit( - ALIAS => $ConditionsAlias, - FIELD => 'ApplicableTransTypes', - OPERATOR => 'LIKE', - VALUE => $args{'Type'}, - ENTRYAGGREGATOR => 'OR', - ) - if $args{'Type'}; + # TransactionBatch stage can define list of transaction + foreach( split /\s*,\s*/, ($args{'Type'} || '') ) { + $self->Limit( + ALIAS => $ConditionsAlias, + FIELD => 'ApplicableTransTypes', + OPERATOR => 'LIKE', + VALUE => $_, + ENTRYAGGREGATOR => 'OR', + ) + } # Or where the scrip applies to any transaction $self->Limit( @@ -346,7 +367,19 @@ sub _FindScrips { ENTRYAGGREGATOR => 'OR', ); - $RT::Logger->debug("Found ".$self->Count. " scrips"); + # Promise some kind of ordering + $self->OrderBy( FIELD => 'Description' ); + + # we call Count below, but later we always do search + # so just do search and get count from results + $self->_DoSearch if $self->{'must_redo_search'}; + + $RT::Logger->debug( + "Found ". $self->Count ." scrips for $args{'Stage'} stage" + ." with applicable type(s) $args{'Type'}" + ." for txn #".$self->{TransactionObj}->Id + ." on ticket #".$self->{TicketObj}->Id + ); } # }}}