This commit was generated by cvs2svn to compensate for changes in r4407,
[freeside.git] / rt / lib / RT / Transactions_Overlay.pm
1 # BEGIN BPS TAGGED BLOCK {{{
2
3 # COPYRIGHT:
4 #  
5 # This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
6 #                                          <jesse@bestpractical.com>
7
8 # (Except where explicitly superseded by other copyright notices)
9
10
11 # LICENSE:
12
13 # This work is made available to you under the terms of Version 2 of
14 # the GNU General Public License. A copy of that license should have
15 # been provided with this software, but in any event can be snarfed
16 # from www.gnu.org.
17
18 # This work is distributed in the hope that it will be useful, but
19 # WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 # General Public License for more details.
22
23 # You should have received a copy of the GNU General Public License
24 # along with this program; if not, write to the Free Software
25 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26
27
28 # CONTRIBUTION SUBMISSION POLICY:
29
30 # (The following paragraph is not intended to limit the rights granted
31 # to you to modify and distribute this software under the terms of
32 # the GNU General Public License and is only of importance to you if
33 # you choose to contribute your changes and enhancements to the
34 # community by submitting them to Best Practical Solutions, LLC.)
35
36 # By intentionally submitting any modifications, corrections or
37 # derivatives to this work, or any other work intended for use with
38 # Request Tracker, to Best Practical Solutions, LLC, you confirm that
39 # you are the copyright holder for those contributions and you grant
40 # Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
41 # royalty-free, perpetual, license to use, copy, create derivative
42 # works based on those contributions, and sublicense and distribute
43 # those contributions and any derivatives thereof.
44
45 # END BPS TAGGED BLOCK }}}
46
47 =head1 NAME
48
49   RT::Transactions - a collection of RT Transaction objects
50
51 =head1 SYNOPSIS
52
53   use RT::Transactions;
54
55
56 =head1 DESCRIPTION
57
58
59 =head1 METHODS
60
61 =begin testing
62
63 ok (require RT::Transactions);
64
65 =end testing
66
67 =cut
68
69
70 package RT::Transactions;
71
72 use strict;
73 no warnings qw(redefine);
74
75 # {{{ sub _Init  
76 sub _Init   {
77   my $self = shift;
78   
79   $self->{'table'} = "Transactions";
80   $self->{'primary_key'} = "id";
81   
82   # By default, order by the date of the transaction, rather than ID.
83   $self->OrderByCols( { FIELD => 'Created',
84                         ORDER => 'ASC' },
85                       { FIELD => 'id',
86                         ORDER => 'ASC' } );
87
88   return ( $self->SUPER::_Init(@_));
89 }
90 # }}}
91
92 =head2 Limit
93
94 A wrapper around SUPER::Limit to catch migration issues
95
96 =cut
97
98 sub Limit {
99         my $self = shift;
100         my %args = (@_);
101
102         if ($args{'FIELD'} eq 'Ticket') {
103                 Carp::cluck("Historical code calling RT::Transactions::Limit with a 'Ticket'.  This deprecated API will be deleted in 3.6");
104                 $self->SUPER::Limit(FIELD => 'ObjectType', OPERATOR => '=', VALUE =>'RT::Ticket');
105                 $args{'FIELD'} = 'ObjectId';
106                 $self->SUPER::Limit(%args);
107
108         } else {
109
110                 $self->SUPER::Limit(%args);
111         }
112
113
114 }
115
116
117
118 =head2 LimitToTicket TICKETID 
119
120 Find only transactions for the ticket whose id is TICKETID.
121
122 This includes tickets merged into TICKETID.
123
124 Repeated calls to this method will intelligently limit down to that set of tickets, joined with an OR
125
126
127 =cut
128
129
130 sub LimitToTicket {
131     my $self = shift;
132     my $tid  = shift;
133
134     unless ( $self->{'tickets_table'} ) {
135         $self->{'tickets_table'} ||= $self->NewAlias('Tickets');
136         $self->Join(
137             ALIAS1 => 'main',
138             FIELD1 => 'ObjectId',
139             ALIAS2 => $self->{'tickets_table'},
140             FIELD2 => 'id'
141         );
142         $self->Limit(
143             FIELD => 'ObjectType',
144             VALUE => 'RT::Ticket',
145         );
146     }
147     $self->Limit(
148         ALIAS           => $self->{tickets_table},
149         FIELD           => 'EffectiveId',
150         OPERATOR        => '=',
151         ENTRYAGGREGATOR => 'OR',
152         VALUE           => $tid,
153     );
154
155 }
156
157
158 # {{{ sub Next
159 sub Next {
160     my $self = shift;
161         
162     my $Transaction = $self->SUPER::Next();
163     if ((defined($Transaction)) and (ref($Transaction))) {
164         # If the user can see the transaction's type, then they can 
165         #  see the transaction and we should hand it back.
166         if ($Transaction->Type) {
167             return($Transaction);
168         }
169
170         #If the user doesn't have the right to show this ticket
171         else {  
172             return($self->Next());
173         }
174     }
175
176     #if there never was any ticket
177     else {
178         return(undef);
179     }   
180 }
181 # }}}
182
183
184
185 1;
186