X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FAttachment_Overlay.pm;h=9086c52f6b367194eec316e8dd45e4794fd4c1d7;hb=35effa1bf4ac902547615c816960bbc8db8e7256;hp=d31aa75ad21fb7a0ec99858b89fbad560452a367;hpb=945721f48f74d5cfffef7c7cf3a3d6bc2521f5dd;p=freeside.git diff --git a/rt/lib/RT/Attachment_Overlay.pm b/rt/lib/RT/Attachment_Overlay.pm index d31aa75ad..9086c52f6 100644 --- a/rt/lib/RT/Attachment_Overlay.pm +++ b/rt/lib/RT/Attachment_Overlay.pm @@ -112,8 +112,8 @@ sub Create { #For ease of reference my $Attachment = $args{'Attachment'}; - #if we didn't specify a ticket, we need to bail - if ( $args{'TransactionId'} == 0 ) { + #if we didn't specify a ticket, we need to bail + if ( $args{'TransactionId'} == 0 ) { $RT::Logger->crit( "RT::Attachment->Create couldn't, as you didn't specify a transaction\n" ); return (0); @@ -133,7 +133,9 @@ sub Create { =~ /^.*\bfilename="(.*)"$/ ? $1 : '' }; - if ( $Attachment->parts ) { + # If a message has no bodyhandle, that means that it has subparts (or appears to) + # and we should act accordingly. + unless ( defined $Attachment->bodyhandle ) { $id = $self->SUPER::Create( TransactionId => $args{'TransactionId'}, Parent => 0, @@ -241,6 +243,9 @@ Create an attachment exactly as specified in the named parameters. sub Import { my $self = shift; + my %args = ( ContentEncoding => 'none', + + @_ ); return($self->SUPER::Create(@_)); } @@ -309,11 +314,15 @@ sub OriginalContent { } # Encode::_utf8_on($content); - if (!$enc or $enc eq 'utf8' or $enc eq 'utf-8') { + if (!$enc || $enc eq '' || $enc eq 'utf8' || $enc eq 'utf-8') { # If we somehow fail to do the decode, at least push out the raw bits eval {return( Encode::decode_utf8($content))} || return ($content); } - Encode::from_to($content, 'utf8' => $enc); + + eval { Encode::from_to($content, 'utf8' => $enc);}; + if ($@) { + $RT::Logger->error("Could not convert attachment from assumed utf8 to '$enc' :".$@); + } return $content; } @@ -423,10 +432,13 @@ properly unfolded. =cut sub NiceHeaders { - my $self=shift; - my $hdrs=""; - for (split(/\n/,$self->Headers)) { - $hdrs.="$_\n" if /^(To|From|RT-Send-Cc|Cc|Date|Subject): /i + my $self = shift; + my $hdrs = ""; + my @hdrs = split(/\n/,$self->Headers); + while (my $str = shift @hdrs) { + next unless $str =~ /^(To|From|RT-Send-Cc|Cc|Date|Subject): /i; + $hdrs .= $str . "\n"; + $hdrs .= shift( @hdrs ) . "\n" while ($hdrs[0] =~ /^[ \t]+/); } return $hdrs; } @@ -568,4 +580,13 @@ sub ContentLength { # }}} +# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets. +sub _CacheConfig { + { + 'cache_p' => 1, + 'fast_update_p' => 1, + 'cache_for_sec' => 180, + } +} + 1;