Commit 1986e290 authored by jocuri%softhome.net's avatar jocuri%softhome.net

Patch for bug 271474: Fix SQL syntax error when updating max votes per bug in…

Patch for bug 271474: Fix SQL syntax error when updating max votes per bug in editproducts.cgi and questionable activity log entries when an admin changes the votes-to-confirm setting to a lower value and bugs get confirmed by popular vote; patch by Nick.Barnes@pobox.com, r=vladd, a=justdave.
parent f643372f
...@@ -1384,8 +1384,9 @@ if ($action eq 'update') { ...@@ -1384,8 +1384,9 @@ if ($action eq 'update') {
SendSQL("UNLOCK TABLES"); SendSQL("UNLOCK TABLES");
if ($checkvotes) { if ($checkvotes) {
print "Checking existing votes in this product for anybody who now has too many votes."; # 1. too many votes for a single user on a single bug.
if ($maxvotesperbug < $votesperuser) { if ($maxvotesperbug < $votesperuser) {
print "<br>Checking existing votes in this product for anybody who now has too many votes for a single bug.";
SendSQL("SELECT votes.who, votes.bug_id " . SendSQL("SELECT votes.who, votes.bug_id " .
"FROM votes, bugs " . "FROM votes, bugs " .
"WHERE bugs.bug_id = votes.bug_id " . "WHERE bugs.bug_id = votes.bug_id " .
...@@ -1403,6 +1404,12 @@ if ($action eq 'update') { ...@@ -1403,6 +1404,12 @@ if ($action eq 'update') {
print qq{<br>Removed votes for bug <A HREF="show_bug.cgi?id=$id">$id</A> from $name\n}; print qq{<br>Removed votes for bug <A HREF="show_bug.cgi?id=$id">$id</A> from $name\n};
} }
} }
# 2. too many total votes for a single user.
# This part doesn't work in the general case because RemoveVotes
# doesn't enforce votesperuser (except per-bug when it's less
# than maxvotesperbug). See RemoveVotes in globals.pl.
print "<br>Checking existing votes in this product for anybody who now has too many total votes.";
SendSQL("SELECT votes.who, votes.vote_count FROM votes, bugs " . SendSQL("SELECT votes.who, votes.vote_count FROM votes, bugs " .
"WHERE bugs.bug_id = votes.bug_id " . "WHERE bugs.bug_id = votes.bug_id " .
" AND bugs.product_id = $product_id"); " AND bugs.product_id = $product_id");
...@@ -1422,7 +1429,7 @@ if ($action eq 'update') { ...@@ -1422,7 +1429,7 @@ if ($action eq 'update') {
" AND bugs.product_id = $product_id " . " AND bugs.product_id = $product_id " .
" AND votes.who = $who"); " AND votes.who = $who");
while (MoreSQLData()) { while (MoreSQLData()) {
my $id = FetchSQLData(); my ($id) = FetchSQLData();
RemoveVotes($id, $who, RemoveVotes($id, $who,
"The rules for voting on this product has changed; you had too many\ntotal votes, so all votes have been removed."); "The rules for voting on this product has changed; you had too many\ntotal votes, so all votes have been removed.");
my $name = DBID_to_name($who); my $name = DBID_to_name($who);
...@@ -1430,20 +1437,18 @@ if ($action eq 'update') { ...@@ -1430,20 +1437,18 @@ if ($action eq 'update') {
} }
} }
} }
# 3. enough votes to confirm
SendSQL("SELECT bug_id FROM bugs " . SendSQL("SELECT bug_id FROM bugs " .
"WHERE product_id = $product_id " . "WHERE product_id = $product_id " .
" AND bug_status = '$::unconfirmedstate' " . " AND bug_status = '$::unconfirmedstate' " .
" AND votes >= $votestoconfirm"); " AND votes >= $votestoconfirm");
my @list; if (MoreSQLData()) {
while (MoreSQLData()) { print "<br>Checking unconfirmed bugs in this product for any which now have sufficient votes.";
push(@list, FetchOneColumn());
} }
foreach my $id (@list) { while (MoreSQLData()) {
SendSQL("SELECT who FROM votes WHERE bug_id = $id"); # The user id below is used for activity log purposes
my $who = FetchOneColumn(); CheckIfVotedConfirmed(FetchOneColumn(), Bugzilla->user->id);
CheckIfVotedConfirmed($id, $who);
} }
} }
PutTrailer($localtrailer); PutTrailer($localtrailer);
......
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