From 99d1623cca1ce087317080a2f95d6afb5b4834ee Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Sat, 23 Apr 2011 19:19:08 +0200 Subject: Bug 652165: Flagmails have a wrong Date: value r=wicked a=LpSolit --- Bugzilla/BugMail.pm | 11 ++++++++--- Bugzilla/Flag.pm | 22 +++++++++++----------- template/en/default/email/bugmail-header.txt.tmpl | 2 +- template/en/default/request/email.txt.tmpl | 2 +- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index 9d63b9c79..03eb1925d 100644 --- a/Bugzilla/BugMail.pm +++ b/Bugzilla/BugMail.pm @@ -224,6 +224,11 @@ 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 = $params->{dep_only} ? $end : $bug->delta_ts; + $date = format_time($date, '%a, %d %b %Y %T %z', 'UTC'); + foreach my $user_id (keys %recipients) { my %rels_which_want; my $sent_mail = 0; @@ -268,7 +273,7 @@ sub Send { { to => $user, bug => $bug, comments => $comments, - delta_ts => $params->{dep_only} ? $end : undef, + date => $date, changer => $changer, watchers => exists $watching{$user_id} ? $watching{$user_id} : undef, @@ -304,7 +309,7 @@ sub sendMail { my $user = $params->{to}; my $bug = $params->{bug}; my @send_comments = @{ $params->{comments} }; - my $delta_ts = $params->{delta_ts}; + my $date = $params->{date}; my $changer = $params->{changer}; my $watchingRef = $params->{watchers}; my @diffs = @{ $params->{diffs} }; @@ -348,7 +353,7 @@ sub sendMail { push @watchingrel, map { user_id_to_login($_) } @$watchingRef; my $vars = { - delta_ts => $delta_ts, + date => $date, to_user => $user, bug => $bug, reasons => \@reasons, diff --git a/Bugzilla/Flag.pm b/Bugzilla/Flag.pm index 8457a559c..e8d30bd20 100644 --- a/Bugzilla/Flag.pm +++ b/Bugzilla/Flag.pm @@ -480,19 +480,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 +=item C 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) }; diff --git a/template/en/default/email/bugmail-header.txt.tmpl b/template/en/default/email/bugmail-header.txt.tmpl index c2b4ea4f5..94559a942 100644 --- a/template/en/default/email/bugmail-header.txt.tmpl +++ b/template/en/default/email/bugmail-header.txt.tmpl @@ -27,7 +27,7 @@ From: [% Param('mailfrom') %] To: [% to_user.email %] Subject: [[% terms.Bug %] [%+ bug.id %]] [% 'New: ' IF isnew %][%+ bug.short_desc %] -Date: [% delta_ts || 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 %] diff --git a/template/en/default/request/email.txt.tmpl b/template/en/default/request/email.txt.tmpl index 03c5e57c0..182ac09e0 100644 --- a/template/en/default/request/email.txt.tmpl +++ b/template/en/default/request/email.txt.tmpl @@ -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 %] -- cgit v1.2.3-24-g4f1b