diff options
author | gerv%gerv.net <> | 2002-02-20 08:22:24 +0100 |
---|---|---|
committer | gerv%gerv.net <> | 2002-02-20 08:22:24 +0100 |
commit | 05a0b649b38a3f81cebeb2b0851b3c43fe5f646e (patch) | |
tree | 590b935e091ab2dde2651ddf0dc95b1007053b06 | |
parent | 9cf1d832517e3c4174359290f72e792e99104fcd (diff) | |
download | bugzilla-05a0b649b38a3f81cebeb2b0851b3c43fe5f646e.tar.gz bugzilla-05a0b649b38a3f81cebeb2b0851b3c43fe5f646e.tar.xz |
Bug 115369 - templatise long_list.cgi.
-rw-r--r-- | globals.pl | 56 | ||||
-rwxr-xr-x | long_list.cgi | 168 |
2 files changed, 112 insertions, 112 deletions
diff --git a/globals.pl b/globals.pl index a1acb5a79..13b925e64 100644 --- a/globals.pl +++ b/globals.pl @@ -986,7 +986,7 @@ sub detaint_natural { # expressions. sub quoteUrls { - my ($knownattachments, $text) = (@_); + my ($text) = (@_); return $text unless $text; my $base = Param('urlbase'); @@ -994,8 +994,6 @@ sub quoteUrls { my $protocol = join '|', qw(afs cid ftp gopher http https mid news nntp prospero telnet wais); - my %options = ( metachars => 1, @_ ); - my $count = 0; # Now, quote any "#" characters so they won't confuse stuff later @@ -1046,9 +1044,9 @@ sub quoteUrls { $item = GetBugLink($num, $item); $things[$count++] = $item; } - while ($text =~ s/\battachment(\s|%\#)*(\d+)/"##$count##"/ei) { + while ($text =~ s/\b(Created an )?attachment(\s|%\#)*(\(id=)?(\d+)\)?/"##$count##"/ei) { my $item = $&; - my $num = $2; + my $num = $4; $item = value_quote($item); # Not really necessary, since we know # there's no special chars in it. $item = qq{<A HREF="attachment.cgi?id=$num&action=view">$item</A>}; @@ -1062,14 +1060,6 @@ sub quoteUrls { $item =~ s@\d+@$bug_link@; $things[$count++] = $item; } - while ($text =~ s/Created an attachment \(id=(\d+)\)/"##$count##"/e) { - my $item = $&; - my $num = $1; - if ($knownattachments->{$num}) { - $item = qq{<A HREF="attachment.cgi?id=$num&action=view">$item</A>}; - } - $things[$count++] = $item; - } $text = value_quote($text); $text =~ s/\
/\n/g; @@ -1155,9 +1145,9 @@ sub GetLongDescriptionAsText { my $count = 0; my ($query) = ("SELECT profiles.login_name, longdescs.bug_when, " . " longdescs.thetext " . - "FROM longdescs, profiles " . - "WHERE profiles.userid = longdescs.who " . - " AND longdescs.bug_id = $id "); + "FROM longdescs, profiles " . + "WHERE profiles.userid = longdescs.who " . + "AND longdescs.bug_id = $id "); if ($start && $start =~ /[1-9]/) { # If the start is all zeros, then don't do this (because we want to @@ -1189,11 +1179,6 @@ sub GetLongDescriptionAsHTML { my ($id, $start, $end) = (@_); my $result = ""; my $count = 0; - my %knownattachments; - SendSQL("SELECT attach_id FROM attachments WHERE bug_id = $id"); - while (MoreSQLData()) { - $knownattachments{FetchOneColumn()} = 1; - } my ($query) = ("SELECT profiles.realname, profiles.login_name, longdescs.bug_when, " . " longdescs.thetext " . @@ -1226,13 +1211,40 @@ sub GetLongDescriptionAsHTML { $result .= time2str("%Y-%m-%d %H:%M", str2time($when)) . " -------</I><BR>\n"; } - $result .= "<PRE>" . quoteUrls(\%knownattachments, $text) . "</PRE>\n"; + $result .= "<PRE>" . quoteUrls($text) . "</PRE>\n"; $count++; } return $result; } + +sub GetComments { + my ($id) = (@_); + my @comments; + + SendSQL("SELECT profiles.realname, profiles.login_name, + date_format(longdescs.bug_when,'%Y-%m-%d %H:%i'), + longdescs.thetext + FROM longdescs, profiles + WHERE profiles.userid = longdescs.who + AND longdescs.bug_id = $id + ORDER BY longdescs.bug_when"); + + while (MoreSQLData()) { + my %comment; + ($comment{'name'}, $comment{'email'}, $comment{'time'}, $comment{'body'}) = FetchSQLData(); + + $comment{'email'} .= Param('emailsuffix'); + $comment{'name'} = $comment{'name'} || $comment{'email'}; + + push (@comments, \%comment); + } + + return \@comments; +} + + # Fills in a hashtable with info about the columns for the given table in the # database. The hashtable has the following entries: # -list- the list of column names diff --git a/long_list.cgi b/long_list.cgi index 552457b06..b25c10ebf 100755 --- a/long_list.cgi +++ b/long_list.cgi @@ -19,111 +19,99 @@ # Rights Reserved. # # Contributor(s): Terry Weissman <terry@mozilla.org> - +# Gervase Markham <gerv@gerv.net> use diagnostics; use strict; - use lib qw(.); require "CGI.pl"; -# Shut up misguided -w warnings about "used only once". "use vars" just -# doesn't work for me. +use vars qw($userid $usergroupset @legal_keywords %FORM); -sub sillyness { - my $zz; - $zz = $::legal_keywords; - $zz = $::userid; - $zz = $::usergroupset; - $zz = %::FORM; -} - -print "Content-type: text/html\n"; -#Changing attachment to inline to resolve 46897 -#zach@zachlipton.com -print "Content-disposition: inline; filename=bugzilla_bug_list.html\n\n"; -PutHeader ("Full Text Bug Listing"); +# Use global template variables. +use vars qw($template $vars); ConnectToDatabase(); + quietly_check_login(); GetVersionTable(); -my $generic_query = " -select - bugs.bug_id, - bugs.product, - bugs.version, - bugs.rep_platform, - bugs.op_sys, - bugs.bug_status, - bugs.bug_severity, - bugs.priority, - bugs.resolution, - assign.login_name, - report.login_name, - bugs.component, - bugs.bug_file_loc, - bugs.short_desc, - bugs.target_milestone, - bugs.qa_contact, - bugs.status_whiteboard, - bugs.keywords -from bugs,profiles assign,profiles report -where assign.userid = bugs.assigned_to and report.userid = bugs.reporter and"; - -$::FORM{'buglist'} = "" unless exists $::FORM{'buglist'}; -foreach my $bug (split(/:/, $::FORM{'buglist'})) { - detaint_natural($bug) || next; - SendSQL(SelectVisible("$generic_query bugs.bug_id = $bug", +my $generic_query = " + SELECT + bugs.bug_id, + bugs.product, + bugs.version, + bugs.rep_platform, + bugs.op_sys, + bugs.bug_status, + bugs.resolution, + bugs.priority, + bugs.bug_severity, + bugs.component, + assign.login_name, + report.login_name, + bugs.bug_file_loc, + bugs.short_desc, + bugs.target_milestone, + bugs.qa_contact, + bugs.status_whiteboard, + bugs.keywords + FROM bugs,profiles assign,profiles report + WHERE assign.userid = bugs.assigned_to AND report.userid = bugs.reporter"; + +my $buglist = $::FORM{'buglist'} || + $::FORM{'bug_id'} || + $::FORM{'id'} || ""; + +my @bugs; + +foreach my $bug_id (split(/[:,]/, $buglist)) { + detaint_natural($bug_id) || next; + SendSQL(SelectVisible("$generic_query AND bugs.bug_id = $bug_id", $::userid, $::usergroupset)); - my @row; - if (@row = FetchSQLData()) { - my ($id, $product, $version, $platform, $opsys, $status, $severity, - $priority, $resolution, $assigned, $reporter, $component, $url, - $shortdesc, $target_milestone, $qa_contact, - $status_whiteboard, $keywords) = (@row); - print "<IMG SRC=\"1x1.gif\" WIDTH=1 HEIGHT=80 ALIGN=LEFT>\n"; - print "<TABLE WIDTH=100%>\n"; - print "<TD COLSPAN=4><TR><DIV ALIGN=CENTER><B><FONT =\"+3\">" . - html_quote($shortdesc) . - "</B></FONT></DIV>\n"; - print "<TR><TD><B>Bug#:</B> <A HREF=\"show_bug.cgi?id=$id\">$id</A>\n"; - print "<TD><B>Product:</B> $product\n"; - print "<TD><B>Version:</B> $version\n"; - print "<TD><B>Platform:</B> $platform\n"; - print "<TR><TD><B>OS/Version:</B> $opsys\n"; - print "<TD><B>Status:</B> $status\n"; - print "<TD><B>Severity:</B> $severity\n"; - print "<TD><B>Priority:</B> $priority\n"; - print "<TR><TD><B>Resolution:</B> $resolution</TD>\n"; - print "<TD><B>Assigned To:</B> $assigned\n"; - print "<TD><B>Reported By:</B> $reporter\n"; - if (Param("useqacontact")) { - my $name = ""; - if ($qa_contact > 0) { - $name = DBID_to_name($qa_contact); - } - print "<TD><B>QA Contact:</B> $name\n"; - } - print "<TR><TD COLSPAN=2><B>Component:</B> $component\n"; - if (Param("usetargetmilestone")) { - print "<TD COLSPAN=2><B>Target Milestone:</B> $target_milestone\n"; - } - print "<TR><TD COLSPAN=6><B>URL:</B> "; - print "<A HREF=\"" . $url . "\">" . html_quote($url) . "</A>\n"; - print "<TR><TD COLSPAN=6><B>Summary:</B> " . html_quote($shortdesc) . "\n"; - if (@::legal_keywords) { - print "<TR><TD><B>Keywords: </B>$keywords</TD></TR>\n"; - } - if (Param("usestatuswhiteboard")) { - print "<TR><TD COLSPAN=6><B>Status Whiteboard:" . - html_quote($status_whiteboard) . "\n"; - } - print "<TR><TD><B>Description:</B>\n</TABLE>\n"; - print GetLongDescriptionAsHTML($bug); - print "<HR>\n"; + my %bug; + my @row = FetchSQLData(); + + foreach my $field ("bug_id", "product", "version", "rep_platform", + "op_sys", "bug_status", "resolution", "priority", + "bug_severity", "component", "assigned_to", "reporter", + "bug_file_loc", "short_desc", "target_milestone", + "qa_contact", "status_whiteboard", "keywords") + { + $bug{$field} = shift @row; + } + + if ($bug{'bug_id'}) { + $bug{'comments'} = GetComments($bug{'bug_id'}); + $bug{'qa_contact'} = $bug{'qa_contact'} > 0 ? + DBID_to_name($bug{'qa_contact'}) : ""; + + push (@bugs, \%bug); } } + +# Add the list of bug hashes to the variables +$vars->{'bugs'} = \@bugs; + +$vars->{'use_keywords'} = 1 if (@::legal_keywords); + +$vars->{'quoteUrls'} = \"eUrls; +$vars->{'time2str'} = \&time2str; +$vars->{'str2time'} = \&str2time; + +# Work out a sensible filename for Content-Disposition. +# Sadly, I don't think we can tell if this was a named query. +my @time = localtime(time()); +my $date = sprintf "%04d-%02d-%02d", 1900+$time[5],$time[4]+1,$time[3]; +my $filename = "bugs-$date.html"; + +print "Content-Type: text/html\n"; +print "Content-Disposition: inline; filename=$filename\n\n"; + +# Generate and return the UI (HTML page) from the appropriate template. +$template->process("show/multiple.tmpl", $vars) + || DisplayError("Template process failed: " . $template->error()) + && exit; |