summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2016-12-16 21:44:19 +0100
committerDylan William Hardison <dylan@hardison.net>2016-12-16 21:44:19 +0100
commite0040665d073cb044bcee0aac730d8fca175d852 (patch)
tree8878b416bbff43e3e94fce4f29ff815e9b49b222
parent50fe01e3ee89cd9395dc21a739b8bc74b5c54272 (diff)
downloadbugzilla-e0040665d073cb044bcee0aac730d8fca175d852.tar.gz
bugzilla-e0040665d073cb044bcee0aac730d8fca175d852.tar.xz
Revert "Bug 1313766 - Bugzilla::Bug->send_changes() should not output HTML directly"
-rw-r--r--Bugzilla/Bug.pm52
-rw-r--r--Bugzilla/Error/Template.pm26
-rwxr-xr-xprocess_bug.cgi104
-rw-r--r--template/en/default/bug/process/bugmail.html.tmpl4
4 files changed, 71 insertions, 115 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index 637d94114..69734e6c0 100644
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -1331,13 +1331,13 @@ sub remove_from_db {
#####################################################################
sub send_changes {
- my ($self, $changes) = @_;
- my @results;
+ my ($self, $changes, $vars) = @_;
+
my $user = Bugzilla->user;
- my $old_qa = $changes->{'qa_contact'}
+ my $old_qa = $changes->{'qa_contact'}
? $changes->{'qa_contact'}->[0] : '';
- my $old_own = $changes->{'assigned_to'}
+ my $old_own = $changes->{'assigned_to'}
? $changes->{'assigned_to'}->[0] : '';
my $old_cc = $changes->{cc}
? $changes->{cc}->[0] : '';
@@ -1349,15 +1349,15 @@ sub send_changes {
changer => $user,
);
- push @results, _send_bugmail(
- { id => $self->id, type => 'bug', forced => \%forced });
+ my $recipient_count = _send_bugmail(
+ { id => $self->id, type => 'bug', forced => \%forced }, $vars);
# If the bug was marked as a duplicate, we need to notify users on the
# other bug of any changes to that bug.
my $new_dup_id = $changes->{'dup_id'} ? $changes->{'dup_id'}->[1] : undef;
if ($new_dup_id) {
- push @results, _send_bugmail(
- { forced => { changer => $user }, type => "dupe", id => $new_dup_id });
+ $recipient_count += _send_bugmail(
+ { forced => { changer => $user }, type => "dupe", id => $new_dup_id }, $vars);
}
# If there were changes in dependencies, we need to notify those
@@ -1376,7 +1376,7 @@ sub send_changes {
foreach my $id (@{ $self->blocked }) {
$params->{id} = $id;
- push @results, _send_bugmail($params);
+ $recipient_count += _send_bugmail($params, $vars);
}
}
}
@@ -1394,28 +1394,37 @@ sub send_changes {
delete $changed_deps{''};
foreach my $id (sort { $a <=> $b } (keys %changed_deps)) {
- push @results, _send_bugmail(
- { forced => { changer => $user }, type => "dep", id => $id });
+ $recipient_count += _send_bugmail(
+ { forced => { changer => $user }, type => "dep", id => $id }, $vars);
}
# Sending emails for the referenced bugs.
foreach my $ref_bug_id (uniq @{ $self->{see_also_changes} || [] }) {
- push @results, _send_bugmail(
- { forced => { changer => $user }, id => $ref_bug_id });
+ $recipient_count += _send_bugmail(
+ { forced => { changer => $user }, id => $ref_bug_id }, $vars);
}
- return \@results;
+ return $recipient_count;
}
sub _send_bugmail {
- my ($params) = @_;
+ my ($params, $vars) = @_;
require Bugzilla::BugMail;
- my $sent_bugmail =
+ my $results =
Bugzilla::BugMail::Send($params->{'id'}, $params->{'forced'}, $params);
- return { params => $params, sent_bugmail => $sent_bugmail };
+ if (Bugzilla->usage_mode == USAGE_MODE_BROWSER) {
+ my $template = Bugzilla->template;
+ $vars->{$_} = $params->{$_} foreach keys %$params;
+ $vars->{'sent_bugmail'} = $results;
+ $template->process("bug/process/results.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
+ $vars->{'header_done'} = 1;
+ }
+
+ return scalar @{ $results->{sent} };
}
#####################################################################
@@ -2769,11 +2778,10 @@ sub _set_product {
if (%vars) {
$vars{product} = $product;
$vars{bug} = $self;
- require Bugzilla::Error::Template;
- die Bugzilla::Error::Template->new(
- file => "bug/process/verify-new-product.html.tmpl",
- vars => \%vars
- );
+ my $template = Bugzilla->template;
+ $template->process("bug/process/verify-new-product.html.tmpl",
+ \%vars) || ThrowTemplateError($template->error());
+ exit;
}
}
else {
diff --git a/Bugzilla/Error/Template.pm b/Bugzilla/Error/Template.pm
deleted file mode 100644
index a3afa7e4d..000000000
--- a/Bugzilla/Error/Template.pm
+++ /dev/null
@@ -1,26 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This Source Code Form is "Incompatible With Secondary Licenses", as
-# defined by the Mozilla Public License, v. 2.0.
-
-package Bugzilla::Error::Template;
-
-use 5.10.1;
-use strict;
-use warnings;
-use Moo;
-
-has 'file' => (
- is => 'ro',
- required => 1,
-);
-
-has 'vars' => (
- is => 'ro',
- default => sub { {} },
-);
-
-
-1; \ No newline at end of file
diff --git a/process_bug.cgi b/process_bug.cgi
index f97d02b28..80018cfb3 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -27,7 +27,6 @@ use Bugzilla::Status;
use Bugzilla::Token;
use Bugzilla::Hook;
-use Scalar::Util qw(blessed);
use List::MoreUtils qw(firstidx);
use Storable qw(dclone);
@@ -112,6 +111,8 @@ my $user_match_fields = {
Bugzilla::Hook::process('bug_user_match_fields', { fields => $user_match_fields });
Bugzilla::User::match_field($user_match_fields);
+print $cgi->header() unless Bugzilla->usage_mode == USAGE_MODE_EMAIL;
+
# Check for a mid-air collision. Currently this only works when updating
# an individual bug.
my $delta_ts = $cgi->param('delta_ts') || '';
@@ -157,7 +158,6 @@ if ($delta_ts) {
$cgi->param('token', issue_hash_token([$first_bug->id, $first_bug->delta_ts]));
# Warn the user about the mid-air collision and ask them what to do.
- print $cgi->header() unless Bugzilla->usage_mode == USAGE_MODE_EMAIL;
$template->process("bug/process/midair.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;
@@ -186,9 +186,6 @@ $vars->{'title_tag'} = "bug_processed";
my $action;
if (defined $cgi->param('id')) {
$action = $user->setting('post_bug_submit_action');
- if ($action ne 'nothing' && $action ne 'same_bug' && $action ne 'next_bug') {
- ThrowCodeError("invalid_post_bug_submit_action");
- }
if ($action eq 'next_bug') {
my $bug_list_obj = $user->recent_search_for($first_bug);
@@ -364,21 +361,7 @@ foreach my $b (@bug_objects) {
push(@remove_groups, $g->name) if grep { $_ eq $g->name } @unchecked_groups;
}
local $set_all_fields{groups}->{remove} = \@remove_groups;
- my $ok = eval {
- $b->set_all(\%set_all_fields);
- 1;
- };
- unless ($ok) {
- my $error = $@;
- if (blessed $error && $error->isa('Bugzilla::Error::Template')) {
- print $cgi->header();
- $template->process($error->file, $error->vars);
- exit;
- }
- else {
- die $error;
- }
- }
+ $b->set_all(\%set_all_fields);
}
if (defined $cgi->param('id')) {
@@ -393,7 +376,6 @@ if (defined $cgi->param('id')) {
##############################
# Do Actual Database Updates #
##############################
-my $sent_changes;
foreach my $bug (@bug_objects) {
my $changes = $bug->update();
@@ -407,58 +389,50 @@ foreach my $bug (@bug_objects) {
}
}
- $sent_changes = $bug->send_changes($changes);
+ my $recipient_count = $bug->send_changes($changes, $vars);
}
# Delete the session token used for the mass-change.
delete_token($token) unless $cgi->param('id');
-# BMO: add show_bug_format hook for experimental UI work
-my $format_params = {
- format => scalar $cgi->param('format'),
- ctype => scalar $cgi->param('ctype'),
-};
-Bugzilla::Hook::process('show_bug_format', $format_params);
-my $format = $template->get_format("bug/show",
- $format_params->{format},
- $format_params->{ctype});
-
-if (Bugzilla->usage_mode != USAGE_MODE_EMAIL) {
- print $cgi->header();
-
- foreach my $sent_change (@$sent_changes) {
- my $params = $sent_change->{params};
- my $sent_bugmail = $sent_change->{sent_bugmail};
- $vars->{$_} = $params->{$_} foreach keys %$params;
- $vars->{'sent_bugmail'} = $sent_bugmail;
- $template->process("bug/process/results.html.tmpl", $vars)
- || ThrowTemplateError($template->error());
- $vars->{'header_done'} = 1;
- }
-
- if ($action eq 'next_bug' or $action eq 'same_bug') {
- my $bug = $vars->{'bug'};
- if ($bug and $user->can_see_bug($bug)) {
- if ($action eq 'same_bug') {
- # $bug->update() does not update the internal structure of
- # the bug sufficiently to display the bug with the new values.
- # (That is, if we just passed in the old Bug object, we'd get
- # a lot of old values displayed.)
- $bug = Bugzilla::Bug->new($bug->id);
- $vars->{'bug'} = $bug;
- }
- $vars->{'bugs'} = [$bug];
- if ($action eq 'next_bug') {
- $vars->{'nextbug'} = $bug->id;
- }
-
- $template->process($format->{template}, $vars)
- || ThrowTemplateError($template->error());
- exit;
+if (Bugzilla->usage_mode == USAGE_MODE_EMAIL) {
+ # Do nothing.
+}
+elsif ($action eq 'next_bug' or $action eq 'same_bug') {
+ my $bug = $vars->{'bug'};
+ if ($bug and $user->can_see_bug($bug)) {
+ if ($action eq 'same_bug') {
+ # $bug->update() does not update the internal structure of
+ # the bug sufficiently to display the bug with the new values.
+ # (That is, if we just passed in the old Bug object, we'd get
+ # a lot of old values displayed.)
+ $bug = new Bugzilla::Bug($bug->id);
+ $vars->{'bug'} = $bug;
+ }
+ $vars->{'bugs'} = [$bug];
+ if ($action eq 'next_bug') {
+ $vars->{'nextbug'} = $bug->id;
}
+
+ # BMO: add show_bug_format hook for experimental UI work
+ my $format_params = {
+ format => scalar $cgi->param('format'),
+ ctype => scalar $cgi->param('ctype'),
+ };
+ Bugzilla::Hook::process('show_bug_format', $format_params);
+ my $format = $template->get_format("bug/show",
+ $format_params->{format},
+ $format_params->{ctype});
+ $template->process($format->{template}, $vars)
+ || ThrowTemplateError($template->error());
+ exit;
}
+} elsif ($action ne 'nothing') {
+ ThrowCodeError("invalid_post_bug_submit_action");
+}
- # End the response page.
+# End the response page.
+unless (Bugzilla->usage_mode == USAGE_MODE_EMAIL) {
$template->process("bug/navigate.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$template->process("global/footer.html.tmpl", $vars)
diff --git a/template/en/default/bug/process/bugmail.html.tmpl b/template/en/default/bug/process/bugmail.html.tmpl
index 0c4f2f27d..21e4ff7b7 100644
--- a/template/en/default/bug/process/bugmail.html.tmpl
+++ b/template/en/default/bug/process/bugmail.html.tmpl
@@ -24,13 +24,13 @@
# sent_bugmail: The results of Bugzilla::BugMail::Send().
#%]
-[% USE Bugzilla %]
+[% USE CGI %]
[% PROCESS global/variables.none.tmpl %]
[%# hide the recipient list by default from new users %]
[% show_recipients =
user.settings.post_bug_submit_action.value == 'nothing'
- || Bugzilla.cgi.cookie('show_bugmail_recipients')
+ || CGI.cookie('show_bugmail_recipients')
|| !user.can_see_bug(mailing_bugid)
%]
[% recipient_count = sent_bugmail.sent.size %]