3 # Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
5 # (Except where explictly superceded by other copyright notices)
7 # This work is made available to you under the terms of Version 2 of
8 # the GNU General Public License. A copy of that license should have
9 # been provided with this software, but in any event can be snarfed
12 # This work is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # General Public License for more details.
17 # Unless otherwise specified, all modifications, corrections or
18 # extensions to this work which alter its source code become the
19 # property of Best Practical Solutions, LLC when submitted for
20 # inclusion in the work.
26 RT::Scrips - a collection of RT Scrip objects
40 ok (require RT::Scrips);
47 no warnings qw(redefine);
49 # {{{ sub LimitToQueue
53 Takes a queue id (numerical) as its only argument. Makes sure that
54 Scopes it pulls out apply to this queue (or another that you've selected with
55 another call to this method
63 $self->Limit (ENTRYAGGREGATOR => 'OR',
71 # {{{ sub LimitToGlobal
76 Scopes it pulls out apply to all queues (or another that you've selected with
77 another call to this method or LimitToQueue
85 $self->Limit (ENTRYAGGREGATOR => 'OR',
96 return(new RT::Scrip($self->CurrentUser));
104 Returns the next scrip that this user can see.
112 my $Scrip = $self->SUPER::Next();
113 if ((defined($Scrip)) and (ref($Scrip))) {
115 if ($Scrip->CurrentUserHasRight('ShowScrips')) {
119 #If the user doesn't have the right to show this scrip
121 return($self->Next());
124 #if there never was any scrip
133 my ($self, %args) = @_;
135 #We're really going to need a non-acled ticket for the scrips to work
136 my ($TicketObj, $TransactionObj);
138 if ( ($TicketObj = $args{'TicketObj'}) ) {
139 $TicketObj->CurrentUser($self->CurrentUser);
142 $TicketObj = RT::Ticket->new($self->CurrentUser);
143 $TicketObj->Load( $args{'Ticket'} )
144 || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n");
147 if ( ($TransactionObj = $args{'TransactionObj'}) ) {
148 $TransactionObj->CurrentUser($self->CurrentUser);
151 $TransactionObj = RT::Transaction->new($self->CurrentUser);
152 $TransactionObj->Load( $args{'Transaction'} )
153 || $RT::Logger->err("$self couldn't load transaction $args{'Transaction'}\n");
156 # {{{ Deal with Scrips
158 $self->LimitToQueue( $TicketObj->QueueObj->Id )
159 ; #Limit it to $Ticket->QueueObj->Id
160 $self->LimitToGlobal()
161 unless $TicketObj->QueueObj->Disabled; # or to "global"
164 $self->Limit(FIELD => "Stage", VALUE => $args{'Stage'});
167 my $ConditionsAlias = $self->NewAlias('ScripConditions');
171 FIELD1 => 'ScripCondition',
172 ALIAS2 => $ConditionsAlias,
176 #We only want things where the scrip applies to this sort of transaction
178 ALIAS => $ConditionsAlias,
179 FIELD => 'ApplicableTransTypes',
181 VALUE => $args{'Type'},
182 ENTRYAGGREGATOR => 'OR',
185 # Or where the scrip applies to any transaction
187 ALIAS => $ConditionsAlias,
188 FIELD => 'ApplicableTransTypes',
191 ENTRYAGGREGATOR => 'OR',
194 #Iterate through each script and check it's applicability.
195 while ( my $Scrip = $self->Next() ) {
196 $Scrip->Apply (TicketObj => $TicketObj,
197 TransactionObj => $TransactionObj);
200 $TicketObj->CurrentUser( $TicketObj->OriginalUser );
201 $TransactionObj->CurrentUser( $TransactionObj->OriginalUser );