зеркало из https://github.com/mozilla/gecko-dev.git
Bug 303700: Eliminate deprecated Bugzilla::DB routines from votes.cgi - Patch by Fr�d�ric Buclin <LpSolit@gmail.com> r=joel a=justdave
This commit is contained in:
Родитель
1d3e25f645
Коммит
cb9c024d70
|
@ -22,9 +22,8 @@
|
|||
[%# INTERFACE:
|
||||
# bug_id: integer. ID of the bug we are listing the votes for.
|
||||
# users: list of hashes. May be empty. Each hash has two members:
|
||||
# name: string. The login name of the user whose vote is attached
|
||||
# count: integer. The number of times that user has votes for this bug.
|
||||
# total: integer. The total number of votes for this bug.
|
||||
# login_name: string. The login name of the user whose vote is attached
|
||||
# vote_count: integer. The number of times that user has votes for this bug.
|
||||
#%]
|
||||
|
||||
[% PROCESS global/variables.none.tmpl %]
|
||||
|
@ -34,6 +33,7 @@
|
|||
h2 = "$terms.Bug <a href=\"show_bug.cgi?id=$bug_id\">$bug_id</a>"
|
||||
%]
|
||||
|
||||
[% total = 0 %]
|
||||
<table cellspacing="4">
|
||||
<tr>
|
||||
<th>Who</th>
|
||||
|
@ -41,14 +41,15 @@
|
|||
</tr>
|
||||
|
||||
[% FOREACH voter = users %]
|
||||
[% total = total + voter.vote_count %]
|
||||
<tr>
|
||||
<td>
|
||||
<a href="votes.cgi?action=show_user&user=[% voter.name FILTER url_quote %]">
|
||||
[% voter.name FILTER html %]
|
||||
<a href="votes.cgi?action=show_user&user=[% voter.login_name FILTER url_quote %]">
|
||||
[% voter.login_name FILTER html %]
|
||||
</a>
|
||||
</td>
|
||||
<td align="right">
|
||||
[% voter.count %]
|
||||
[% voter.vote_count %]
|
||||
</td>
|
||||
</tr>
|
||||
[% END %]
|
||||
|
|
|
@ -388,7 +388,7 @@
|
|||
],
|
||||
|
||||
'bug/votes/list-for-bug.html.tmpl' => [
|
||||
'voter.count',
|
||||
'voter.vote_count',
|
||||
'total',
|
||||
],
|
||||
|
||||
|
|
|
@ -89,27 +89,19 @@ exit;
|
|||
# Display the names of all the people voting for this one bug.
|
||||
sub show_bug {
|
||||
my $cgi = Bugzilla->cgi;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
ThrowCodeError("missing_bug_id") unless defined $bug_id;
|
||||
|
||||
my $total = 0;
|
||||
my @users;
|
||||
|
||||
SendSQL("SELECT profiles.login_name, votes.who, votes.vote_count
|
||||
FROM votes INNER JOIN profiles
|
||||
ON profiles.userid = votes.who
|
||||
WHERE votes.bug_id = $bug_id");
|
||||
|
||||
while (MoreSQLData()) {
|
||||
my ($name, $userid, $count) = (FetchSQLData());
|
||||
push (@users, { name => $name, id => $userid, count => $count });
|
||||
$total += $count;
|
||||
}
|
||||
|
||||
$vars->{'bug_id'} = $bug_id;
|
||||
$vars->{'users'} = \@users;
|
||||
$vars->{'total'} = $total;
|
||||
|
||||
$vars->{'users'} =
|
||||
$dbh->selectall_arrayref('SELECT profiles.login_name, votes.vote_count
|
||||
FROM votes
|
||||
INNER JOIN profiles
|
||||
ON profiles.userid = votes.who
|
||||
WHERE votes.bug_id = ?',
|
||||
{'Slice' => {}}, $bug_id);
|
||||
|
||||
print $cgi->header();
|
||||
$template->process("bug/votes/list-for-bug.html.tmpl", $vars)
|
||||
|| ThrowTemplateError($template->error());
|
||||
|
@ -122,13 +114,14 @@ sub show_user {
|
|||
|
||||
my $cgi = Bugzilla->cgi;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
my $user = Bugzilla->user;
|
||||
|
||||
# If a bug_id is given, and we're editing, we'll add it to the votes list.
|
||||
$bug_id ||= "";
|
||||
|
||||
my $name = $cgi->param('user') || Bugzilla->user->login;
|
||||
my $name = $cgi->param('user') || $user->login;
|
||||
my $who = DBNameToIdAndCheck($name);
|
||||
my $userid = Bugzilla->user->id;
|
||||
my $userid = $user->id;
|
||||
|
||||
my $canedit = (Param('usevotes') && $userid == $who) ? 1 : 0;
|
||||
|
||||
|
@ -140,11 +133,12 @@ sub show_user {
|
|||
if ($canedit && $bug_id) {
|
||||
# Make sure there is an entry for this bug
|
||||
# in the vote table, just so that things display right.
|
||||
SendSQL("SELECT votes.vote_count FROM votes
|
||||
WHERE votes.bug_id = $bug_id AND votes.who = $who");
|
||||
if (!FetchOneColumn()) {
|
||||
SendSQL("INSERT INTO votes (who, bug_id, vote_count)
|
||||
VALUES ($who, $bug_id, 0)");
|
||||
my $has_votes = $dbh->selectrow_array('SELECT vote_count FROM votes
|
||||
WHERE bug_id = ? AND who = ?',
|
||||
undef, ($bug_id, $who));
|
||||
if (!$has_votes) {
|
||||
$dbh->do('INSERT INTO votes (who, bug_id, vote_count)
|
||||
VALUES (?, ?, 0)', undef, ($who, $bug_id));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,10 +146,10 @@ sub show_user {
|
|||
# we can do it all in one query.
|
||||
my %maxvotesperbug;
|
||||
if($canedit) {
|
||||
SendSQL("SELECT products.name, products.maxvotesperbug
|
||||
FROM products");
|
||||
while (MoreSQLData()) {
|
||||
my ($prod, $max) = FetchSQLData();
|
||||
my $products = $dbh->selectall_arrayref('SELECT name, maxvotesperbug
|
||||
FROM products');
|
||||
foreach (@$products) {
|
||||
my ($prod, $max) = @$_;
|
||||
$maxvotesperbug{$prod} = $max;
|
||||
}
|
||||
}
|
||||
|
@ -169,27 +163,27 @@ sub show_user {
|
|||
my @bugs;
|
||||
my $total = 0;
|
||||
my $onevoteonly = 0;
|
||||
|
||||
SendSQL("SELECT votes.bug_id, votes.vote_count, bugs.short_desc,
|
||||
bugs.bug_status
|
||||
FROM votes
|
||||
INNER JOIN bugs ON votes.bug_id = bugs.bug_id
|
||||
INNER JOIN products ON bugs.product_id = products.id
|
||||
WHERE votes.who = $who
|
||||
AND products.name = " . SqlQuote($product) .
|
||||
"ORDER BY votes.bug_id");
|
||||
|
||||
while (MoreSQLData()) {
|
||||
my ($id, $count, $summary, $status) = FetchSQLData();
|
||||
next if !defined($status);
|
||||
|
||||
my $vote_list =
|
||||
$dbh->selectall_arrayref('SELECT votes.bug_id, votes.vote_count,
|
||||
bugs.short_desc, bugs.bug_status
|
||||
FROM votes
|
||||
INNER JOIN bugs ON votes.bug_id = bugs.bug_id
|
||||
INNER JOIN products ON bugs.product_id = products.id
|
||||
WHERE votes.who = ? AND products.name = ?
|
||||
ORDER BY votes.bug_id',
|
||||
undef, ($who, $product));
|
||||
|
||||
foreach (@$vote_list) {
|
||||
my ($id, $count, $summary, $status) = @$_;
|
||||
$total += $count;
|
||||
|
||||
|
||||
# Next if user can't see this bug. So, the totals will be correct
|
||||
# and they can see there are votes 'missing', but not on what bug
|
||||
# they are. This seems a reasonable compromise; the alternative is
|
||||
# to lie in the totals.
|
||||
next if !Bugzilla->user->can_see_bug($id);
|
||||
|
||||
next if !$user->can_see_bug($id);
|
||||
|
||||
push (@bugs, { id => $id,
|
||||
summary => $summary,
|
||||
count => $count,
|
||||
|
@ -214,7 +208,7 @@ sub show_user {
|
|||
}
|
||||
}
|
||||
|
||||
SendSQL("DELETE FROM votes WHERE vote_count <= 0");
|
||||
$dbh->do('DELETE FROM votes WHERE vote_count <= 0');
|
||||
$dbh->bz_unlock_tables();
|
||||
|
||||
$vars->{'canedit'} = $canedit;
|
||||
|
@ -281,16 +275,18 @@ sub record_votes {
|
|||
# If the user is voting for bugs, make sure they aren't overstuffing
|
||||
# the ballot box.
|
||||
if (scalar(@buglist)) {
|
||||
SendSQL("SELECT bugs.bug_id, products.name, products.maxvotesperbug
|
||||
FROM bugs
|
||||
INNER JOIN products
|
||||
ON products.id = bugs.product_id
|
||||
WHERE bugs.bug_id IN (" . join(", ", @buglist) . ")");
|
||||
my $product_vote_settings =
|
||||
$dbh->selectall_arrayref('SELECT bugs.bug_id, products.name,
|
||||
products.maxvotesperbug
|
||||
FROM bugs
|
||||
INNER JOIN products
|
||||
ON products.id = bugs.product_id
|
||||
WHERE bugs.bug_id IN
|
||||
(' . join(', ', @buglist) . ')');
|
||||
|
||||
my %prodcount;
|
||||
|
||||
while (MoreSQLData()) {
|
||||
my ($id, $prod, $max) = FetchSQLData();
|
||||
foreach (@$product_vote_settings) {
|
||||
my ($id, $prod, $max) = @$_;
|
||||
$prodcount{$prod} ||= 0;
|
||||
$prodcount{$prod} += $votes{$id};
|
||||
|
||||
|
@ -324,23 +320,24 @@ sub record_votes {
|
|||
'products READ', 'fielddefs READ');
|
||||
|
||||
# Take note of, and delete the user's old votes from the database.
|
||||
SendSQL("SELECT bug_id FROM votes WHERE who = $who");
|
||||
while (MoreSQLData()) {
|
||||
my $id = FetchOneColumn();
|
||||
my $bug_list = $dbh->selectcol_arrayref('SELECT bug_id FROM votes
|
||||
WHERE who = ?', undef, $who);
|
||||
|
||||
foreach my $id (@$bug_list) {
|
||||
$affected{$id} = 1;
|
||||
}
|
||||
|
||||
SendSQL("DELETE FROM votes WHERE who = $who");
|
||||
|
||||
$dbh->do('DELETE FROM votes WHERE who = ?', undef, $who);
|
||||
|
||||
my $sth_insertVotes = $dbh->prepare('INSERT INTO votes (who, bug_id, vote_count)
|
||||
VALUES (?, ?, ?)');
|
||||
# Insert the new values in their place
|
||||
foreach my $id (@buglist) {
|
||||
if ($votes{$id} > 0) {
|
||||
SendSQL("INSERT INTO votes (who, bug_id, vote_count)
|
||||
VALUES ($who, $id, ".$votes{$id}.")");
|
||||
$sth_insertVotes->execute($who, $id, $votes{$id});
|
||||
}
|
||||
$affected{$id} = 1;
|
||||
}
|
||||
|
||||
|
||||
# Update the cached values in the bugs table
|
||||
print $cgi->header();
|
||||
my @updated_bugs = ();
|
||||
|
|
Загрузка…
Ссылка в новой задаче