Bug 500900: Confirming bugs requires NEW state to exist - Patch by Frédéric Buclin <LpSolit@gmail.com> r/a=mkanat
git-svn-id: svn://10.0.0.236/branches/BUGZILLA-3_4-BRANCH@257612 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
e48828f139
commit
65f4e4dbb9
@ -3355,45 +3355,31 @@ 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;
|
||||
|
||||
# XXX - Use bug methods to update the bug status and everconfirmed.
|
||||
my $id = shift;
|
||||
my $bug = new Bugzilla::Bug($id);
|
||||
|
||||
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 (!$bug->everconfirmed && $bug->votes >= $bug->product_obj->votes_to_confirm) {
|
||||
$bug->add_comment('', { type => CMT_POPULAR_VOTES });
|
||||
$bug->update();
|
||||
|
||||
if ($status eq 'UNCONFIRMED') {
|
||||
my $fieldid = get_field_id("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'));
|
||||
if ($bug->bug_status eq 'UNCONFIRMED') {
|
||||
# Get a valid open state.
|
||||
my $new_status;
|
||||
foreach my $state (@{$bug->status->can_change_to}) {
|
||||
if ($state->is_open && $state->name ne 'UNCONFIRMED') {
|
||||
$new_status = $state->name;
|
||||
last;
|
||||
}
|
||||
}
|
||||
ThrowCodeError('no_open_bug_status') unless $new_status;
|
||||
|
||||
$bug->set_status($new_status);
|
||||
}
|
||||
else {
|
||||
$dbh->do("UPDATE bugs SET everconfirmed = 1, delta_ts = ? " .
|
||||
"WHERE bug_id = ?", undef, ($timestamp, $id));
|
||||
# If the bug is in a closed state, only set everconfirmed to 1.
|
||||
$bug->_set_everconfirmed(1);
|
||||
}
|
||||
|
||||
my $fieldid = get_field_id("everconfirmed");
|
||||
$dbh->do("INSERT INTO bugs_activity " .
|
||||
"(bug_id, who, bug_when, fieldid, removed, added) " .
|
||||
"VALUES (?, ?, ?, ?, ?, ?)",
|
||||
undef, ($id, $who, $timestamp, $fieldid, '0', '1'));
|
||||
$bug->update();
|
||||
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
@ -149,7 +149,6 @@ sub preload {
|
||||
sub update {
|
||||
my $self = shift;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
my $user = Bugzilla->user;
|
||||
|
||||
# Don't update the DB if something goes wrong below -> transaction.
|
||||
$dbh->bz_start_transaction();
|
||||
@ -242,7 +241,7 @@ sub update {
|
||||
|
||||
my @updated_bugs = ();
|
||||
foreach my $bug_id (@$bug_list) {
|
||||
my $confirmed = CheckIfVotedConfirmed($bug_id, $user->id);
|
||||
my $confirmed = CheckIfVotedConfirmed($bug_id);
|
||||
push (@updated_bugs, $bug_id) if $confirmed;
|
||||
}
|
||||
$changes->{'confirmed_bugs'} = \@updated_bugs;
|
||||
|
||||
@ -583,7 +583,7 @@ foreach my $bug (@bug_objects) {
|
||||
# a list of messages to send to voters.
|
||||
# We delay the sending of these messages till changes are committed.
|
||||
@msgs = RemoveVotes($bug->id, 0, 'votes_bug_moved');
|
||||
CheckIfVotedConfirmed($bug->id, Bugzilla->user->id);
|
||||
CheckIfVotedConfirmed($bug->id);
|
||||
}
|
||||
|
||||
# Set and update flags.
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
# in this file; if you do not wish to change it, use the "none" filter.
|
||||
#%]
|
||||
|
||||
[% PROCESS global/variables.none.tmpl %]
|
||||
[% PROCESS "global/field-descs.none.tmpl" %]
|
||||
|
||||
[% DEFAULT title = "Internal Error" %]
|
||||
|
||||
@ -334,6 +334,11 @@
|
||||
You cannot set the resolution of [% terms.abug %] to MOVED without
|
||||
moving the [% terms.bug %].
|
||||
|
||||
[% ELSIF error == "no_open_bug_status" %]
|
||||
[% title = "$terms.Bug Cannot Be Confirmed" %]
|
||||
There is no valid transition from
|
||||
[%+ get_status("UNCONFIRMED") FILTER html %] to an open state.
|
||||
|
||||
[% ELSIF error == "param_must_be_numeric" %]
|
||||
[% title = "Invalid Parameter" %]
|
||||
Invalid parameter passed to [% function FILTER html %].
|
||||
|
||||
@ -342,7 +342,7 @@ sub record_votes {
|
||||
my $v = $sth_getVotes->fetchrow_array || 0;
|
||||
$sth_updateVotes->execute($v, $id);
|
||||
|
||||
my $confirmed = CheckIfVotedConfirmed($id, $who);
|
||||
my $confirmed = CheckIfVotedConfirmed($id);
|
||||
push (@updated_bugs, $id) if $confirmed;
|
||||
}
|
||||
$dbh->bz_commit_transaction();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user