Thanks Eric for all your help. Worked great.
Karen
Schultz, Eric wrote:
I would like to warn the user before dropping a large
attachment and
give them the opportunity to make a different selection.
I saw this in an earlier email (dated 2006-02-24 from Eric Shultz
"TruncateLongAttachments .."), where he had modified the RT
code to do
just that. I've been attempting to do the same thing in
Update.html,
but failing. I can't seem to determine the filesize with the
information at hand. Can anyone point me in the right
direction? Or is
Update.html not the place to be making these changes?
Hi Karen. Unfortunately, I've made a bunch of other changes to the
3.4.x code, so I can't easily provide you with just a simple patch.
What I can provide is the code I added for this
functionality, however,
and at about what point in the file share/html/Ticket/Update.html.
Note, however, that I did not set TruncateLongAttachments in
RT_SiteConfig.pm, I set DropLongAttachments to 1. Here are
my changes:
#1:
---
<& /Ticket/Elements/Tabs,
Ticket => $TicketObj,
Title=> $title &>
+ <& /Elements/ListActions, actions => [EMAIL PROTECTED] &>
+
---
#2:
---
<%INIT>
my $CanRespond = 0;
my $CanComment = 0;
my $title;
+ my @Actions;
my $TicketObj = LoadTicket($id);
---
#3:
---
$session{'Attachments'} = { %{$session{'Attachments'} || {}},
$ARGS{'Attach'} => $attachment };
+
+ my $latest_attach = $ARGS{'Attach'};
+
+ # Check the length of all attachments put together, compensating
+ # for encoding overhead (* .75) like is done elsewhere in the
code.
+ my $total_length = 0;
+ foreach my $key (keys %{$session{'Attachments'}}) {
+ my $length = length(
${$session{'Attachments'}}{$key}->stringify_body );
+ $total_length += int($length * .75 / 1024);
+ }
+
+ # If the total of all attachments exceeds the RT config
parameter,
+ # and we're told to drop long attachments, drop all of them.
+ # But still allow a message update.
+ my $maxsize = int($RT::MaxAttachmentSize * .75 / 1024);
+ if ($total_length > $maxsize and $RT::DropLongAttachments) {
+ $RT::Logger->warning( "Exceeded maximum attachment size. Total
length: ${total_length}k (max: ${maxsize}k)" );
+ push( @Actions, "Attachment '$latest_attach' not
uploaded: total
size of all attachments (${total_length}k) would exceed limit
(${maxsize}k)" );
+ delete ${$session{'Attachments'}}{$latest_attach}; # remove
only the latest one that tipped the scales
+ delete $ARGS{SubmitTicket}; # don't go to the Display.html
page
+ }
}
# }}}
# delete temporary storage entry to make WebUI clean
unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
delete $session{'Attachments'};
---
Let me know how that works for you.
Eric Schultz
United Online, Inc.
I neglected to mention that I also do pretty much the same thing in
Create.html, so people can't make a ticket with too large of an
attachment. The only difference is I have a commitme flag:
my $commitme = 1;
If the $total_length exceeds $maxsize, I set $commitme = 0, then later I
have this:
if ( $commitme and (!exists $ARGS{'AddMoreAttach'}) && ($ARGS{'id'} eq
'new')) {
So I don't go to Display.html yet (giving them another opportunity to
attach something smaller).
Eric Schultz
United Online, Inc.
___
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
Community help: http://wiki.bestpractical.com
Commercial support: [EMAIL PROTECTED]
Discover RT's hidden secrets with RT Essentials from O'Reilly Media.
Buy a copy at http://rtbook.bestpractical.com