import rt 3.0.12
[freeside.git] / rt / html / Ticket / Elements / FindAttachments
diff --git a/rt/html/Ticket/Elements/FindAttachments b/rt/html/Ticket/Elements/FindAttachments
new file mode 100755 (executable)
index 0000000..b8a0dd8
--- /dev/null
@@ -0,0 +1,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>
+