summaryrefslogtreecommitdiff
path: root/rt/html/Ticket/Elements/FindAttachments
blob: b8a0dd8b6c6cdf1f83dc9a4d379a535b47f6f3e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<%INIT>
my %documents;

#A default implementation here loops through all transactions and pulls out all their attachments.
# We end up doing an end-run around that to get a bit more performance

# We force the cache of ticket transactions to get populated up front. otherwise, the 
# code that looks at attachments will look at each one in turn.
my $transactions = $Ticket->Transactions->First;


my $attachments = RT::Attachments->new( $session{'CurrentUser'} );

$attachments->Columns( qw( Id Filename ContentType Headers Subject Parent ContentEncoding ContentType TransactionId Created));

if ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
    my $transactions = $attachments->NewAlias('Transactions');
    $attachments->Join( ALIAS1 => 'main',
                                           FIELD1 => 'TransactionId',
                                           ALIAS2 => $transactions,
                                           FIELD2 => 'id' );
    
    my $tickets = $attachments->NewAlias('Tickets');

    $attachments->Join( ALIAS1 => $transactions,
                        FIELD1 => 'Ticket',
                        ALIAS2 => $tickets,
                        FIELD2 => 'id' );

    $attachments->Limit( ALIAS => $tickets,
                         FIELD => 'EffectiveId',
                         VALUE => $Ticket->id() );
    # if the user may not see comments do not return them
    unless ( $Ticket->CurrentUserHasRight('ShowTicketComments') ) {
        $attachments->Limit( ALIAS    => $transactions,
                             FIELD    => 'Type',
                             OPERATOR => '!=',
                             VALUE    => "Comment" );
    }
}
return ($attachments);
</%INIT>
<%ARGS>
$Ticket => undef
</%ARGS>