diff options
Diffstat (limited to 'Bugzilla/BugMail.pm')
-rw-r--r-- | Bugzilla/BugMail.pm | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index fc6fa2666..f1a47a3a3 100644 --- a/Bugzilla/BugMail.pm +++ b/Bugzilla/BugMail.pm @@ -309,7 +309,7 @@ sub ProcessOneBug { } - my ($newcomments, $anyprivate) = &::GetLongDescriptionAsText($id, $start, $end); + my ($newcomments, $anyprivate) = get_comments_by_bug($id, $start, $end); ########################################################################### # Start of email filtering code @@ -736,4 +736,55 @@ sub MailPassword { MessageToMTA($msg); } +# Get bug comments for the given period and format them to be used in emails. +sub get_comments_by_bug { + my ($id, $start, $end) = @_; + my $dbh = Bugzilla->dbh; + + my $result = ""; + my $count = 0; + my $anyprivate = 0; + + my $query = 'SELECT profiles.login_name, ' . + $dbh->sql_date_format('longdescs.bug_when', '%Y.%m.%d %H:%i') . ', + longdescs.thetext, longdescs.isprivate, + longdescs.already_wrapped + FROM longdescs + INNER JOIN profiles ON profiles.userid = longdescs.who + WHERE longdescs.bug_id = ? '; + + my @args = ($id); + + # $start will be undef for new bugs, and defined for pre-existing bugs. + if ($start) { + # If $start is not NULL, obtain the count-index + # of this comment for the leading "Comment #xxx" line. + $count = $dbh->selectrow_array('SELECT COUNT(*) FROM longdescs + WHERE bug_id = ? AND bug_when <= ?', + undef, ($id, $start)); + + $query .= ' AND longdescs.bug_when > ? + AND longdescs.bug_when <= ? '; + push @args, ($start, $end); + } + + $query .= ' ORDER BY longdescs.bug_when'; + my $comments = $dbh->selectall_arrayref($query, undef, @args); + + foreach (@$comments) { + my ($who, $when, $text, $isprivate, $already_wrapped) = @$_; + if ($count) { + $result .= "\n\n------- Comment #$count from $who" . + Param('emailsuffix'). " " . format_time($when) . + " -------\n"; + } + if ($isprivate > 0 && Param('insidergroup')) { + $anyprivate = 1; + } + $result .= ($already_wrapped ? $text : wrap_comment($text)); + $count++; + } + return ($result, $anyprivate); +} + 1; |