summaryrefslogtreecommitdiff
path: root/rt/share/html/Ticket/Elements/ShowTransactionAttachments
diff options
context:
space:
mode:
Diffstat (limited to 'rt/share/html/Ticket/Elements/ShowTransactionAttachments')
-rw-r--r--rt/share/html/Ticket/Elements/ShowTransactionAttachments252
1 files changed, 252 insertions, 0 deletions
diff --git a/rt/share/html/Ticket/Elements/ShowTransactionAttachments b/rt/share/html/Ticket/Elements/ShowTransactionAttachments
new file mode 100644
index 0000000..9c40b28
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowTransactionAttachments
@@ -0,0 +1,252 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%PERL>
+# Find all the attachments which have parent $Parent
+# For each of these attachments
+foreach my $message ( grep $_->__Value('Parent') == $Parent, @$Attachments ) {
+
+ if (RT->Config->Get('GnuPG')->{'Enable'}) {
+ $m->comp( 'ShowGnuPGStatus', Attachment => $message, WarnUnsigned => $WarnUnsigned );
+ }
+
+ $m->comp( 'ShowMessageHeaders',
+ Message => $message,
+ DisplayHeaders => \@DisplayHeaders,
+ );
+
+ my $size = $message->ContentLength;
+ if ( $size ) {
+</%PERL>
+<div class="downloadattachment">
+<a href="<% $AttachPath %>/<% $Transaction->Id %>/<% $message->Id %>/<% ($message->Filename ||'')| u%>"><&|/l&>Download</&> <% $message->Filename || loc('(untitled)') %></a>
+% if ( $DownloadableHeaders && !$message->Filename && $message->ContentType =~ /text/ ) {
+ / <a href="<% $AttachPath %>/WithHeaders/<% $message->Id %>"><% loc('with headers') %></a>
+% }
+<br />
+<span class="downloadcontenttype"><% $message->ContentType %> <% $size_to_str->( $size ) %></span>
+</div>
+% }
+
+%# If there is sub-messages, open a dedicated div
+% if ( scalar ( grep $_->__Value('Parent') == $message->id, @$Attachments ) ) {
+<div class="messageattachments">
+% } else {
+<div class="messagebody <% RT->Config->Get('PlainTextMono', $session{'CurrentUser'}) ? ' plain-text-white-space' : ''%>">
+% }
+<%PERL>
+
+$render_attachment->( $message );
+
+$m->comp(
+ $m->current_comp,
+ %ARGS,
+ Parent => $message->id,
+ ParentObj => $message
+);
+
+</%PERL>
+</div>
+% }
+<%ARGS>
+$Ticket => undef
+$Transaction => undef
+$ShowHeaders => 0
+$Collapsed => undef
+$DownloadableHeaders => 1
+$ShowTitleBarCommands => 1
+$RowNum => 1
+$AttachPath => RT->Config->Get('WebPath')."/Ticket/Attachment"
+$UpdatePath => RT->Config->Get('WebPath')."/Ticket/Update.html"
+$EmailRecordPath => RT->Config->Get('WebPath')."/Ticket/ShowEmailRecord.html"
+$Attachments => undef
+$AttachmentContent => {}
+$ShowBody => 1
+$Parent => 0
+$ParentObj => undef
+$WarnUnsigned => 0
+</%ARGS>
+<%INIT>
+my @DisplayHeaders=qw(_all);
+if ( $Transaction->Type =~ /EmailRecord$/ ) {
+ @DisplayHeaders = qw(To Cc Bcc);
+}
+
+# If the transaction has anything attached to it at all
+elsif (!$ShowHeaders) {
+ @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject);
+ push @DisplayHeaders, 'RT-Send-Bcc' if RT->Config->Get('ShowBccHeader');
+}
+
+my $size_to_str = sub {
+ my $size = shift;
+ # show a download link
+ if ( $size > 1024*1024 ) {
+ $size = loc( "[_1]b", int( $size / 1024 / 102.4 ) / 10 );
+ }
+ elsif ( $size > 1024 ) {
+ $size = loc( "[_1]k", int( $size / 102.4 ) / 10 );
+ }
+ else {
+ $size = loc( "[_1]b", $size );
+ }
+ return $size;
+};
+
+my $render_attachment = sub {
+ my $message = shift;
+
+ # if it has a content-disposition: attachment, don't show inline
+ my $disposition = $message->GetHeader('Content-Disposition');
+ if ( $disposition && $disposition =~ /attachment/i && $disposition !~ /^\s*inline/ ) {
+ $disposition = 'attachemnt';
+ } else {
+ $disposition = 'inline';
+ }
+
+ # If it's text
+ if ( $message->ContentType =~ m{^(text|message)}i ) {
+ my $max_size = RT->Config->Get( 'MaxInlineBody', $session{'CurrentUser'} );
+ if ( $message->Filename && RT->Config->Get('SuppressInlineTextFiles', $session{'CurrentUser'} ) ) {
+ $m->out('<p>'. loc( 'Text file is not shown because it is disabled in preferences.' ) .'</p>');
+ return;
+ }
+ elsif ( $max_size && $message->ContentLength > $max_size ) {
+ $m->out('<p>'. loc( 'Message body not shown because it is too large.' ) .'</p>');
+ return;
+ }
+ elsif ( $disposition ne 'inline' ) {
+ $m->out('<p>'. loc( 'Message body is not shown because sender requested not to inline it.' ) .'</p>');
+ return;
+ }
+
+ if (
+
+ # it's a toplevel object
+ !$ParentObj
+
+ # or its parent isn't a multipart alternative
+ || ( $ParentObj->ContentType !~ m{^multipart/alternative$}i )
+
+ # or it's of our prefered alterative type
+ || (
+ (
+ RT->Config->Get('PreferRichText')
+ && ( $message->ContentType =~ m{^text/(?:html|enriched)$} )
+ )
+ || ( !RT->Config->Get('PreferRichText')
+ && ( $message->ContentType !~ m{^text/(?:html|enriched)$} )
+ )
+ )
+ )
+ {
+
+ my $content;
+ if ( $AttachmentContent->{ $message->id } ) {
+ $content = $AttachmentContent->{ $message->id }->Content;
+ }
+ else {
+ $content = $message->Content;
+ }
+
+ # if it's a text/html clean the body and show it
+ if ( $message->ContentType =~ m{^text/(?:html|enriched)$}i ) {
+ $content = $m->comp( '/Elements/ScrubHTML', Content => $content );
+ if ( $message->ContentType eq 'text/html' ) {
+ $m->comp('/Elements/MakeClicky',
+ content => \$content, html => 1,
+ ticket => $Ticket );
+ }
+ $m->out( $content );
+ }
+
+ # if it's a text/plain show the body
+ elsif ( $message->ContentType =~ m{^(text|message)}i ) {
+
+ eval { require Text::Quoted; $content = Text::Quoted::extract($content); };
+ if ($@) { $RT::Logger->warning( "Text::Quoted failed: $@" ) }
+
+ $m->comp(
+ 'ShowMessageStanza',
+ Depth => 0,
+ Message => $content,
+ Transaction => $Transaction
+ );
+ }
+ }
+ }
+
+ # if it's an image, show it as an image
+ elsif ( RT->Config->Get('ShowTransactionImages') and $message->ContentType =~ /^image\//i ) {
+ if ( $disposition ne 'inline' ) {
+ $m->out('<p>'. loc( 'Message body is not shown because sender requested not to inline it.' ) .'</p>');
+ return;
+ }
+
+ my $filename = $message->Filename || loc('(untitled)');
+ $m->out('<img'
+ . ' alt="'
+ . $filename
+ . '"'
+ . ' title="'
+ . $filename
+ . '"'
+ . ' src="'
+ . $AttachPath . '/'
+ . $Transaction->Id . '/'
+ . $message->Id
+ . '/" />' );
+ }
+ elsif ( $message->ContentLength > 0 ) {
+ $m->out( '<p>' .
+ loc( 'Message body not shown because it is not plain text.' ) .
+ '</p>'
+ );
+ }
+};
+
+</%INIT>