]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 115369 - templatise long_list.cgi.
authorgerv%gerv.net <>
Wed, 20 Feb 2002 07:22:24 +0000 (07:22 +0000)
committergerv%gerv.net <>
Wed, 20 Feb 2002 07:22:24 +0000 (07:22 +0000)
globals.pl
long_list.cgi

index a1acb5a7972d8b4f3efaefcdbb14bd20e119436f..13b925e642d0600386f8b7dbc9092f3fc36f7235 100644 (file)
@@ -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/\&#013;/\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
index 552457b0625f7e0e1bd1bb060fa3107bda1b584e..b25c10ebf7d8ca015f456472c1b4fa38531cac7a 100755 (executable)
 # 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>&nbsp;";
-        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'} = \&quoteUrls;
+$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;