]> git.uio.no Git - usit-rt.git/blame - lib/RT/Attachments.pm
Removed LDAP-lookup loop for new external users.
[usit-rt.git] / lib / RT / Attachments.pm
CommitLineData
84fb5b46
MKG
1# BEGIN BPS TAGGED BLOCK {{{
2#
3# COPYRIGHT:
4#
5# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
6# <sales@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., 51 Franklin Street, Fifth Floor, Boston, MA
26# 02110-1301 or visit their web page on the internet at
27# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28#
29#
30# CONTRIBUTION SUBMISSION POLICY:
31#
32# (The following paragraph is not intended to limit the rights granted
33# to you to modify and distribute this software under the terms of
34# the GNU General Public License and is only of importance to you if
35# you choose to contribute your changes and enhancements to the
36# community by submitting them to Best Practical Solutions, LLC.)
37#
38# By intentionally submitting any modifications, corrections or
39# derivatives to this work, or any other work intended for use with
40# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41# you are the copyright holder for those contributions and you grant
42# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43# royalty-free, perpetual, license to use, copy, create derivative
44# works based on those contributions, and sublicense and distribute
45# those contributions and any derivatives thereof.
46#
47# END BPS TAGGED BLOCK }}}
48
49=head1 NAME
50
51 RT::Attachments - a collection of RT::Attachment objects
52
53=head1 SYNOPSIS
54
55 use RT::Attachments;
56
57=head1 DESCRIPTION
58
59This module should never be called directly by client code. it's an internal module which
60should only be accessed through exported APIs in Ticket, Queue and other similar objects.
61
62
63=head1 METHODS
64
65
66
67=cut
68
69
70package RT::Attachments;
71use strict;
72use warnings;
73
74
75use RT::Attachment;
76
77use base 'RT::SearchBuilder';
78
79sub Table { 'Attachments'}
80
81
82use RT::Attachment;
83
84sub _Init {
85 my $self = shift;
86 $self->{'table'} = "Attachments";
87 $self->{'primary_key'} = "id";
88 $self->OrderBy(
89 FIELD => 'id',
90 ORDER => 'ASC',
91 );
92 return $self->SUPER::_Init( @_ );
93}
94
95sub CleanSlate {
96 my $self = shift;
97 delete $self->{_sql_transaction_alias};
98 return $self->SUPER::CleanSlate( @_ );
99}
100
101
102=head2 TransactionAlias
103
104Returns alias for transactions table with applied join condition.
105Always return the same alias, so if you want to build some complex
106or recursive joining then you have to create new alias youself.
107
108=cut
109
110sub TransactionAlias {
111 my $self = shift;
112 return $self->{'_sql_transaction_alias'}
113 if $self->{'_sql_transaction_alias'};
114
115 my $res = $self->NewAlias('Transactions');
116 $self->Limit(
117 ENTRYAGGREGATOR => 'AND',
118 FIELD => 'TransactionId',
119 VALUE => $res . '.id',
120 QUOTEVALUE => 0,
121 );
122 return $self->{'_sql_transaction_alias'} = $res;
123}
124
125=head2 ContentType (VALUE => 'text/plain', ENTRYAGGREGATOR => 'OR', OPERATOR => '=' )
126
127Limit result set to attachments of ContentType 'TYPE'...
128
129=cut
130
131
132sub ContentType {
133 my $self = shift;
134 my %args = (
135 VALUE => 'text/plain',
136 OPERATOR => '=',
137 ENTRYAGGREGATOR => 'OR',
138 @_
139 );
140
141 return $self->Limit ( %args, FIELD => 'ContentType' );
142}
143
144=head2 ChildrenOf ID
145
146Limit result set to children of Attachment ID
147
148=cut
149
150
151sub ChildrenOf {
152 my $self = shift;
153 my $attachment = shift;
154 return $self->Limit(
155 FIELD => 'Parent',
156 VALUE => $attachment
157 );
158}
159
160=head2 LimitNotEmpty
161
162Limit result set to attachments with not empty content.
163
164=cut
165
166sub LimitNotEmpty {
167 my $self = shift;
168 $self->Limit(
169 ENTRYAGGREGATOR => 'AND',
170 FIELD => 'Content',
171 OPERATOR => 'IS NOT',
172 VALUE => 'NULL',
173 QUOTEVALUE => 0,
174 );
175
176 # http://rt3.fsck.com/Ticket/Display.html?id=12483
177 if ( RT->Config->Get('DatabaseType') ne 'Oracle' ) {
178 $self->Limit(
179 ENTRYAGGREGATOR => 'AND',
180 FIELD => 'Content',
181 OPERATOR => '!=',
182 VALUE => '',
183 );
184 }
185 return;
186}
187
188=head2 LimitByTicket $ticket_id
189
190Limit result set to attachments of a ticket.
191
192=cut
193
194sub LimitByTicket {
195 my $self = shift;
196 my $tid = shift;
197
198 my $transactions = $self->TransactionAlias;
199 $self->Limit(
200 ENTRYAGGREGATOR => 'AND',
201 ALIAS => $transactions,
202 FIELD => 'ObjectType',
203 VALUE => 'RT::Ticket',
204 );
205
206 my $tickets = $self->NewAlias('Tickets');
207 $self->Limit(
208 ENTRYAGGREGATOR => 'AND',
209 ALIAS => $tickets,
210 FIELD => 'id',
211 VALUE => $transactions . '.ObjectId',
212 QUOTEVALUE => 0,
213 );
214 $self->Limit(
215 ENTRYAGGREGATOR => 'AND',
216 ALIAS => $tickets,
217 FIELD => 'EffectiveId',
218 VALUE => $tid,
219 );
220 return;
221}
222
223# {{{ sub Next
224sub Next {
225 my $self = shift;
226
227 my $Attachment = $self->SUPER::Next;
228 return $Attachment unless $Attachment;
229
230 if ( $Attachment->TransactionObj->CurrentUserCanSee ) {
231 return $Attachment;
232 } else {
233 # If the user doesn't have the right to show this ticket
234 return $self->Next;
235 }
236}
237
238
239=head2 NewItem
240
241Returns an empty new RT::Attachment item
242
243=cut
244
245sub NewItem {
246 my $self = shift;
247 return(RT::Attachment->new($self->CurrentUser));
248}
249
250RT::Base->_ImportOverlays();
251
2521;