diff options
author | lpsolit%gmail.com <> | 2009-07-01 13:02:20 +0200 |
---|---|---|
committer | lpsolit%gmail.com <> | 2009-07-01 13:02:20 +0200 |
commit | a0cb5b08f1d4c9218d64d8e0471ce0fb5578939c (patch) | |
tree | aad1c8bdc746ec0631d3c929ae92b29a494d6ceb /Bugzilla | |
parent | df68aac676998db0789b080a11ccceb4c57faaed (diff) | |
download | bugzilla-a0cb5b08f1d4c9218d64d8e0471ce0fb5578939c.tar.gz bugzilla-a0cb5b08f1d4c9218d64d8e0471ce0fb5578939c.tar.xz |
Bug 500900: Confirming bugs requires NEW state to exist - Patch by Frédéric Buclin <LpSolit@gmail.com> r/a=mkanat
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/Bug.pm | 48 | ||||
-rw-r--r-- | Bugzilla/Product.pm | 3 |
2 files changed, 18 insertions, 33 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 69f27ebac..a2db3572a 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -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; } diff --git a/Bugzilla/Product.pm b/Bugzilla/Product.pm index 4d0082006..1db5e79b3 100644 --- a/Bugzilla/Product.pm +++ b/Bugzilla/Product.pm @@ -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; |