summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CGI.pl86
-rwxr-xr-xprocess_bug.cgi15
-rwxr-xr-xshow_activity.cgi23
-rw-r--r--template/default/show/activity.html.tmpl91
-rw-r--r--template/default/show/bug-activity.html.tmpl42
-rw-r--r--template/default/show/comments.tmpl2
-rw-r--r--template/default/show/multiple.tmpl3
-rw-r--r--template/default/show/show_bug.html.tmpl4
8 files changed, 210 insertions, 56 deletions
diff --git a/CGI.pl b/CGI.pl
index be6c95270..9311ca8df 100644
--- 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);
}
diff --git a/process_bug.cgi b/process_bug.cgi
index 945f02c60..561db45e7 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -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();
diff --git a/show_activity.cgi b/show_activity.cgi
index f8c55f0a1..ca0e52fa2 100755
--- a/show_activity.cgi
+++ b/show_activity.cgi
@@ -20,19 +20,21 @@
#
# 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
index 000000000..12fcc2b6e
--- /dev/null
+++ b/template/default/show/activity.html.tmpl
@@ -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
index 000000000..b298eb0d9
--- /dev/null
+++ b/template/default/show/bug-activity.html.tmpl
@@ -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 %]
diff --git a/template/default/show/comments.tmpl b/template/default/show/comments.tmpl
index 7bdbdc06c..a840d6324 100644
--- a/template/default/show/comments.tmpl
+++ b/template/default/show/comments.tmpl
@@ -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 %]
diff --git a/template/default/show/multiple.tmpl b/template/default/show/multiple.tmpl
index de5e6c251..8706d8912 100644
--- a/template/default/show/multiple.tmpl
+++ b/template/default/show/multiple.tmpl
@@ -136,7 +136,8 @@
</tr>
</table>
- [% PROCESS show/comments.tmpl %]
+ [% PROCESS show/comments.tmpl
+ comments = bug.comments %]
<hr>
[% END %]
diff --git a/template/default/show/show_bug.html.tmpl b/template/default/show/show_bug.html.tmpl
index 994bc4ae5..5006a92eb 100644
--- a/template/default/show/show_bug.html.tmpl
+++ b/template/default/show/show_bug.html.tmpl
@@ -488,7 +488,9 @@
</table>
<hr>
-[% PROCESS show/comments.tmpl %]
+[% PROCESS show/comments.tmpl
+ comments = bug.comments
+ %]
<hr>