]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1235395 - whine.pl broken due to a missing generate_email() routine
authorDylan Hardison <dylan@mozilla.com>
Sat, 2 Jan 2016 23:54:48 +0000 (18:54 -0500)
committerDylan Hardison <dylan@mozilla.com>
Sat, 2 Jan 2016 23:54:48 +0000 (18:54 -0500)
r=lpsolit,a=dylan

Bugzilla/Mailer.pm
Bugzilla/Product.pm

index 7ae81299fde2aee4342a37b2401fd52a0b3aab0f..5ccf2d1ed5c0a5ed44447304129e754b0ded1a61 100644 (file)
@@ -12,13 +12,14 @@ use strict;
 use warnings;
 
 use parent qw(Exporter);
-@Bugzilla::Mailer::EXPORT = qw(MessageToMTA build_thread_marker);
+@Bugzilla::Mailer::EXPORT = qw(MessageToMTA build_thread_marker generate_email);
 
 use Bugzilla::Constants;
 use Bugzilla::Error;
 use Bugzilla::Hook;
 use Bugzilla::MIME;
 use Bugzilla::Util;
+use Bugzilla::User;
 
 use Date::Format qw(time2str);
 
@@ -26,6 +27,67 @@ use Email::Sender::Simple qw(sendmail);
 use Email::Sender::Transport::SMTP::Persistent;
 use Bugzilla::Sender::Transport::Sendmail;
 
+sub generate_email {
+    my ($vars, $templates) = @_;
+    my ($lang, $email_format, $msg_text, $msg_html, $msg_header);
+    state $use_utf8 = Bugzilla->params->{'utf8'};
+
+    if ($vars->{to_user}) {
+        $lang = $vars->{to_user}->setting('lang');
+        $email_format = $vars->{to_user}->setting('email_format');
+    } else {
+        # If there are users in the CC list who don't have an account,
+        # use the default language for email notifications.
+        $lang = Bugzilla::User->new()->setting('lang');
+        # However we cannot fall back to the default email_format, since
+        # it may be HTML, and many of the includes used in the HTML
+        # template require a valid user object. Instead we fall back to
+        # the plaintext template.
+        $email_format = 'text_only';
+    }
+
+    my $template = Bugzilla->template_inner($lang);
+
+    $template->process($templates->{header}, $vars, \$msg_header)
+        || ThrowTemplateError($template->error());
+    $template->process($templates->{text}, $vars, \$msg_text)
+        || ThrowTemplateError($template->error());
+
+    my @parts = (
+        Bugzilla::MIME->create(
+            attributes => {
+                content_type => 'text/plain',
+                charset      => $use_utf8 ? 'UTF-8' : 'iso-8859-1',
+                encoding     => 'quoted-printable',
+            },
+            body_str => $msg_text,
+        )
+    );
+    if ($templates->{html} && $email_format eq 'html') {
+        $template->process($templates->{html}, $vars, \$msg_html)
+            || ThrowTemplateError($template->error());
+        push @parts, Bugzilla::MIME->create(
+            attributes => {
+                content_type => 'text/html',
+                charset      => $use_utf8 ? 'UTF-8' : 'iso-8859-1',
+                encoding     => 'quoted-printable',
+            },
+            body_str => $msg_html,
+        );
+    }
+
+    my $email = Bugzilla::MIME->new($msg_header);
+    if (scalar(@parts) == 1) {
+        $email->content_type_set($parts[0]->content_type);
+    } else {
+        $email->content_type_set('multipart/alternative');
+        # Some mail clients need same encoding for each part, even empty ones.
+        $email->charset_set('UTF-8') if $use_utf8;
+    }
+    $email->parts_set(\@parts);
+    return $email;
+}
+
 sub MessageToMTA {
     my ($msg, $send_now) = (@_);
     my $method = Bugzilla->params->{'mail_delivery_method'};
@@ -173,6 +235,10 @@ Bugzilla::Mailer - Provides methods for sending email
 
 =over
 
+=item C<generate_email>
+
+Generates a multi-part email message, using the supplied list of templates.
+
 =item C<MessageToMTA>
 
 Sends the passed message to the mail transfer agent.
index 30ebc7c6cd564080589ad04db4aedcb59d63290a..0c0cb458d554b2def12164e35d848d8a4c9583de 100644 (file)
@@ -22,7 +22,6 @@ use Bugzilla::Milestone;
 use Bugzilla::Field;
 use Bugzilla::Status;
 use Bugzilla::Install::Requirements;
-use Bugzilla::Mailer;
 use Bugzilla::Series;
 use Bugzilla::Hook;
 use Bugzilla::FlagType;