summaryrefslogtreecommitdiffstats
path: root/Bugzilla/BugMail.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/BugMail.pm')
-rw-r--r--Bugzilla/BugMail.pm53
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;