Commit 57394ff0 authored by lpsolit%gmail.com's avatar lpsolit%gmail.com

Bug 290513: Move CheckIfVotedConfirmed() out of CGI.pl - Patch by Frédéric…

Bug 290513: Move CheckIfVotedConfirmed() out of CGI.pl - Patch by Frédéric Buclin <LpSolit@gmail.com> r=wicked a=myk
parent 3e681ef2
...@@ -51,7 +51,7 @@ use base qw(Exporter); ...@@ -51,7 +51,7 @@ use base qw(Exporter);
@Bugzilla::Bug::EXPORT = qw( @Bugzilla::Bug::EXPORT = qw(
AppendComment ValidateComment AppendComment ValidateComment
bug_alias_to_id bug_alias_to_id
RemoveVotes RemoveVotes CheckIfVotedConfirmed
); );
use constant MAX_COMMENT_LENGTH => 65535; use constant MAX_COMMENT_LENGTH => 65535;
...@@ -927,6 +927,61 @@ sub RemoveVotes { ...@@ -927,6 +927,61 @@ sub RemoveVotes {
} }
} }
# If a user votes for a bug, or the number of votes required to
# confirm a bug has been reduced, check if the bug is now confirmed.
sub CheckIfVotedConfirmed {
my ($id, $who) = (@_);
my $dbh = Bugzilla->dbh;
my ($votes, $status, $everconfirmed, $votestoconfirm, $timestamp) =
$dbh->selectrow_array("SELECT votes, bug_status, everconfirmed, " .
" votestoconfirm, NOW() " .
"FROM bugs INNER JOIN products " .
" ON products.id = bugs.product_id " .
"WHERE bugs.bug_id = ?",
undef, $id);
my $ret = 0;
if ($votes >= $votestoconfirm && !$everconfirmed) {
if ($status eq 'UNCONFIRMED') {
my $fieldid = &::GetFieldID("bug_status");
$dbh->do("UPDATE bugs SET bug_status = 'NEW', everconfirmed = 1, " .
"delta_ts = ? WHERE bug_id = ?",
undef, ($timestamp, $id));
$dbh->do("INSERT INTO bugs_activity " .
"(bug_id, who, bug_when, fieldid, removed, added) " .
"VALUES (?, ?, ?, ?, ?, ?)",
undef, ($id, $who, $timestamp, $fieldid, 'UNCONFIRMED', 'NEW'));
}
else {
$dbh->do("UPDATE bugs SET everconfirmed = 1, delta_ts = ? " .
"WHERE bug_id = ?", undef, ($timestamp, $id));
}
my $fieldid = &::GetFieldID("everconfirmed");
$dbh->do("INSERT INTO bugs_activity " .
"(bug_id, who, bug_when, fieldid, removed, added) " .
"VALUES (?, ?, ?, ?, ?, ?)",
undef, ($id, $who, $timestamp, $fieldid, '0', '1'));
AppendComment($id, &::DBID_to_name($who),
"*** This bug has been confirmed by popular vote. ***",
0, $timestamp);
my $template = Bugzilla->template;
my $vars = $::vars;
$vars->{'type'} = "votes";
$vars->{'id'} = $id;
$vars->{'mailrecipients'} = { 'changer' => $who };
$template->process("bug/process/results.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$ret = 1;
}
return $ret;
}
sub AUTOLOAD { sub AUTOLOAD {
use vars qw($AUTOLOAD); use vars qw($AUTOLOAD);
my $attr = $AUTOLOAD; my $attr = $AUTOLOAD;
......
...@@ -211,45 +211,6 @@ sub PutFooter { ...@@ -211,45 +211,6 @@ sub PutFooter {
|| ThrowTemplateError($::template->error()); || ThrowTemplateError($::template->error());
} }
sub CheckIfVotedConfirmed {
my ($id, $who) = (@_);
PushGlobalSQLState();
SendSQL("SELECT bugs.votes, bugs.bug_status, products.votestoconfirm, " .
" bugs.everconfirmed, NOW() " .
"FROM bugs INNER JOIN products ON products.id = bugs.product_id " .
"WHERE bugs.bug_id = $id");
my ($votes, $status, $votestoconfirm, $everconfirmed, $timestamp) = (FetchSQLData());
my $sql_timestamp = SqlQuote($timestamp);
my $ret = 0;
if ($votes >= $votestoconfirm && $status eq 'UNCONFIRMED') {
SendSQL("UPDATE bugs SET bug_status = 'NEW', everconfirmed = 1, " .
"delta_ts = $sql_timestamp WHERE bug_id = $id");
my $fieldid = GetFieldID("bug_status");
SendSQL("INSERT INTO bugs_activity " .
"(bug_id, who, bug_when, fieldid, removed, added) VALUES " .
"($id, $who, $sql_timestamp, $fieldid, 'UNCONFIRMED', 'NEW')");
if (!$everconfirmed) {
$fieldid = GetFieldID("everconfirmed");
SendSQL("INSERT INTO bugs_activity " .
"(bug_id, who, bug_when, fieldid, removed, added) VALUES " .
"($id, $who, $sql_timestamp, $fieldid, '0', '1')");
}
AppendComment($id, DBID_to_name($who),
"*** This bug has been confirmed by popular vote. ***",
0, $timestamp);
$vars->{'type'} = "votes";
$vars->{'id'} = $id;
$vars->{'mailrecipients'} = { 'changer' => $who };
$template->process("bug/process/results.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$ret = 1;
}
PopGlobalSQLState();
return $ret;
}
sub LogActivityEntry { sub LogActivityEntry {
my ($i,$col,$removed,$added,$whoid,$timestamp) = @_; my ($i,$col,$removed,$added,$whoid,$timestamp) = @_;
# in the case of CCs, deps, and keywords, there's a possibility that someone # in the case of CCs, deps, and keywords, there's a possibility that someone
......
...@@ -28,6 +28,7 @@ use lib "."; ...@@ -28,6 +28,7 @@ use lib ".";
use Bugzilla; use Bugzilla;
use Bugzilla::Constants; use Bugzilla::Constants;
use Bugzilla::Bug;
require "CGI.pl"; require "CGI.pl";
...@@ -323,7 +324,8 @@ sub record_votes { ...@@ -323,7 +324,8 @@ sub record_votes {
'dependencies READ', 'groups READ', 'fielddefs READ', 'dependencies READ', 'groups READ', 'fielddefs READ',
'namedqueries READ', 'whine_queries READ', 'watch READ', 'namedqueries READ', 'whine_queries READ', 'watch READ',
'profiles AS watchers READ', 'profiles AS watched READ', 'profiles AS watchers READ', 'profiles AS watched READ',
'user_group_map READ', 'bug_group_map READ'); 'user_group_map READ', 'bug_group_map READ',
'email_setting READ');
# Take note of, and delete the user's old votes from the database. # Take note of, and delete the user's old votes from the database.
SendSQL("SELECT bug_id FROM votes WHERE who = $who"); SendSQL("SELECT bug_id FROM votes WHERE who = $who");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment