<%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); <%ARGS> $Ticket => undef