From 03ad2ba8d181eeb39ce224005e348ff6f9d3b119 Mon Sep 17 00:00:00 2001 From: "gerv%gerv.net" <> Date: Thu, 4 Apr 2002 02:54:12 +0000 Subject: Bug 124937 - templatise show_activity.cgi. Patch by me, r=myk, bbaetz. --- CGI.pl | 86 ++++++++++++++------------ process_bug.cgi | 15 +++-- show_activity.cgi | 23 ++++--- template/default/show/activity.html.tmpl | 91 ++++++++++++++++++++++++++++ template/default/show/bug-activity.html.tmpl | 42 +++++++++++++ template/default/show/comments.tmpl | 2 +- template/default/show/multiple.tmpl | 3 +- template/default/show/show_bug.html.tmpl | 4 +- 8 files changed, 210 insertions(+), 56 deletions(-) create mode 100644 template/default/show/activity.html.tmpl create mode 100644 template/default/show/bug-activity.html.tmpl 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 .= "\n"; - $html .= "\n"; - $html .= " \n"; - $html .= "\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/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 .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\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 .= "
WhoWhatRemovedAddedWhen
$who$field$removed$added$when
\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 "

\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:

"; - 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 "

Added text to the long description:

"; - use vars qw($template $vars); + print "

Added comments:

"; $vars->{'start_at'} = $::FORM{'longdesclength'}; $vars->{'comments'} = $comments; $vars->{'quoteUrls'} = \"eUrls; @@ -995,7 +1002,7 @@ The changes made were: print qq{\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{.\n
  • Throw away my changes, and go revisit bug $id\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 # Myk Melez +# Gervase Markham 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|
    Back to bug $::FORM{'id'}\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 + #%] + +[%# 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 %] +

    + 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 '?'. +

    +[% END %] + +[% IF operations.size > 0 %] + + + + + + + + + + [% FOREACH operation = operations %] + + + + [% FOREACH change = operation.changes %] + [% "" IF loop.index > 0 %] + + + + [% "" IF loop.index > 0 %] + [% END %] + + [% END %] +
    WhoWhenWhatRemovedAdded
    + [% operation.who %] + + [% operation.when %] +
    + [% IF change.attachid %] + + Attachment #[% change.attachid %] + [% END %] + [% change.field %] + + [% IF change.removed %] + [% change.removed FILTER html %] + [% ELSE %] +   + [% END %] + + [% IF change.added %] + [% change.added FILTER html %] + [% ELSE %] +   + [% END %] +
    +[% 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 + #%] + +[%# 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 $bug_id" + %] + +
    + +[% INCLUDE show/activity.html.tmpl %] + +

    + Back to bug [% bug_id %] +

    + +[% 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 @@ - [% PROCESS show/comments.tmpl %] + [% PROCESS show/comments.tmpl + comments = bug.comments %]
    [% 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 @@
    -[% PROCESS show/comments.tmpl %] +[% PROCESS show/comments.tmpl + comments = bug.comments + %]
    -- cgit v1.2.1