turn off Text::Quoted usage, it segfaults and its optional
[freeside.git] / rt / html / Ticket / Elements / ShowTransactionAttachments
1 %# BEGIN BPS TAGGED BLOCK {{{
2 %# 
3 %# COPYRIGHT:
4 %#  
5 %# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
6 %#                                          <jesse@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., 675 Mass Ave, Cambridge, MA 02139, USA.
26 %# 
27 %# 
28 %# CONTRIBUTION SUBMISSION POLICY:
29 %# 
30 %# (The following paragraph is not intended to limit the rights granted
31 %# to you to modify and distribute this software under the terms of
32 %# the GNU General Public License and is only of importance to you if
33 %# you choose to contribute your changes and enhancements to the
34 %# community by submitting them to Best Practical Solutions, LLC.)
35 %# 
36 %# By intentionally submitting any modifications, corrections or
37 %# derivatives to this work, or any other work intended for use with
38 %# Request Tracker, to Best Practical Solutions, LLC, you confirm that
39 %# you are the copyright holder for those contributions and you grant
40 %# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
41 %# royalty-free, perpetual, license to use, copy, create derivative
42 %# works based on those contributions, and sublicense and distribute
43 %# those contributions and any derivatives thereof.
44 %# 
45 %# END BPS TAGGED BLOCK }}}
46 <%perl>
47 # Find all the attachments which have parent $Parent
48 # For each of these attachments
49 foreach my $message ( grep { $_->Parent == $Parent } @$Attachments ) {
50
51     # {{{    show the headers
52     my $headers = $message->Headers;
53     chomp $headers;
54
55     # localize the common headers (like 'Subject:'), too.
56     $headers =~ s/^([^:]+)(?=:)/loc($1)/em;
57     $m->comp(
58         'ShowMessageHeaders',
59         Headers        => $headers,
60         Transaction    => $Transaction,
61         DisplayHeaders => \@DisplayHeaders
62     );
63
64     # }}}
65     # {{{ if there's any size at all, show the download link
66     my $size = $message->ContentLength;
67     if ($size) {
68         
69 </%perl> 
70 <div class="downloadattachment">
71 <%perl>
72
73      #     show a download link
74      if ( $size > 1024 ) {
75          $size = loc( "[_1]k", int( $size / 102.4 ) / 10 );
76      }
77      else {
78         $size = loc( "[_1]b", $size );
79      }
80         
81 </%PERL> 
82 <A HREF="<%$AttachPath%>/<%$Transaction->Id%>/<%$message->Id%>/<%$message->Filename | u%>"><&|/l&>Download</&> <%$message->Filename || loc('(untitled)') %></a> 
83 <div class="downloadcontenttype">
84 <%$message->ContentType%> <% $size %> 
85 </div> 
86 </div>
87 % }
88 % # }}}
89 <div class="messagebody">
90 <%perl>
91 # {{{   if it has a content-disposition: attachment, don't show inline
92 unless ( ($message->GetHeader('Content-Disposition')||"") =~ /attachment/i ) {
93
94     my $content;
95
96     # If it's text
97     if (   $message->ContentType =~ m{^(text|message)}i
98         && $message->ContentLength <= $RT::MaxInlineBody )
99     {
100
101         if (
102
103             # it's a toplevel object
104             !$ParentObj
105
106             # or its parent isn't a multipart alternative
107             || ( $ParentObj->ContentType !~ m{^multipart/alternative$}i )
108
109             # or it's of our prefered alterative type
110             || (
111                 (
112                     $RT::PreferRichText
113                     && ( $message->ContentType =~ m{^text/(?:html|enriched)$} )
114                 )
115                 || ( !$RT::PreferRichText
116                     && ( $message->ContentType !~ m{^text/(?:html|enriched)$} )
117                 )
118             )
119           )
120         {
121
122             if ( $AttachmentContent->{ $message->id } ) {
123                 $content = $AttachmentContent->{ $message->id }->Content;
124             }
125             else {
126                 $content = $message->Content;
127             }
128
129             # if it's a text/html clean the body and show it
130             if ( $message->ContentType =~ m{^text/(?:html|enriched)$}i ) {
131                 $content =
132                   $m->comp( '/Elements/ScrubHTML', Content => $content );
133                 $m->out($content);
134             }
135
136             # if it's a text/plain show the body
137             elsif ( $message->ContentType =~ m{^(text|message|text)}i ) {
138
139                 #don't want to use this even if it is installed, its
140                 #segfaulting on weird characters and silently truncating the
141                 #ticket history output
142                 #see:
143                 # r44838@pinglin: jesse | 2006-11-14 15:53:18 -0500
144                 # * Move Text::Quoted back to being a run-time require. So that it's possible to turn off the feature if it causes your perl to segfault. (Text::Tabs is...not robust in the face of perl bugs)
145                 #eval { $content = Text::Quoted::extract($content); };
146                 #if ($@) { 1; }
147
148                 $m->comp(
149                     'ShowMessageStanza',
150                     Depth       => 0,
151                     Message     => $content,
152                     Transaction => $Transaction
153                 );
154             }
155         }
156
157     }
158
159     # if it's an image, show it as an image
160     elsif ( $message->ContentType =~ /^image\//i ) {
161         $m->out('<img src="'
162               . $AttachPath . '/'
163               . $Transaction->Id . '/'
164               . $message->Id
165               . '/">' );
166     }
167     elsif ( $message->ContentLength > 0 ) {
168         $m->out(
169             loc( 'Message body not shown because it is too large or is not plain text.' )
170         );
171     }
172 }
173
174 # }}}
175
176 $m->comp(
177     'ShowTransactionAttachments', %ARGS,
178     Parent    => $message->id,
179     ParentObj => $message
180 );
181
182 }
183 </%PERL>
184 </div>
185 <%ARGS>
186 $Ticket => undef
187 $Transaction => undef
188 $ShowHeaders => 0
189 $Collapsed => undef
190 $ShowTitleBarCommands => 1
191 $RowNum => 1
192 $AttachPath => $RT::WebPath."/Ticket/Attachment"
193 $UpdatePath => $RT::WebPath."/Ticket/Update.html"
194 $EmailRecordPath => $RT::WebPath."/Ticket/ShowEmailRecord.html"
195 $Attachments => undef
196 $AttachmentContent => undef
197 $ShowBody => 1
198 $Parent => 0
199 $ParentObj => 0
200 </%ARGS>
201 <%INIT>
202 my @DisplayHeaders=qw( _all);
203
204 if ( $Transaction->Type =~ /EmailRecord$/ ) {
205     @DisplayHeaders = qw(To Cc Bcc);
206 }
207
208 # If the transaction has anything attached to it at all
209 elsif (!$ShowHeaders)  {
210         @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject);
211 }
212 </%INIT>