diff options
author | lpsolit%gmail.com <> | 2006-03-28 08:25:38 +0200 |
---|---|---|
committer | lpsolit%gmail.com <> | 2006-03-28 08:25:38 +0200 |
commit | 60720d6c4768e932e33d49ef3bbee91c13dc81aa (patch) | |
tree | dbc824766e5cd3b74112be72cdcbb7bd99be244a | |
parent | d9d7c1c44820cb866e3214f1a34a5dfcbc851ee1 (diff) | |
download | bugzilla-60720d6c4768e932e33d49ef3bbee91c13dc81aa.tar.gz bugzilla-60720d6c4768e932e33d49ef3bbee91c13dc81aa.tar.xz |
Bug 92515: Implement the ability to change the resolution of a bug without reopening it - Patch by Frédéric Buclin <LpSolit@gmail.com> r=wicked a=myk
-rwxr-xr-x | process_bug.cgi | 43 | ||||
-rw-r--r-- | template/en/default/bug/knob.html.tmpl | 54 | ||||
-rw-r--r-- | template/en/default/global/user-error.html.tmpl | 5 |
3 files changed, 52 insertions, 50 deletions
diff --git a/process_bug.cgi b/process_bug.cgi index d1efd3825..f19763c23 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -449,13 +449,6 @@ sub CheckCanChangeField { { return 1; } - - # A resolution change is always accompanied by a status change. So, we - # always OK resolution changes; if they really can't do this, we will - # notice it when status is checked. - if ($field eq "resolution") { - return 1; - } # END DO_NOT_CHANGE # Allow anyone to change comments. @@ -1127,7 +1120,7 @@ SWITCH: for ($cgi->param('knob')) { ChangeResolution(''); last SWITCH; }; - /^resolve$/ && CheckonComment( "resolve" ) && do { + /^(resolve|change_resolution)$/ && CheckonComment( "resolve" ) && do { # Check here, because its the only place we require the resolution check_field('resolution', scalar $cgi->param('resolution'), \@::settable_resolution); @@ -1144,11 +1137,14 @@ SWITCH: for ($cgi->param('knob')) { } } - # RESOLVED bugs should have no time remaining; - # more time can be added for the VERIFY step, if needed. - _remove_remaining_time(); + if ($cgi->param('knob') eq 'resolve') { + # RESOLVED bugs should have no time remaining; + # more time can be added for the VERIFY step, if needed. + _remove_remaining_time(); + + ChangeStatus('RESOLVED'); + } - ChangeStatus('RESOLVED'); ChangeResolution($cgi->param('resolution')); last SWITCH; }; @@ -1221,20 +1217,10 @@ SWITCH: for ($cgi->param('knob')) { ValidateBugID($duplicate, 'dup_id'); $cgi->param('dup_id', $duplicate); - # Make sure the bug is not already marked as a dupe - # (may appear in race condition) - my $dupe_of = - $dbh->selectrow_array("SELECT dupe_of FROM duplicates - WHERE dupe = ?", - undef, $cgi->param('id')); - if ($dupe_of) { - ThrowUserError("dupe_entry_found", { dupe_of => $dupe_of }); - } - # Make sure a loop isn't created when marking this bug # as duplicate. my %dupes; - $dupe_of = $duplicate; + my $dupe_of = $duplicate; my $sth = $dbh->prepare('SELECT dupe_of FROM duplicates WHERE dupe = ?'); @@ -1699,13 +1685,13 @@ foreach my $id (@idlist) { SendSQL($query); } - # Check for duplicates if the bug is [re]open + # Check for duplicates if the bug is [re]open or its resolution is changed. SendSQL("SELECT resolution FROM bugs WHERE bug_id = $id"); my $resolution = FetchOneColumn(); - if ($resolution eq '') { + if ($resolution ne 'DUPLICATE') { SendSQL("DELETE FROM duplicates WHERE dupe = $id"); } - + my $newproduct_id = $oldhash{'product_id'}; if ($cgi->param('product') ne $cgi->param('dontchange')) { my $newproduct_id = get_product_id($cgi->param('product')); @@ -2068,6 +2054,11 @@ foreach my $id (@idlist) { } if ($duplicate) { + # If the bug was already marked as a duplicate, remove + # the existing entry. + $dbh->do('DELETE FROM duplicates WHERE dupe = ?', + undef, $cgi->param('id')); + # Check to see if Reporter of this bug is reporter of Dupe SendSQL("SELECT reporter FROM bugs WHERE bug_id = " . $cgi->param('id')); diff --git a/template/en/default/bug/knob.html.tmpl b/template/en/default/bug/knob.html.tmpl index c76251ae9..9f9e73f41 100644 --- a/template/en/default/bug/knob.html.tmpl +++ b/template/en/default/bug/knob.html.tmpl @@ -72,24 +72,9 @@ Resolve [% terms.bug %], changing <a href="page.cgi?id=fields.html#resolution">resolution</a> to </label> - <select name="resolution" - onchange="document.changeform.knob[[% knum %]].checked=true"> - [% FOREACH r = bug.choices.resolution %] - <option value="[% r FILTER html %]">[% resolution_descs.${r} FILTER html %]</option> - [% END %] - </select> - <br> - [% knum = knum + 1 %] - - <input type="radio" id="knob-duplicate" name="knob" value="duplicate"> - <label for="knob-duplicate"> - Resolve [% terms.bug %], mark it as duplicate of [% terms.bug %] # - </label> - <input name="dup_id" size="6" - onchange="if (this.value != '') - {document.changeform.knob[[% knum %]].checked=true}"> - <br> - [% knum = knum + 1 %] + [% PROCESS select_resolution %] + + [% PROCESS duplicate %] [% IF bug.user.canedit %] <input type="radio" id="knob-reassign" name="knob" value="reassign"> @@ -135,6 +120,14 @@ [% ELSE %] [% IF bug.resolution != "MOVED" || (bug.resolution == "MOVED" && bug.user.canmove) %] + <input type="radio" id="knob-change-resolution" name="knob" value="change_resolution"> + <label for="knob-change-resolution"> + Change <a href="page.cgi?id=fields.html#resolution">resolution</a> to + </label> + [% PROCESS select_resolution %] + + [% PROCESS duplicate %] + <input type="radio" id="knob-reopen" name="knob" value="reopen"> <label for="knob-reopen"> Reopen [% terms.bug %] @@ -162,7 +155,6 @@ [% END %] <input type="submit" value="Commit"> - <input type="hidden" name="form_name" value="process_bug"> <p> <font size="+1"> <b> @@ -186,3 +178,27 @@ [% END %] </p> + +[%# Common actions %] + +[% BLOCK select_resolution %] + <select name="resolution" + onchange="document.changeform.knob[[% knum %]].checked=true"> + [% FOREACH r = bug.choices.resolution %] + <option value="[% r FILTER html %]">[% resolution_descs.${r} FILTER html %]</option> + [% END %] + </select> + <br> + [% knum = knum + 1 %] +[% END %] + +[% BLOCK duplicate %] + <input type="radio" id="knob-duplicate" name="knob" value="duplicate"> + <label for="knob-duplicate"> + Mark the [% terms.bug %] as duplicate of [% terms.bug %] # + </label> + <input name="dup_id" size="6" + onchange="if (this.value != '') {document.changeform.knob[[% knum %]].checked=true}"> + <br> + [% knum = knum + 1 %] +[% END %] diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index c217b2347..6e029e1f5 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -320,11 +320,6 @@ [% title = "Description Required" %] You must provide a description of the [% terms.bug %]. - [% ELSIF error == "dupe_entry_found" %] - [% title = "Already marked as duplicate" %] - This [% terms.bug %] has already been marked as a duplicate - of [% terms.bug %] [%+ dupe_of FILTER html %]. - [% ELSIF error == "dupe_not_allowed" %] [% title = "Cannot mark $terms.bugs as duplicates" %] You cannot mark [% terms.bugs %] as duplicates when |