import rt 3.4.4
[freeside.git] / rt / lib / RT / Condition / Generic.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::Condition::Generic - ;
50
51 =head1 SYNOPSIS
52
53     use RT::Condition::Generic;
54     my $foo = new RT::Condition::IsApplicable( 
55                 TransactionObj => $tr, 
56                 TicketObj => $ti, 
57                 ScripObj => $scr, 
58                 Argument => $arg, 
59                 Type => $type);
60
61     if ($foo->IsApplicable) {
62            # do something
63     }
64
65
66 =head1 DESCRIPTION
67
68
69 =head1 METHODS
70
71
72 =begin testing
73
74 ok (require RT::Condition::Generic);
75
76 =end testing
77
78
79 =cut
80
81 package RT::Condition::Generic;
82
83 use strict;
84 use base qw/RT::Base/;
85
86 # {{{ sub new 
87 sub new  {
88   my $proto = shift;
89   my $class = ref($proto) || $proto;
90   my $self  = {};
91   bless ($self, $class);
92   $self->_Init(@_);
93   return $self;
94 }
95 # }}}
96
97 # {{{ sub _Init 
98 sub _Init  {
99   my $self = shift;
100   my %args = ( TransactionObj => undef,
101                TicketObj => undef,
102                ScripObj => undef,
103                TemplateObj => undef,
104                Argument => undef,
105                ApplicableTransTypes => undef,
106            CurrentUser => undef,
107                @_ );
108   
109   $self->{'Argument'} = $args{'Argument'};
110   $self->{'ScripObj'} = $args{'ScripObj'};
111   $self->{'TicketObj'} = $args{'TicketObj'};
112   $self->{'TransactionObj'} = $args{'TransactionObj'};
113   $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'};
114   $self->CurrentUser($args{'CurrentUser'});
115 }
116 # }}}
117
118 # Access Scripwide data
119
120 # {{{ sub Argument 
121
122 =head2 Argument
123
124 Return the optional argument associated with this ScripCondition
125
126 =cut
127
128 sub Argument  {
129   my $self = shift;
130   return($self->{'Argument'});
131 }
132 # }}}
133
134 # {{{ sub TicketObj
135
136 =head2 TicketObj
137
138 Return the ticket object we're talking about
139
140 =cut
141
142 sub TicketObj  {
143   my $self = shift;
144   return($self->{'TicketObj'});
145 }
146 # }}}
147
148 # {{{ sub ScripObj
149
150 =head2 ScripObj
151
152 Return the Scrip object we're talking about
153
154 =cut
155
156 sub ScripObj  {
157   my $self = shift;
158   return($self->{'ScripObj'});
159 }
160 # }}}
161 # {{{ sub TransactionObj
162
163 =head2 TransactionObj
164
165 Return the transaction object we're talking about
166
167 =cut
168
169 sub TransactionObj  {
170   my $self = shift;
171   return($self->{'TransactionObj'});
172 }
173 # }}}
174
175 # {{{ sub Type
176
177 =head2 Type 
178
179
180
181 =cut
182
183 sub ApplicableTransTypes  {
184   my $self = shift;
185   return($self->{'ApplicableTransTypes'});
186 }
187 # }}}
188
189
190 # Scrip methods
191
192
193 #What does this type of Action does
194
195 # {{{ sub Describe 
196 sub Describe  {
197   my $self = shift;
198   return ($self->loc("No description for [_1]", ref $self));
199 }
200 # }}}
201
202
203 #Parse the templates, get things ready to go.
204
205 #If this rule applies to this transaction, return true.
206
207 # {{{ sub IsApplicable 
208 sub IsApplicable  {
209   my $self = shift;
210   return(undef);
211 }
212 # }}}
213
214 # {{{ sub DESTROY
215 sub DESTROY {
216     my $self = shift;
217
218     # We need to clean up all the references that might maybe get
219     # oddly circular
220     $self->{'TemplateObj'} =undef
221     $self->{'TicketObj'} = undef;
222     $self->{'TransactionObj'} = undef;
223     $self->{'ScripObj'} = undef;
224      
225 }
226
227 # }}}
228
229 eval "require RT::Condition::Generic_Vendor";
230 die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Vendor.pm});
231 eval "require RT::Condition::Generic_Local";
232 die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Local.pm});
233
234 1;