diff --git a/webtools/bugzilla/Bugzilla/BugMail.pm b/webtools/bugzilla/Bugzilla/BugMail.pm index fc6fa2666919..f1a47a3a3321 100644 --- a/webtools/bugzilla/Bugzilla/BugMail.pm +++ b/webtools/bugzilla/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; diff --git a/webtools/bugzilla/globals.pl b/webtools/bugzilla/globals.pl index 6e9dcbeba09e..ae0a5426085e 100644 --- a/webtools/bugzilla/globals.pl +++ b/webtools/bugzilla/globals.pl @@ -954,51 +954,6 @@ sub GetBugLink { } } -sub GetLongDescriptionAsText { - my ($id, $start, $end) = (@_); - my $result = ""; - my $count = 0; - my $anyprivate = 0; - my $dbh = Bugzilla->dbh; - 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, profiles " . - "WHERE profiles.userid = longdescs.who " . - "AND longdescs.bug_id = $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.) - SendSQL("SELECT count(*) FROM longdescs " . - " WHERE bug_id = $id AND bug_when <= '$start'"); - ($count) = (FetchSQLData()); - - $query .= " AND longdescs.bug_when > '$start'" - . " AND longdescs.bug_when <= '$end' "; - } - - $query .= "ORDER BY longdescs.bug_when"; - SendSQL($query); - while (MoreSQLData()) { - my ($who, $when, $text, $isprivate, $work_time, $already_wrapped) = - (FetchSQLData()); - if ($count) { - $result .= "\n\n------- Comment #$count from $who".Param('emailsuffix')." ". - Bugzilla::Util::format_time($when) . " -------\n"; - } - if (($isprivate > 0) && Param("insidergroup")) { - $anyprivate = 1; - } - $result .= ($already_wrapped ? $text : wrap_comment($text)); - $count++; - } - - return ($result, $anyprivate); -} - # Returns a list of all the legal values for a field that has a # list of legal values, like rep_platform or resolution. sub get_legal_field_values {