X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FCGI%2FBugreport.pm;h=8d3452db06985287f465c8fa63580bd821e6b640;hb=5e94d2b493225b6e149a73da9e44bfdc46f6c4fc;hp=56a8b4023ee9983208fe40f916fcc2884ba5b66c;hpb=faa25bd6ba58375ba6c28bd7b66b463c21372f06;p=debbugs.git diff --git a/Debbugs/CGI/Bugreport.pm b/Debbugs/CGI/Bugreport.pm index 56a8b40..8d3452d 100644 --- a/Debbugs/CGI/Bugreport.pm +++ b/Debbugs/CGI/Bugreport.pm @@ -34,12 +34,13 @@ use IO::Scalar; use Params::Validate qw(validate_with :types); use Digest::MD5 qw(md5_hex); use Debbugs::Mail qw(get_addresses); -use Debbugs::MIME qw(convert_to_utf8 decode_rfc1522 create_mime_message); +use Debbugs::MIME qw(decode_rfc1522 create_mime_message); use Debbugs::CGI qw(:url :html :util); use Debbugs::Common qw(globify_scalar english_join); +use Debbugs::UTF8; use Debbugs::Config qw(:config); use POSIX qw(strftime); -use Encode qw(decode_utf8); +use Encode qw(decode_utf8 encode_utf8); BEGIN{ ($VERSION) = q$Revision: 494 $ =~ /^Revision:\s+([^\s+])/; @@ -112,10 +113,13 @@ sub display_entity { trim_headers => {type => BOOLEAN, default => 1, }, + avatars => {type => BOOLEAN, + default => 1, + }, } ); - $param{output} = globify_scalar($param{output}); + my $output = globify_scalar($param{output}); my $entity = $param{entity}; my $ref = $param{bug_num}; my $top = $param{outer}; @@ -134,22 +138,26 @@ sub display_entity { not $param{terse} and not exists $param{att}) { my $header = $entity->head; - print {$param{output}} "
$_: ) . html_escape(decode_rfc1522($head_field))."
"; + push @headers, qq($_: ) . html_escape(decode_rfc1522($head_field))."
\n"; } - print {$param{output}} join(qq(), @headers); + print {$output} join(qq(), @headers); } else { - print {$param{output}} "".html_escape(decode_rfc1522($entity->head->stringify))."\n"; + print {$output} "
".html_escape(decode_rfc1522($entity->head->stringify))."\n"; } - print {$param{output}} "
[[parts) { # We must be dealing with a nested message. if (not exists $param{att}) { - print {$param{output}} "\n"; + print {$output} "\n"; } } elsif (not $param{terse}) { my $content_type = $entity->head->get('Content-Type:') || "text/html"; @@ -273,7 +283,7 @@ sub display_entity { {$1$2$3}gxm; } if (not exists $param{att}) { - print {$param{output}} qq( \n); + print {$output} qq( \n); } } } @@ -295,9 +305,8 @@ appropriate. sub handle_email_message{ my ($email,%param) = @_; - # output needs to have the is_utf8 flag on to avoid double - # encoding - my $output = decode_utf8(''); + my $output; + my $output_fh = globify_scalar(\$output); my $parser = MIME::Parser->new(); # Because we are using memory, not tempfiles, there's no need to # clean up here like in Debbugs::MIME @@ -309,15 +318,15 @@ sub handle_email_message{ bug_num => $param{ref}, outer => 1, msg_num => $param{msg_num}, - output => \$output, + output => $output_fh, attachments => \@attachments, terse => $param{terse}, exists $param{msg}?(msg=>$param{msg}):(), exists $param{att}?(att=>$param{att}):(), exists $param{trim_headers}?(trim_headers=>$param{trim_headers}):(), + exists $param{avatars}?(avatars=>$param{avatars}):(), ); - return $output; - + return decode_utf8($output); } =head2 handle_record @@ -331,7 +340,7 @@ should be output to the browser. =cut sub handle_record{ - my ($record,$bug_number,$msg_number,$seen_msg_ids) = @_; + my ($record,$bug_number,$msg_number,$seen_msg_ids,%param) = @_; # output needs to have the is_utf8 flag on to avoid double # encoding @@ -339,7 +348,7 @@ sub handle_record{ local $_ = $record->{type}; if (/html/) { # $record->{text} is not in perl's internal encoding; convert it - my $text = decode_utf8(decode_rfc1522($record->{text})); + my $text = decode_rfc1522(decode_utf8($record->{text})); my ($time) = $text =~ //; my $class = $text =~ /^(?:Acknowledgement|Reply|Information|Report|Notification)/m ? 'infmessage':'msgreceived'; $output .= $text; @@ -394,6 +403,7 @@ sub handle_record{ $output .= handle_email_message($record->{text}, ref => $bug_number, msg_num => $msg_number, + %param, ); } elsif (/autocheck/) { @@ -421,6 +431,7 @@ sub handle_record{ $output .= handle_email_message($record->{text}, ref => $bug_number, msg_num => $msg_number, + %param, ); } else { @@ -432,8 +443,11 @@ sub handle_record{ sub __libravatar_url { my ($email) = @_; + if (not defined $config{libravatar_uri} or not length $config{libravatar_uri}) { + return undef; + } ($email) = get_addresses($email); - return "http://cdn.libravatar.org/avatar/".md5_hex(lc($email))."?d=retro"; + return $config{libravatar_uri}.$email.($config{libravatar_uri_options}//''); }\n"; } my @parts = $entity->parts; foreach my $part (@parts) { @@ -230,16 +239,17 @@ sub display_entity { bug_num => $ref, outer => 1, msg_num => $xmessage, - output => $param{output}, + output => $output, attachments => $attachments, terse => $param{terse}, exists $param{msg}?(msg=>$param{msg}):(), exists $param{att}?(att=>$param{att}):(), + exists $param{avatars}?(avatars=>$param{avatars}):(), ); - # print {$param{output}} "\n"; + # print {$output} "\n"; } if (not exists $param{att}) { - print {$param{output}} "\n"; + print {$output} "