]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 652165: Flagmails have a wrong Date: value
authorFrédéric Buclin <LpSolit@gmail.com>
Sat, 23 Apr 2011 17:21:04 +0000 (19:21 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Sat, 23 Apr 2011 17:21:04 +0000 (19:21 +0200)
r=wicked a=LpSolit

Bugzilla/BugMail.pm
Bugzilla/Flag.pm
template/en/default/email/newchangedmail.txt.tmpl
template/en/default/request/email.txt.tmpl

index d12836273e2f871536c4d42139edc77d1763855f..e585fb7afaa21e322045cac9036414f661666816 100644 (file)
@@ -377,6 +377,10 @@ sub Send {
     my @sent;
     my @excluded;
 
+    # The email client will display the Date: header in the desired timezone,
+    # so we can always use UTC here.
+    my $date = format_time($bug->delta_ts, '%a, %d %b %Y %T %z', 'UTC');
+
     foreach my $user_id (keys %recipients) {
         my %rels_which_want;
         my $sent_mail = 0;
@@ -428,6 +432,7 @@ sub Send {
                       bug      => $bug,
                       comments => $comments,
                       is_new   => !$start,
+                      date     => $date,
                       changer  => $changer,
                       watchers => exists $watching{$user_id} ?
                                   $watching{$user_id} : undef,
@@ -461,6 +466,7 @@ sub sendMail {
     my $bug    = $params->{bug};
     my @send_comments = @{ $params->{comments} };
     my $isnew   = $params->{is_new};
+    my $date    = $params->{date};
     my $changer = $params->{changer};
     my $watchingRef = $params->{watchers};
     my @diffparts   = @{ $params->{diff_parts} };
@@ -561,6 +567,7 @@ sub sendMail {
 
     my $vars = {
         isnew => $isnew,
+        date => $date,
         to_user => $user,
         bug => $bug,
         changedfields => \@changed_fields,
index 13dfe6ad9c05250cc796e9ad79c37174fc690e96..d6dbe1629e5df64727f1e6184dcbc3654937c7c6 100644 (file)
@@ -478,19 +478,19 @@ sub update_flags {
             # This is a new flag.
             my $flag = $class->create($new_flag, $timestamp);
             $new_flag->{id} = $flag->id;
-            $class->notify($new_flag, undef, $self);
+            $class->notify($new_flag, undef, $self, $timestamp);
         }
         else {
             my $changes = $new_flag->update($timestamp);
             if (scalar(keys %$changes)) {
-                $class->notify($new_flag, $old_flags{$new_flag->id}, $self);
+                $class->notify($new_flag, $old_flags{$new_flag->id}, $self, $timestamp);
             }
             delete $old_flags{$new_flag->id};
         }
     }
     # These flags have been deleted.
     foreach my $old_flag (values %old_flags) {
-        $class->notify(undef, $old_flag, $self);
+        $class->notify(undef, $old_flag, $self, $timestamp);
         $old_flag->remove_from_db();
     }
 
@@ -893,7 +893,7 @@ sub extract_flags_from_cgi {
 
 =over
 
-=item C<notify($flag, $bug, $attachment)>
+=item C<notify($flag, $old_flag, $object, $timestamp)>
 
 Sends an email notification about a flag being created, fulfilled
 or deleted.
@@ -903,7 +903,7 @@ or deleted.
 =cut
 
 sub notify {
-    my ($class, $flag, $old_flag, $obj) = @_;
+    my ($class, $flag, $old_flag, $obj, $timestamp) = @_;
 
     my ($bug, $attachment);
     if (blessed($obj) && $obj->isa('Bugzilla::Attachment')) {
@@ -939,6 +939,11 @@ sub notify {
     # Is there someone to notify?
     return unless ($addressee || $cc_list);
 
+    # The email client will display the Date: header in the desired timezone,
+    # so we can always use UTC here.
+    $timestamp ||= Bugzilla->dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)');
+    $timestamp = format_time($timestamp, '%a, %d %b %Y %T %z', 'UTC');
+
     # If the target bug is restricted to one or more groups, then we need
     # to make sure we don't send email about it to unauthorized users
     # on the request type's CC: list, so we have to trawl the list for users
@@ -964,10 +969,8 @@ sub notify {
     # If there are users in the CC list who don't have an account,
     # use the default language for email notifications.
     my $default_lang;
-    my $default_timezone;
     if (grep { !$_ } values %recipients) {
         $default_lang = Bugzilla::User->new()->settings->{'lang'}->{'value'};
-        $default_timezone = Bugzilla::User->new()->settings->{'timezone'}->{'value'};
     }
 
     foreach my $to (keys %recipients) {
@@ -975,13 +978,10 @@ sub notify {
         # threaded similar to normal bug change emails.
         my $thread_user_id = $recipients{$to} ? $recipients{$to}->id : 0;
 
-        my $timezone = $recipients{$to} ?
-          $recipients{$to}->settings->{'timezone'}->{'value'} : $default_timezone;
-
         my $vars = { 'flag'            => $flag,
                      'old_flag'        => $old_flag,
                      'to'              => $to,
-                     'timezone'        => $timezone,
+                     'date'            => $timestamp,
                      'bug'             => $bug,
                      'attachment'      => $attachment,
                      'threadingmarker' => build_thread_marker($bug->id, $thread_user_id) };
index 44af3055d124ab6109c1ea65aeeecc81efc491ce..05e453adae40fe24d738297dc643936c0b708146 100644 (file)
@@ -24,7 +24,7 @@
 From: [% Param('mailfrom') %]
 To: [% to_user.email %]
 Subject: [[% terms.Bug %] [%+ bug.id %]] [% 'New: ' IF isnew %][%+ bug.short_desc %]
-Date: [% bug.delta_ts FILTER time("%a, %d %b %Y %T %z", to_user.timezone) %]
+Date: [% date %]
 X-Bugzilla-Reason: [% reasonsheader %]
 X-Bugzilla-Type: [% isnew ? 'new' : 'changed' %]
 X-Bugzilla-Watch-Reason: [% reasonswatchheader %]
index 03c5e57c0855eabd226c8a9b783ffba5df5a848e..182ac09e0ad2ce1418334efa113d0f48eee997b6 100644 (file)
@@ -51,7 +51,7 @@ To: [% to %]
 Subject: [% flagtype_name %] [%+ subject_status %]: [[% terms.Bug %] [%+ bug.bug_id %]] [% bug.short_desc %]
 [%- IF attachment %] :
   [Attachment [% attachment.id %]] [% attachment.description %][% END %]
-Date: [% bug.delta_ts FILTER time("%a, %d %b %Y %T %z", timezone) %]
+Date: [% date %]
 X-Bugzilla-Type: request
 [%+ threadingmarker %]