From 5e125d3a4a15eda76d4a2d7c337b8747a8a75ad6 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Wed, 1 Jul 2009 11:04:23 +0000 Subject: [PATCH] =?utf8?q?Bug=20500900:=20Confirming=20bugs=20requires=20N?= =?utf8?q?EW=20state=20to=20exist=20-=20Patch=20by=20Fr=C3=83=C2=A9d=C3=83?= =?utf8?q?=C2=A9ric=20Buclin=20=20r/a=3Dmkanat?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Bugzilla/Bug.pm | 48 +++++++------------ Bugzilla/Product.pm | 3 +- process_bug.cgi | 2 +- .../en/default/global/code-error.html.tmpl | 7 ++- votes.cgi | 2 +- 5 files changed, 26 insertions(+), 36 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 69f27ebac5..a2db3572ab 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 88292d27e1..0b1a11a5dd 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; diff --git a/process_bug.cgi b/process_bug.cgi index 83041230bb..9faaf7445a 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -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. diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl index da8f902d47..1d0eed39d8 100644 --- a/template/en/default/global/code-error.html.tmpl +++ b/template/en/default/global/code-error.html.tmpl @@ -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 %]. diff --git a/votes.cgi b/votes.cgi index 3e33d8fa9a..1c72431c45 100755 --- a/votes.cgi +++ b/votes.cgi @@ -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(); -- 2.47.3