]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Revert "Bug 1313766 - Bugzilla::Bug->send_changes() should not output HTML directly"
authorDylan William Hardison <dylan@hardison.net>
Fri, 16 Dec 2016 20:44:19 +0000 (15:44 -0500)
committerDylan William Hardison <dylan@hardison.net>
Fri, 16 Dec 2016 20:44:19 +0000 (15:44 -0500)
This reverts commit 490499f9a35b36b72c0b7b30322b9838774b93fe.

Bugzilla/Bug.pm
Bugzilla/Error/Template.pm [deleted file]
process_bug.cgi
template/en/default/bug/process/bugmail.html.tmpl

index 637d941145cec0c1bd50d6c09b15c6b290fff148..69734e6c04336746b3c06f948e6bab81d57e5510 100644 (file)
@@ -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 (file)
index a3afa7e..0000000
+++ /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
index f97d02b28279b8ce6ae48771251c462b2b36f183..80018cfb304faa33968268e8958fac328a847c0d 100755 (executable)
@@ -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)
index 0c4f2f27d96ebd69ef3d7095c686cf565307a6e9..21e4ff7b749f00590a01e82fc1417a7c0ea60809 100644 (file)
   # 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 %]