diff options
-rw-r--r-- | CGI.pl | 86 | ||||
-rwxr-xr-x | process_bug.cgi | 15 | ||||
-rwxr-xr-x | show_activity.cgi | 23 | ||||
-rw-r--r-- | template/default/show/activity.html.tmpl | 91 | ||||
-rw-r--r-- | template/default/show/bug-activity.html.tmpl | 42 | ||||
-rw-r--r-- | template/default/show/comments.tmpl | 2 | ||||
-rw-r--r-- | template/default/show/multiple.tmpl | 3 | ||||
-rw-r--r-- | template/default/show/show_bug.html.tmpl | 4 |
8 files changed, 210 insertions, 56 deletions
@@ -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&action=view">Attachment #$attachid<\/a>/ - if $attachid; - $removed = html_quote($removed); - $added = html_quote($added); - $removed = " " if $removed eq ""; - $added = " " 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'} = \"eUrls; @@ -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 %] + + [% END %] + </td> + <td> + [% IF change.added %] + [% change.added FILTER html %] + [% ELSE %] + + [% 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> |