X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FScrips_Overlay.pm;h=2f395ffd07c393d1dd41f32507d0db8a3134b6fa;hp=d201480846a71102c2d463aab1ed68ebc6a5d60d;hb=d39d52aac8f38ea9115628039f0df5aa3ac826de;hpb=c582e92888b4a5553e1b4e5214cf35217e4a0cf0 diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm index d20148084..2f395ffd0 100644 --- a/rt/lib/RT/Scrips_Overlay.pm +++ b/rt/lib/RT/Scrips_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# {{{ BEGIN BPS TAGGED BLOCK # -# Copyright (c) 1996-2003 Jesse Vincent +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. +# +# +# 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 LICENSE BLOCK +# }}} END BPS TAGGED BLOCK =head1 NAME RT::Scrips - a collection of RT Scrip objects @@ -129,40 +151,172 @@ sub Next { } # }}} +=head2 Apply + +Run through the relevant scrips. + +=cut + sub Apply { - my ($self, %args) = @_; + my $self = shift; + + my %args = ( TicketObj => undef, + Ticket => undef, + Transaction => undef, + TransactionObj => undef, + Stage => undef, + Type => undef, + @_ ); + + $self->Prepare(%args); + $self->Commit(); + +} + +=head2 Commit + +Commit all of this object's prepared scrips + +=cut + +sub Commit { + my $self = shift; + + + foreach my $scrip (@{$self->Prepared}) { + + $scrip->Commit( TicketObj => $self->{'TicketObj'}, + TransactionObj => $self->{'TransactionObj'} ); + } +} + + +=head2 Prepare + +Only prepare the scrips, returning an array of the scrips we're interested in +in order of preparation, not execution + +=cut + +sub Prepare { + my $self = shift; + my %args = ( TicketObj => undef, + Ticket => undef, + Transaction => undef, + TransactionObj => undef, + Stage => undef, + Type => undef, + @_ ); #We're really going to need a non-acled ticket for the scrips to work - my ($TicketObj, $TransactionObj); + $self->_SetupSourceObjects( TicketObj => $args{'TicketObj'}, + Ticket => $args{'Ticket'}, + TransactionObj => $args{'TransactionObj'}, + Transaction => $args{'Transaction'} ); + + + $self->_FindScrips( Stage => $args{'Stage'}, Type => $args{'Type'} ); + + + #Iterate through each script and check it's applicability. + while ( my $scrip = $self->Next() ) { + + next + unless ( $scrip->IsApplicable( + TicketObj => $self->{'TicketObj'}, + TransactionObj => $self->{'TransactionObj'} + ) ); + + #If it's applicable, prepare and commit it + next + unless ( $scrip->Prepare( TicketObj => $self->{'TicketObj'}, + TransactionObj => $self->{'TransactionObj'} + ) ); + push @{$self->{'prepared_scrips'}}, $scrip; - if ( ($TicketObj = $args{'TicketObj'}) ) { - $TicketObj->CurrentUser($self->CurrentUser); + } + + return (@{$self->Prepared}); + +}; + +=head2 Prepared + +Returns an arrayref of the scrips this object has prepared + + +=cut + +sub Prepared { + my $self = shift; + return ($self->{'prepared_scrips'} || []); +} + + +# {{{ 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 +relevant scrips. (Also to figure out which scrips apply) + +Returns: nothing + +=cut + + +sub _SetupSourceObjects { + + my $self = shift; + my %args = ( + TicketObj => undef, + Ticket => undef, + Transaction => undef, + TransactionObj => undef, + @_ ); + + if ( ( $self->{'TicketObj'} = $args{'TicketObj'} ) ) { + $self->{'TicketObj'}->CurrentUser( $self->CurrentUser ); } else { - $TicketObj = RT::Ticket->new($self->CurrentUser); - $TicketObj->Load( $args{'Ticket'} ) - || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n"); + $self->{'TicketObj'} = RT::Ticket->new( $self->CurrentUser ); + $self->{'TicketObj'}->Load( $args{'Ticket'} ) + || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n"); } - if ( ($TransactionObj = $args{'TransactionObj'}) ) { - $TransactionObj->CurrentUser($self->CurrentUser); + if ( ( $self->{'TransactionObj'} = $args{'TransactionObj'} ) ) { + $self->{'TransactionObj'}->CurrentUser( $self->CurrentUser ); } else { - $TransactionObj = RT::Transaction->new($self->CurrentUser); - $TransactionObj->Load( $args{'Transaction'} ) - || $RT::Logger->err("$self couldn't load transaction $args{'Transaction'}\n"); + $self->{'TransactionObj'} = RT::Transaction->new( $self->CurrentUser ); + $self->{'TransactionObj'}->Load( $args{'Transaction'} ) + || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}\n"); } +} - # {{{ Deal with Scrips +# }}} - $self->LimitToQueue( $TicketObj->QueueObj->Id ) - ; #Limit it to $Ticket->QueueObj->Id - $self->LimitToGlobal() - unless $TicketObj->QueueObj->Disabled; # or to "global" +# {{{ sub _FindScrips; + +=head2 _FindScrips + +Find only the apropriate scrips for whatever we're doing now + +=cut +sub _FindScrips { + my $self = shift; + my %args = ( + Stage => undef, + Type => undef, + @_ ); - $self->Limit(FIELD => "Stage", VALUE => $args{'Stage'}); + $self->LimitToQueue( $self->{'TicketObj'}->QueueObj->Id ) + ; #Limit it to $Ticket->QueueObj->Id + $self->LimitToGlobal() + unless $self->{'TicketObj'}->QueueObj->Disabled; # or to "global" + + $self->Limit( FIELD => "Stage", VALUE => $args{'Stage'} ); my $ConditionsAlias = $self->NewAlias('ScripConditions'); @@ -180,7 +334,8 @@ sub Apply { OPERATOR => 'LIKE', VALUE => $args{'Type'}, ENTRYAGGREGATOR => 'OR', - ) if $args{'Type'}; + ) + if $args{'Type'}; # Or where the scrip applies to any transaction $self->Limit( @@ -191,18 +346,10 @@ sub Apply { ENTRYAGGREGATOR => 'OR', ); - #Iterate through each script and check it's applicability. - while ( my $Scrip = $self->Next() ) { - $Scrip->Apply (TicketObj => $TicketObj, - TransactionObj => $TransactionObj); - } - - $TicketObj->CurrentUser( $TicketObj->OriginalUser ); - $TransactionObj->CurrentUser( $TransactionObj->OriginalUser ); - - # }}} + $RT::Logger->debug("Found ".$self->Count. " scrips"); } +# }}} 1;