From 4af907ad36860008ed905d399accbe45f55ca405 Mon Sep 17 00:00:00 2001
From: ajt <>
Date: Mon, 22 Aug 2005 13:27:48 -0800
Subject: [PATCH] [project @ 2005-08-22 14:27:48 by ajt] prettify pkgreport and
bugreport (and add css)
---
cgi/bugreport.cgi | 109 ++++++------
cgi/bugs.css | 174 ++++++++++++++++++
cgi/common.pl | 27 +--
cgi/pkgindex.cgi | 2 +-
cgi/pkgreport.cgi | 444 +++++++++++++++++++++++++++++++++++++++++++++-
cgi/smarturl.cgi | 3 +-
6 files changed, 690 insertions(+), 69 deletions(-)
create mode 100644 cgi/bugs.css
diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi
index a05aa25..5955d49 100755
--- a/cgi/bugreport.cgi
+++ b/cgi/bugreport.cgi
@@ -78,22 +78,21 @@ sub display_entity ($$$$\$\@) {
$filename = '' unless defined $filename;
$filename = decode_rfc1522($filename);
- if ($top) {
+ if ($top and not $terse) {
my $header = $entity->head;
- if ($trim_headers and not $terse) {
+ $$this .= "
\n";
}
unless (($top and $type =~ m[^text(?:/plain)?(?:;|$)]) or
@@ -103,8 +102,8 @@ sub display_entity ($$$$\$\@) {
push @dlargs, "filename=$filename" if $filename ne '';
my $printname = $filename;
$printname = 'Message part ' . ($#$attachments + 1) if $filename eq '';
- $$this .= '[$printname } .
- "($type, $disposition)]\n\n";
+ $$this .= '[$printname } .
+ "($type, $disposition)]
\n";
if ($msg and defined($att) and $att eq $#$attachments) {
my $head = $entity->head;
@@ -149,13 +148,15 @@ sub display_entity ($$$$\$\@) {
$$this .= "\n";
} else {
if (not $terse) {
- my $content_type = $entity->head->get('Content-Type:');
+ my $content_type = $entity->head->get('Content-Type:') || "text/html";
my ($charset) = $content_type =~ m/charset\s*=\s*\"?([\w-]+)\"?/i;
my $body = $entity->bodyhandle->as_string;
$body = convert_to_utf8($body,$charset) if defined $charset;
$body = htmlsanit($body);
$body =~ s,((ftp|http|https)://[\S~-]+?/?)((\>\;)?[)]?[']?[:.\,]?(\s|$)),$1$3,go;
+ $$this .= "";
$$this .= $body;
+ $$this .= "
\n";
}
}
}
@@ -164,7 +165,6 @@ my %maintainer = %{getmaintainers()};
my %pkgsrc = %{getpkgsrc()};
my $indexentry;
-my $descriptivehead;
my $showseverity;
my $tpack;
@@ -201,34 +201,50 @@ my @tpacks = splitpackages($tpack);
if ($status{severity} eq 'normal') {
$showseverity = '';
-#} elsif (isstrongseverity($status{severity})) {
-# $showseverity = "Severity: $status{severity};\n";
+} elsif (isstrongseverity($status{severity})) {
+ $showseverity = "Severity: $status{severity};\n";
} else {
- $showseverity = "Severity: $status{severity};\n";
+ $showseverity = "Severity: $status{severity};\n";
}
-$indexentry .= "$showseverity";
+$indexentry .= "
\n";
$indexentry .= htmlpackagelinks($status{package}, 0) . ";\n";
+foreach my $pkg (@tpacks) {
+ my $tmaint = defined($maintainer{$pkg}) ? $maintainer{$pkg} : '(unknown)';
+ my $tsrc = defined($pkgsrc{$pkg}) ? $pkgsrc{$pkg} : '(unknown)';
+
+ $indexentry .=
+ htmlmaintlinks(sub { $_[0] == 1 ? "Maintainer for $pkg is\n"
+ : "Maintainers for $pkg are\n" },
+ $tmaint);
+ $indexentry .= ";\nSource for $pkg is\n".
+ '
$tsrc" if ($tsrc ne "(unknown)");
+ $indexentry .= ".\n";
+}
+
+$indexentry .= "
";
$indexentry .= htmladdresslinks("Reported by: ", \&submitterurl,
$status{originator}) . ";\n";
+$indexentry .= sprintf "Date: %s.\n",
+ (strftime "%a, %e %b %Y %T UTC", localtime($status{date}));
-$indexentry .= "Owned by: " . htmlsanit($status{owner}) . ";\n"
+$indexentry .= "
Owned by: " . htmlsanit($status{owner}) . ".\n"
if length $status{owner};
-my $dummy = strftime "%a, %e %b %Y %T UTC", localtime($status{date});
-$indexentry .= "Date: ".$dummy.";\n
";
+$indexentry .= "
\n";
my @descstates;
-push @descstates, "Tags: "
- . htmlsanit(join(", ", sort(split(/\s+/, $status{tags}))))
- . ""
+$indexentry .= "$showseverity";
+$indexentry .= sprintf "Tags: %s;\n",
+ htmlsanit(join(", ", sort(split(/\s+/, $status{tags}))))
if length($status{tags});
+$indexentry .= "
" if (length($showseverity) or length($status{tags}));
my @merged= split(/ /,$status{mergedwith});
if (@merged) {
- my $descmerged = 'merged with ';
+ my $descmerged = 'Merged with ';
my $mseparator = '';
for my $m (@merged) {
$descmerged .= $mseparator."#$m";
@@ -253,26 +269,15 @@ if (@{$status{fixed_versions}}) {
}
push @descstates, $fixedtext;
} elsif (length($status{done})) {
- push @descstates, "Done: ".htmlsanit(decode_rfc1522($status{done}));
+ push @descstates, "Done: ".htmlsanit(decode_rfc1522($status{done}));
} elsif (length($status{forwarded})) {
- push @descstates, "Forwarded to ".maybelink($status{forwarded});
+ push @descstates, "Forwarded to ".maybelink($status{forwarded});
}
-$indexentry .= join(";\n", @descstates) . ";\n
" if @descstates;
+$indexentry .= join(";\n
", @descstates) . ";\n
" if @descstates;
+$indexentry .= "
\n";
-$descriptivehead = $indexentry;
-foreach my $pkg (@tpacks) {
- my $tmaint = defined($maintainer{$pkg}) ? $maintainer{$pkg} : '(unknown)';
- my $tsrc = defined($pkgsrc{$pkg}) ? $pkgsrc{$pkg} : '(unknown)';
-
- $descriptivehead .=
- htmlmaintlinks(sub { $_[0] == 1 ? "Maintainer for $pkg is\n"
- : "Maintainers for $pkg are\n" },
- $tmaint);
- $descriptivehead .= ";\nSource for $pkg is\n".
- '$tsrc" if ($tsrc ne "(unknown)");
- $descriptivehead .= ".\n
";
-}
+my $descriptivehead = $indexentry;
my $buglogfh;
if ($buglog =~ m/\.gz$/) {
@@ -284,7 +289,7 @@ if ($buglog =~ m/\.gz$/) {
$buglogfh = new IO::File "<$buglog" or &quitcgi("open log for $ref: $!");
}
if ($buglog !~ m#^\Q$gSpoolDir/db#) {
- $descriptivehead .= "\nBug is archived. No further changes may be made.
";
+ $descriptivehead .= "\nBug is archived. No further changes may be made.
";
}
@@ -376,6 +381,8 @@ sub handle_record{
$output =~ s{(Bug )(\d+)( cloned as bugs? )(\d+)(?:\-(\d+)|)}{$1.bug_links($2).$3.bug_links($4,$5)}eo;
$output .= 'Full text and rfc822 format available.';
+
+ $output = "\n" . $output . "
\n";
}
elsif (/recips/) {
my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im;
@@ -386,11 +393,10 @@ sub handle_record{
$$seen_msg_ids{$msg_id} = 1;
}
$output .= 'View this message in rfc822 format';
- $output .= '' .
- handle_email_message($record->{text},
+ $output .= handle_email_message($record->{text},
ref => $bug_number,
msg_number => $msg_number,
- ) . '
';
+ );
}
elsif (/autocheck/) {
# Do nothing
@@ -405,13 +411,12 @@ sub handle_record{
}
# Incomming Mail Message
my ($received,$hostname) = $record->{text} =~ m/Received: \(at (\S+)\) by (\S+)\;/;
- $output .= qq|\n";
- $output .= '' .
- handle_email_message($record->{text},
+ $output .= qq|Message received at |.
+ htmlsanit("$received\@$hostname") . q| (full text'.q|, mbox)'.":
\n";
+ $output .= handle_email_message($record->{text},
ref => $bug_number,
msg_number => $msg_number,
- ) . '
';
+ );
}
else {
die "Unknown record type $_";
@@ -477,11 +482,13 @@ print "Content-Type: text/html; charset=utf-8\n\n";
my $title = htmlsanit($status{subject});
+my $dummy2 = $debbugs::gWebHostBugDir;
+
print "\n";
print "\n" .
- "$debbugs::gProject $debbugs::gBug report logs - $short - $title\n" .
+ "$title - $debbugs::gProject $debbugs::gBug report logs - $short\n" .
''.
-# "" .
+ "" .
"\n" .
'' .
"\n";
@@ -489,11 +496,11 @@ print "" . "$debbugs::gProject $debbugs::gBug report logs - " . $title . "
\n";
print "$descriptivehead\n";
-printf "View this report as an mbox folder.
\n", bugurl($ref, "mbox");
+printf "\n", bugurl($ref, "mbox");
print "
";
print "$log";
print "
";
-print "Report that this bug log contains spam.
\n";
+print "Send a report that this bug log contains spam.
\n
\n";
print $tail_html;
print "\n";
diff --git a/cgi/bugs.css b/cgi/bugs.css
new file mode 100644
index 0000000..1f38134
--- /dev/null
+++ b/cgi/bugs.css
@@ -0,0 +1,174 @@
+html {
+ color: #000;
+ background: #fefefe;
+ font-family: serif;
+ margin: 1em;
+ border: 0;
+ padding: 0;
+ line-height: 120%;
+}
+
+body {
+ margin: 0;
+ border: 0;
+ padding: 0;
+}
+
+h1, h2, h3 {
+ text-align: left;
+ font-family: sans-serif;
+}
+
+h1 {
+ font-size: 150%;
+ line-height: 150%;
+}
+
+h2 {
+ font-size: 130%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+a:link {
+ color: #1b56ce;
+ font-weight: bold;
+}
+
+a:visited {
+ color:#1b56ce;
+}
+
+a:link:active, a:link:visited {
+ color:#ff0000;
+}
+
+a:link:hover, a:visited:hover {
+ color: #d81e1e;
+}
+
+a.submitter:link {
+ color: #242424;
+ font-family: sans-serif;
+ font-size: 95%;
+ text-decoration: underline;
+ font-weight: normal;
+}
+
+a.submitter:visited, a.submitter:active {
+ color: #6e6e6e;
+ font-family: sans-serif;
+ font-size: 95%;
+}
+
+a.submitter:hover, a.submitter:visited:hover {
+ color: #d01414;
+ font-family: sans-serif;
+ font-size: 95%;
+}
+
+pre.message {
+ font-family: monospace;
+ padding-top: 0;
+ margin-top: 0;
+ border-top: 0;
+}
+
+.sparse li {
+ padding-top: 1ex;
+ margin-top: 1ex;
+ border-top: 1ex;
+}
+
+a.bugtitle {
+ font-weight: bold;
+ font-size: 110%;
+}
+
+
+pre.headers {
+ font-family: sans-serif;
+ font-size: 95%;
+ color: #3c3c3c;
+ background-color: #f0f0f0;
+ padding: 2px;
+ border: #a7a7a7 1px solid;
+ line-height: 120%
+}
+
+pre.mime {
+ font-family: monospace;
+ font-size: 95%;
+ color: #797979;
+}
+
+.msgreceived {
+ font-family: sans-serif;
+ font-size: 90%;
+ color: #686868;
+}
+
+pre.tags {
+ color: #a3a3a3;
+ font-size: 90%;
+}
+
+hr.thin {
+ color: #a1a1a1;
+}
+
+em.severity {
+ color: #c31212;
+}
+
+code, address {
+ font-family: sans-serif;
+}
+
+p {
+ font-family: sans-serif;
+ font-size: 95%;
+}
+
+h2.outstanding {
+ font-family: sans-serif;
+ background-color: #f0f0f0;
+ color: #3c3c3c;
+ border: #a7a7a7 1px solid;
+ padding: 10px;
+}
+
+a.options:link, a.options:visited {
+ font-family: sans-serif;
+ background-color: #f0f0f0;
+ color: #3c3c3c;
+ text-decoration: none;
+ border-bottom: #3c3c3c 1px dotted;
+}
+
+li {
+ list-style-type: square;
+}
+
+.bugs li {
+ margin-top: 5px;
+}
+
+input {
+ border: #000 1px solid;
+ margin: 3px;
+}
+
+table.forms {
+ font-size: 95%;
+ font-family: sans-serif;
+ margin-left: 10px;
+}
+
+select {
+ margin: 3px;
+ border: #000 1px solid;
+}
+
diff --git a/cgi/common.pl b/cgi/common.pl
index 2f51b7c..85b18bb 100644
--- a/cgi/common.pl
+++ b/cgi/common.pl
@@ -183,18 +183,24 @@ sub set_option {
}
sub readparse {
- my ($in, $key, $val, %ret);
+ my ($key, $val, %ret);
+ my $in = "";
if ($#ARGV >= 0) {
- $in = join("&", map { s/&/%26/g; s/;/%3b/g; $_ } @ARGV);
- } elsif (defined $ENV{"QUERY_STRING"} && $ENV{"QUERY_STRING"} ne "") {
- $in=$ENV{QUERY_STRING};
- } elsif(defined $ENV{"REQUEST_METHOD"}
- && $ENV{"REQUEST_METHOD"} eq "POST")
+ $in .= ";" . join("&", map { s/&/%26/g; s/;/%3b/g; $_ } @ARGV);
+ }
+ if (defined $ENV{"QUERY_STRING"} && $ENV{"QUERY_STRING"} ne "") {
+ $in .= ";" . $ENV{QUERY_STRING};
+ }
+ if (defined $ENV{"REQUEST_METHOD"} && $ENV{"REQUEST_METHOD"} eq "POST"
+ && defined $ENV{"CONTENT_TYPE"}
+ && $ENV{"CONTENT_TYPE"} eq "application/x-www-form-urlencoded")
{
- read(STDIN,$in,$ENV{CONTENT_LENGTH});
- } else {
- return;
+ my $inx;
+ read(STDIN,$inx,$ENV{CONTENT_LENGTH});
+ $in .= ";" . $inx;
}
+ return unless ($in ne "");
+
if (defined $ENV{"HTTP_COOKIE"}) {
my $x = $ENV{"HTTP_COOKIE"};
$x =~ s/;\s+/;/g;
@@ -433,8 +439,9 @@ sub pkg_etc_url {
$code = "source" if ($code eq "src");
return urlsanit("/x/$code/$ref");
} else {
+ my $addurlargs = shift || 1;
my $params = "$code=$ref";
- $params .= urlargs();
+ $params .= urlargs() if $addurlargs;
return urlsanit("pkgreport.cgi" . "?" . $params);
}
}
diff --git a/cgi/pkgindex.cgi b/cgi/pkgindex.cgi
index 5854671..6086047 100755
--- a/cgi/pkgindex.cgi
+++ b/cgi/pkgindex.cgi
@@ -167,6 +167,6 @@ print $note;
print $result;
print "
\n";
-print "$tail_html";
+print "$tail_html";
print "