From 945721f48f74d5cfffef7c7cf3a3d6bc2521f5dd Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 15 Jul 2003 13:16:32 +0000 Subject: import of rt 3.0.4 --- rt/lib/RT/Scrips_Overlay.pm | 133 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 rt/lib/RT/Scrips_Overlay.pm (limited to 'rt/lib/RT/Scrips_Overlay.pm') diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm new file mode 100644 index 0000000..46e31c2 --- /dev/null +++ b/rt/lib/RT/Scrips_Overlay.pm @@ -0,0 +1,133 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 1996-2003 Jesse Vincent +# +# (Except where explictly superceded by other copyright notices) +# +# 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. +# +# 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. +# +# +# END LICENSE BLOCK +=head1 NAME + + RT::Scrips - a collection of RT Scrip objects + +=head1 SYNOPSIS + + use RT::Scrips; + +=head1 DESCRIPTION + + +=head1 METHODS + + +=begin testing + +ok (require RT::Scrips); + +=end testing + +=cut + +use strict; +no warnings qw(redefine); + +# {{{ sub LimitToQueue + +=head2 LimitToQueue + +Takes a queue id (numerical) as its only argument. Makes sure that +Scopes it pulls out apply to this queue (or another that you've selected with +another call to this method + +=cut + +sub LimitToQueue { + my $self = shift; + my $queue = shift; + + $self->Limit (ENTRYAGGREGATOR => 'OR', + FIELD => 'Queue', + VALUE => "$queue") + if defined $queue; + +} +# }}} + +# {{{ sub LimitToGlobal + +=head2 LimitToGlobal + +Makes sure that +Scopes it pulls out apply to all queues (or another that you've selected with +another call to this method or LimitToQueue + +=cut + + +sub LimitToGlobal { + my $self = shift; + + $self->Limit (ENTRYAGGREGATOR => 'OR', + FIELD => 'Queue', + VALUE => 0); + +} +# }}} + +# {{{ sub NewItem +sub NewItem { + my $self = shift; + + return(new RT::Scrip($self->CurrentUser)); +} +# }}} + +# {{{ sub Next + +=head2 Next + +Returns the next scrip that this user can see. + +=cut + +sub Next { + my $self = shift; + + + my $Scrip = $self->SUPER::Next(); + if ((defined($Scrip)) and (ref($Scrip))) { + + if ($Scrip->CurrentUserHasRight('ShowScrips')) { + return($Scrip); + } + + #If the user doesn't have the right to show this scrip + else { + return($self->Next()); + } + } + #if there never was any scrip + else { + return(undef); + } + +} +# }}} + +1; + -- cgit v1.1 From 289340780927b5bac2c7604d7317c3063c6dd8cc Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 11 Mar 2004 02:05:38 +0000 Subject: import of rt 3.0.9 --- rt/lib/RT/Scrips_Overlay.pm | 75 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'rt/lib/RT/Scrips_Overlay.pm') diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm index 46e31c2..d201480 100644 --- a/rt/lib/RT/Scrips_Overlay.pm +++ b/rt/lib/RT/Scrips_Overlay.pm @@ -129,5 +129,80 @@ sub Next { } # }}} +sub Apply { + my ($self, %args) = @_; + + #We're really going to need a non-acled ticket for the scrips to work + my ($TicketObj, $TransactionObj); + + if ( ($TicketObj = $args{'TicketObj'}) ) { + $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"); + } + + if ( ($TransactionObj = $args{'TransactionObj'}) ) { + $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"); + } + + # {{{ Deal with Scrips + + $self->LimitToQueue( $TicketObj->QueueObj->Id ) + ; #Limit it to $Ticket->QueueObj->Id + $self->LimitToGlobal() + unless $TicketObj->QueueObj->Disabled; # or to "global" + + + $self->Limit(FIELD => "Stage", VALUE => $args{'Stage'}); + + + my $ConditionsAlias = $self->NewAlias('ScripConditions'); + + $self->Join( + ALIAS1 => 'main', + FIELD1 => 'ScripCondition', + ALIAS2 => $ConditionsAlias, + FIELD2 => 'id' + ); + + #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'}; + + # Or where the scrip applies to any transaction + $self->Limit( + ALIAS => $ConditionsAlias, + FIELD => 'ApplicableTransTypes', + OPERATOR => 'LIKE', + VALUE => "Any", + 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 ); + + # }}} +} + + 1; -- cgit v1.1