]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 124937 - templatise show_activity.cgi. Patch by me, r=myk, bbaetz.
authorgerv%gerv.net <>
Thu, 4 Apr 2002 02:54:12 +0000 (02:54 +0000)
committergerv%gerv.net <>
Thu, 4 Apr 2002 02:54:12 +0000 (02:54 +0000)
CGI.pl
process_bug.cgi
show_activity.cgi
template/default/show/activity.html.tmpl [new file with mode: 0644]
template/default/show/bug-activity.html.tmpl [new file with mode: 0644]
template/default/show/comments.tmpl
template/default/show/multiple.tmpl
template/default/show/show_bug.html.tmpl

diff --git a/CGI.pl b/CGI.pl
index be6c95270a3e128dde182a978cde0b18c526afa8..9311ca8df17e5a43bc67a42585676efc6202490a 100644 (file)
--- a/CGI.pl
+++ b/CGI.pl
@@ -1254,8 +1254,7 @@ sub CheckIfVotedConfirmed {
 }
 
 
-
-sub DumpBugActivity {
+sub GetBugActivity {
     my ($id, $starttime) = (@_);
     my $datepart = "";
 
@@ -1264,6 +1263,7 @@ sub DumpBugActivity {
     if (defined $starttime) {
         $datepart = "and bugs_activity.bug_when > " . SqlQuote($starttime);
     }
+    
     my $query = "
         SELECT IFNULL(fielddefs.description, bugs_activity.fieldid),
                 bugs_activity.attach_id,
@@ -1279,46 +1279,54 @@ sub DumpBugActivity {
 
     SendSQL($query);
     
-    # Instead of outright printing this, we are going to store it in a $html
-    # variable and print it and the end.  This is so we can explain ? (if nesc.)
-    # at the top of the activity table rather than the botom.
-    my $html = "";
-    $html .= "<table border cellpadding=4>\n";
-    $html .= "<tr>\n";
-    $html .= "    <th>Who</th><th>What</th><th>Removed</th><th>Added</th><th>When</th>\n";
-    $html .= "</tr>\n";
-    
-    my @row;
+    my @operations;
+    my $operation = {};
+    my $changes = [];
     my $incomplete_data = 0;
-    while (@row = FetchSQLData()) {
-        my ($field,$attachid,$when,$removed,$added,$who) = (@row);
-        $field =~ s/^Attachment/<a href="attachment.cgi?id=$attachid&amp;action=view">Attachment #$attachid<\/a>/ 
-          if $attachid;
-        $removed = html_quote($removed);
-        $added = html_quote($added);
-        $removed = "&nbsp;" if $removed eq "";
-        $added = "&nbsp;" if $added eq "";
-        if ($added =~ /^\?/ || $removed =~ /^\?/) {
-            $incomplete_data = 1;
-        }
-        $html .= "<tr>\n";
-        $html .= "<td>$who</td>\n";
-        $html .= "<td>$field</td>\n";
-        $html .= "<td>$removed</td>\n";
-        $html .= "<td>$added</td>\n";
-        $html .= "<td>$when</td>\n";
-        $html .= "</tr>\n";
+    
+    while (my ($field, $attachid, $when, $removed, $added, $who) 
+                                                               = FetchSQLData())
+    {
+        my %change;
+        
+        # This gets replaced with a hyperlink in the template.
+        $field =~ s/^Attachment// if $attachid;
+
+        # Check for the results of an old Bugzilla data corruption bug
+        $incomplete_data = 1 if ($added =~ /^\?/ || $removed =~ /^\?/);
+        
+        # An operation, done by 'who' at time 'when', has a number of
+        # 'changes' associated with it.
+        # If this is the start of a new operation, store the data from the
+        # previous one, and set up the new one.
+        if ($operation->{'who'} 
+            && ($who ne $operation->{'who'} 
+                || $when ne $operation->{'when'})) 
+        {
+            $operation->{'changes'} = $changes;
+            push (@operations, $operation);
+            
+            # Create new empty anonymous data structures.
+            $operation = {};
+            $changes = [];
+        }  
+        
+        $operation->{'who'} = $who;
+        $operation->{'when'} = $when;            
+        
+        $change{'field'} = $field;
+        $change{'attachid'} = $attachid;
+        $change{'removed'} = $removed;
+        $change{'added'} = $added;
+        push (@$changes, \%change);
     }
-    $html .= "</table>\n";
-    if ($incomplete_data) {
-        print "There was a bug in older versions of Bugzilla which caused activity data \n";
-        print "to be lost if there was a large number of cc's or dependencies.  That \n";
-        print "has been fixed, however, there was some data already lost on this bug \n";
-        print "that could not be regenerated.  The changes that the script could not \n";
-        print "reliably determine are prefixed by '?'\n";
-        print "<p>\n";
+    
+    if ($operation->{'who'}) {
+        $operation->{'changes'} = $changes;
+        push (@operations, $operation);
     }
-    print $html;
+    
+    return(\@operations, $incomplete_data);
 }
 
 
index 945f02c60d3158261f2dca412802f84d8f1a960e..561db45e71689df4bb39669a43c64eb3ed460983 100755 (executable)
@@ -961,14 +961,21 @@ Someone else has made changes to this bug at the same time you were trying to.
 The changes made were:
 <p>
 ";
-        DumpBugActivity($id, $::FORM{'delta_ts'});
+        use vars qw($template $vars);
+        
+        ($vars->{'operations'}, $vars->{'incomplete_data'}) = 
+                             GetBugActivity($::FORM{'id'}, $::FORM{'delta_ts'});
+
+        $template->process("show/activity.html.tmpl", $vars)
+          || DisplayError("Template process failed: " . $template->error())
+          && exit;
+          
         my $comments = GetComments($id);
         my $longchanged = 0;
 
         if (scalar(@$comments) > $::FORM{'longdesclength'}) {
             $longchanged = 1;
-            print "<P>Added text to the long description:<blockquote>";
-            use vars qw($template $vars);
+            print "<P>Added comments:<blockquote>";
             $vars->{'start_at'} = $::FORM{'longdesclength'};
             $vars->{'comments'} = $comments;   
             $vars->{'quoteUrls'} = \&quoteUrls;        
@@ -995,7 +1002,7 @@ The changes made were:
         print qq{<input type=submit value="Submit my changes anyway">\n};
         print " This will cause all of the above changes to be overwritten";
         if ($longchanged) {
-            print ", except for the changes to the description";
+            print ", except for the added comments";
         }
         print qq{.</form>\n<li><a href="show_bug.cgi?id=$id">Throw away my changes, and go revisit bug $id</a></ul>\n};
         PutFooter();
index f8c55f0a165992da36306c3c2f96816e0cea190a..ca0e52fa2908413a96519a8c2150188325619f2f 100755 (executable)
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Myk Melez <myk@mozilla.org>
+#                 Gervase Markham <gerv@gerv.net>
 
 use diagnostics;
 use strict;
 
 use lib qw(.);
+use vars qw ($template $vars);
 
 require "CGI.pl";
 
 ConnectToDatabase();
 
-######################################################################
+###############################################################################
 # Begin Data/Security Validation
-######################################################################
+###############################################################################
 
 # Check whether or not the user is currently logged in. This function 
 # sets the value of $::usergroupset, the binary number that records
@@ -44,17 +46,18 @@ quietly_check_login();
 # bug that the user is authorized to access.
 ValidateBugID($::FORM{'id'});
 
-######################################################################
+###############################################################################
 # End Data/Security Validation
-######################################################################
+###############################################################################
 
-print "Content-type: text/html\n\n";
+($vars->{'operations'}, $vars->{'incomplete_data'}) = 
+                                                 GetBugActivity($::FORM{'id'});
 
-PutHeader("Changes made to bug $::FORM{'id'}", "Activity log",
-          "Bug $::FORM{'id'}");
+$vars->{'bug_id'} = $::FORM{'id'};
 
-DumpBugActivity($::FORM{'id'});
+print "Content-type: text/html\n\n";
 
-print qq|<hr><a href="show_bug.cgi?id=$::FORM{'id'}">Back to bug $::FORM{'id'}</a>\n|;
+$template->process("show/bug-activity.html.tmpl", $vars)
+  || DisplayError("Template process failed: " . $template->error())
+  && exit;
 
-PutFooter();
diff --git a/template/default/show/activity.html.tmpl b/template/default/show/activity.html.tmpl
new file mode 100644 (file)
index 0000000..12fcc2b
--- /dev/null
@@ -0,0 +1,91 @@
+[%# The contents of this file are subject to the Mozilla Public
+  # License Version 1.1 (the "License"); you may not use this file
+  # except in compliance with the License. You may obtain a copy of
+  # the License at http://www.mozilla.org/MPL/
+  #
+  # Software distributed under the License is distributed on an "AS
+  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+  # implied. See the License for the specific language governing
+  # rights and limitations under the License.
+  #
+  # The Original Code is the Bugzilla Bug Tracking System.
+  #
+  # The Initial Developer of the Original Code is Netscape Communications
+  # Corporation. Portions created by Netscape are
+  # Copyright (C) 1998 Netscape Communications Corporation. All
+  # Rights Reserved.
+  #
+  # Contributor(s): Gervase Markham <gerv@gerv.net>
+  #%]
+
+[%# INTERFACE:
+  # operations: array of hashes. May be empty. Each has has three members:
+  #   who: string. who performed the operation
+  #   when: string. when they performed it
+  #   changes: hash. Details of what they changed. This hash has three 
+  #            compulsory and one optional member:
+  #     field: string. The name of the field
+  #     removed: string. What was removed from the field
+  #     added: string. What was added to the field
+  #     attach_id: integer. If the change was adding an attachment, its id.
+  # incomplete_data: boolean. True if some of the data is incomplete (because
+  #                  it was affected by an old Bugzilla bug.)
+  #%]
+[% IF incomplete_data %]
+  <p>
+    There used to be a bug Bugzilla which caused activity data
+    to be lost if there was a large number of cc's or dependencies.  That
+    has been fixed, however, there was some data already lost on this bug
+    that could not be regenerated.  The changes that the script could not
+    reliably determine are prefixed by '?'.
+  </p>
+[% END %]
+
+[% IF operations.size > 0 %]
+  <table border cellpadding="4">
+    <tr>
+      <th>Who</th>
+      <th>When</th>
+      <th>What</th>
+      <th>Removed</th>
+      <th>Added</th>
+    </tr>
+
+    [% FOREACH operation = operations %]     
+      <tr>
+        <td rowspan="[% operation.changes.size %]" valign="top">
+          [% operation.who %]
+        </td>
+        <td rowspan="[% operation.changes.size %]" valign="top">
+          [% operation.when %]
+        </td>
+        [% FOREACH change = operation.changes %]
+          [% "<tr>" IF loop.index > 0 %]
+            <td>
+              [% IF change.attachid %]
+                <a href="attachment.cgi?id=[% change.attachid %]&action=view">
+                Attachment #[% change.attachid %]</a>         
+              [% END %]
+              [% change.field %]
+            </td>
+            <td>
+              [% IF change.removed %]
+                [% change.removed FILTER html %]
+              [% ELSE %]
+                &nbsp;
+              [% END %]
+            </td>
+            <td>
+              [% IF change.added %]
+                [% change.added FILTER html %]
+              [% ELSE %]
+                &nbsp;
+              [% END %]
+            </td>
+          [% "</tr>" IF loop.index > 0 %]
+        [% END %]
+      </tr>
+    [% END %]
+  </table>
+[% END %]
diff --git a/template/default/show/bug-activity.html.tmpl b/template/default/show/bug-activity.html.tmpl
new file mode 100644 (file)
index 0000000..b298eb0
--- /dev/null
@@ -0,0 +1,42 @@
+[%# The contents of this file are subject to the Mozilla Public
+  # License Version 1.1 (the "License"); you may not use this file
+  # except in compliance with the License. You may obtain a copy of
+  # the License at http://www.mozilla.org/MPL/
+  #
+  # Software distributed under the License is distributed on an "AS
+  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+  # implied. See the License for the specific language governing
+  # rights and limitations under the License.
+  #
+  # The Original Code is the Bugzilla Bug Tracking System.
+  #
+  # The Initial Developer of the Original Code is Netscape Communications
+  # Corporation. Portions created by Netscape are
+  # Copyright (C) 1998 Netscape Communications Corporation. All
+  # Rights Reserved.
+  #
+  # Contributor(s): Gervase Markham <gerv@gerv.net>
+  #%]
+
+[%# INTERFACE:
+  # bug_id: integer. The bug ID.
+  #
+  # This template also needs to be called with the interface to the
+  # activity.html.tmpl template fulfilled.
+  #%]
+[% INCLUDE global/header 
+  title = "Changes made to bug $bug_id"
+  h1 = "Activity log"
+  h2 = "Bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
+ %]
+
+<br>
+
+[% INCLUDE show/activity.html.tmpl %]
+
+<p>
+  <a href="show_bug.cgi?id=[% bug_id %]">Back to bug [% bug_id %]</a>
+</p>
+
+[% INCLUDE global/footer %]
index 7bdbdc06c12ed26ae51044ef62783414c12f113e..a840d63248a2606a4428903b7c14ff9cbb490d63 100644 (file)
@@ -20,7 +20,7 @@
 
 [% DEFAULT start_at = 0 %]
 [% count = 0 %]
-[% FOREACH comment = bug.comments %]
+[% FOREACH comment = comments %]
   [% IF count >= start_at %]
     [% PROCESS a_comment %]
   [% END %]
index de5e6c251f9b637a50d41dfd131fc7ce2d2e13f6..8706d891241108c2c7da1432e0e05d2743bfa4f7 100644 (file)
     </tr>
   </table>
 
-  [% PROCESS show/comments.tmpl %]
+  [% PROCESS show/comments.tmpl 
+     comments = bug.comments %]
   
   <hr>
 [% END %]
index 994bc4ae5a30445142e92c93740ca4fab4524794..5006a92eb2fdbe6706cbcfa2ee3e1f946d47a3a7 100644 (file)
 </table>
 <hr>
 
-[% PROCESS show/comments.tmpl %]
+[% PROCESS show/comments.tmpl 
+   comments = bug.comments 
+ %]
   
 <hr>