diff options
-rwxr-xr-x | Bugzilla/Bug.pm | 57 | ||||
-rw-r--r-- | CGI.pl | 39 | ||||
-rwxr-xr-x | votes.cgi | 4 |
3 files changed, 59 insertions, 41 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 962b1de42..7d93139a1 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -51,7 +51,7 @@ use base qw(Exporter); @Bugzilla::Bug::EXPORT = qw( AppendComment ValidateComment bug_alias_to_id - RemoveVotes + RemoveVotes CheckIfVotedConfirmed ); use constant MAX_COMMENT_LENGTH => 65535; @@ -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 { use vars qw($AUTOLOAD); my $attr = $AUTOLOAD; @@ -211,45 +211,6 @@ sub PutFooter { || 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 { my ($i,$col,$removed,$added,$whoid,$timestamp) = @_; # in the case of CCs, deps, and keywords, there's a possibility that someone @@ -28,6 +28,7 @@ use lib "."; use Bugzilla; use Bugzilla::Constants; +use Bugzilla::Bug; require "CGI.pl"; @@ -323,7 +324,8 @@ sub record_votes { 'dependencies READ', 'groups READ', 'fielddefs READ', 'namedqueries READ', 'whine_queries READ', 'watch 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. SendSQL("SELECT bug_id FROM votes WHERE who = $who"); |