summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xBugzilla/Bug.pm47
-rwxr-xr-xbuglist.cgi2
-rw-r--r--js/field.js50
-rwxr-xr-xprocess_bug.cgi30
-rw-r--r--skins/contrib/Dusk/global.css13
-rw-r--r--skins/standard/buglist.css4
-rw-r--r--skins/standard/show_bug.css3
-rw-r--r--template/en/default/bug/edit.html.tmpl53
-rw-r--r--template/en/default/bug/knob.html.tmpl142
-rw-r--r--template/en/default/global/code-error.html.tmpl6
-rw-r--r--template/en/default/list/edit-multiple.html.tmpl94
11 files changed, 230 insertions, 214 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index e523db6ae..0087b3b85 100755
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -2560,7 +2560,7 @@ sub choices {
}
# Hack - this array contains "". See bug 106589.
- my @res = grep ($_, @{settable_resolutions()});
+ my @res = grep ($_, @{get_legal_field_values('resolution')});
$self->{'choices'} =
{
@@ -2579,22 +2579,6 @@ sub choices {
return $self->{'choices'};
}
-# List of resolutions that may be set directly by hand in the bug form.
-# 'MOVED' and 'DUPLICATE' are excluded from the list because setting
-# bugs to those resolutions requires a special process.
-sub settable_resolutions {
- my $resolutions = get_legal_field_values('resolution');
- my $pos = lsearch($resolutions, 'DUPLICATE');
- if ($pos >= 0) {
- splice(@$resolutions, $pos, 1);
- }
- $pos = lsearch($resolutions, 'MOVED');
- if ($pos >= 0) {
- splice(@$resolutions, $pos, 1);
- }
- return $resolutions;
-}
-
sub votes {
my ($self) = @_;
return 0 if $self->{error};
@@ -2624,35 +2608,6 @@ sub bug_alias_to_id {
}
#####################################################################
-# Workflow Control routines
-#####################################################################
-
-sub process_knob {
- my ($self, $action, $to_resolution, $dupe_of) = @_;
- my $dbh = Bugzilla->dbh;
-
- return if $action eq 'none';
-
- my $dupe_move_status = Bugzilla->params->{'duplicate_or_move_bug_status'};
- if ($action eq 'duplicate') {
- $self->set_status($dupe_move_status,
- {resolution => 'DUPLICATE', dupe_of => $dupe_of});
- }
- elsif ($action eq 'move') {
- $self->set_status($dupe_move_status, {resolution => 'MOVED'});
- }
- elsif ($action eq 'change_resolution') {
- $self->set_resolution($to_resolution);
- }
- elsif ($action eq 'clearresolution') {
- $self->clear_resolution();
- }
- else {
- $self->set_status($action, {resolution => $to_resolution});
- }
-}
-
-#####################################################################
# Subroutines
#####################################################################
diff --git a/buglist.cgi b/buglist.cgi
index 43d147b82..c40e65aed 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -1181,7 +1181,7 @@ if ($dotweak && scalar @bugs) {
$vars->{'op_sys'} = get_legal_field_values('op_sys');
$vars->{'priorities'} = get_legal_field_values('priority');
$vars->{'severities'} = get_legal_field_values('bug_severity');
- $vars->{'resolutions'} = Bugzilla::Bug->settable_resolutions;
+ $vars->{'resolutions'} = get_legal_field_values('resolution');
$vars->{'unconfirmedstate'} = 'UNCONFIRMED';
diff --git a/js/field.js b/js/field.js
index 6a8019dd5..044c9b6ac 100644
--- a/js/field.js
+++ b/js/field.js
@@ -246,6 +246,56 @@ function initDefaultCheckbox(field_id){
'set_default_' + field_id );
}
+function showHideStatusItems(e, dupArrayInfo) {
+ var el = document.getElementById('bug_status');
+ // finish doing stuff based on the selection.
+ if ( el ) {
+ showDuplicateItem(el);
+ YAHOO.util.Dom.setStyle('resolution_settings', 'display', 'none');
+ if (document.getElementById('resolution_settings_warning')) {
+ YAHOO.util.Dom.setStyle('resolution_settings_warning', 'display', 'none');
+ }
+ YAHOO.util.Dom.setStyle('duplicate_display', 'display', 'none');
+
+ if ( el.value == dupArrayInfo[1] && dupArrayInfo[0] == "is_duplicate" ) {
+ YAHOO.util.Dom.setStyle('resolution_settings', 'display', 'inline');
+ YAHOO.util.Dom.setStyle('resolution_settings_warning', 'display', 'block');
+ }
+ else if (close_status_array.indexOf(el.value) > -1) {
+ // hide duplicate and show resolution
+ YAHOO.util.Dom.setStyle('resolution_settings', 'display', 'inline');
+ YAHOO.util.Dom.setStyle('resolution_settings_warning', 'display', 'block');
+ }
+ }
+}
+
+function showDuplicateItem(e) {
+ var resolution = document.getElementById('resolution');
+ var bug_status = document.getElementById('bug_status');
+ if (resolution) {
+ if (resolution.value == 'DUPLICATE' && close_status_array.indexOf(bug_status.value) > -1 ) {
+ // hide resolution show duplicate
+ YAHOO.util.Dom.setStyle('duplicate_settings', 'display', 'inline');
+ YAHOO.util.Dom.setStyle('dup_id_discoverable', 'display', 'none');
+ }
+ else {
+ YAHOO.util.Dom.setStyle('duplicate_settings', 'display', 'none');
+ YAHOO.util.Dom.setStyle('dup_id_discoverable', 'display', 'block');
+ }
+ }
+ YAHOO.util.Event.preventDefault(e); //prevents the hyperlink from going to the url in the href.
+}
+
+function setResolutionToDuplicate(e, duplicate_or_move_bug_status) {
+ var status = document.getElementById('bug_status');
+ var resolution = document.getElementById('resolution');
+ YAHOO.util.Dom.setStyle('dup_id_discoverable', 'display', 'none');
+ status.value = duplicate_or_move_bug_status;
+ resolution.value = "DUPLICATE";
+ showHideStatusItems("", ["",""]);
+ YAHOO.util.Event.preventDefault(e);
+}
+
function setDefaultCheckbox(e, field_id ) {
var el = document.getElementById(field_id);
var elLabel = document.getElementById(field_id + "_label");
diff --git a/process_bug.cgi b/process_bug.cgi
index 97cd3098d..cf24c96c9 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -495,23 +495,19 @@ if (!$cgi->param('id') && $cgi->param('dup_id')) {
# down here, because the validity of status changes depends on other fields,
# such as Target Milestone.
foreach my $b (@bug_objects) {
- if (should_set('knob')) {
- # First, get the correct resolution <select>, in case there is more
- # than one open -> closed transition allowed. Allow to fallback to
- # 'resolution' (useful when called from email_in.pl).
- my $knob = $cgi->param('knob');
- my $status = new Bugzilla::Status({name => $knob});
- my $resolution;
- if ($status) {
- $resolution = $cgi->param('resolution_knob_' . $status->id)
- || $cgi->param('resolution');
- }
- else {
- $resolution = $cgi->param('resolution_knob_change_resolution');
- }
-
- # Translate the knob values into new status and resolution values.
- $b->process_knob($knob, $resolution, scalar $cgi->param('dup_id'));
+ if (should_set('bug_status')) {
+ $b->set_status(
+ scalar $cgi->param('bug_status'),
+ {resolution => scalar $cgi->param('resolution'),
+ dupe_of => scalar $cgi->param('dup_id')}
+ );
+ }
+ elsif (should_set('resolution')) {
+ $b->set_resolution(scalar $cgi->param('resolution'),
+ {dupe_of => scalar $cgi->param('dup_id')});
+ }
+ elsif (should_set('dup_id')) {
+ $b->set_dup_id(scalar $cgi->param('dup_id'));
}
}
diff --git a/skins/contrib/Dusk/global.css b/skins/contrib/Dusk/global.css
index e13743a19..179d8f790 100644
--- a/skins/contrib/Dusk/global.css
+++ b/skins/contrib/Dusk/global.css
@@ -123,18 +123,7 @@ hr {
border-top: 1px solid #c8c8ba;
}
-/* knob */
-
-#knob {
- background-color: #e6e6d8;
- border: 1px solid #c8c8ba;
- padding: 5px;
- text-align: left;
-}
-
-#knob a {
- color: #646456;
-}
+/* knob-buttons */
#knob-buttons {
margin-top: 10px;
diff --git a/skins/standard/buglist.css b/skins/standard/buglist.css
index dc3db0e10..71206fcbd 100644
--- a/skins/standard/buglist.css
+++ b/skins/standard/buglist.css
@@ -60,3 +60,7 @@ tr.bz_secure_mode_implied td.first-child {
tr.bz_secure_mode_manual td.first-child {
}
+
+#commit, #action {
+ margin-top: .25em;
+}
diff --git a/skins/standard/show_bug.css b/skins/standard/show_bug.css
index 624a22ee2..cba882cbc 100644
--- a/skins/standard/show_bug.css
+++ b/skins/standard/show_bug.css
@@ -36,8 +36,9 @@
height: 1em;
}
-#bz_field_status {
+#duplicate_settings, #votes_container {
white-space: nowrap;
+
}
.bz_time_tracking_table {
diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl
index 8e4cc9e15..2b70b03a3 100644
--- a/template/en/default/bug/edit.html.tmpl
+++ b/template/en/default/bug/edit.html.tmpl
@@ -242,7 +242,13 @@
maxrows = 25
cols = constants.COMMENT_COLS
%]
- [% PROCESS bug/knob.html.tmpl %]
+ <br>
+ <div id="knob-buttons">
+ <input type="submit" value="Commit" id="commit">
+ [% IF bug.user.canmove %]
+ <input type="submit" name="action" id="action" value="[% Param("move-button-text") %]">
+ [% END %]
+ </div>
[% ELSE %]
<fieldset>
<legend>Note</legend>
@@ -357,9 +363,9 @@
<td class="field_label">
<label for="component" accesskey="m">
<b><a href="describecomponents.cgi?product=[% bug.product FILTER url_quote %]">
- Co<u>m</u>ponent</a>
+ Co<u>m</u>ponent</a>:
</b>
- </label>:
+ </label>
</td>
[% PROCESS select selname => "component" %]
</tr>
@@ -404,14 +410,7 @@
<b><a href="page.cgi?id=fields.html#status">Status</a></b>:
</td>
<td id="bz_field_status">
-
- [% get_status(bug.bug_status) FILTER html %]&nbsp;&nbsp;
- [% get_resolution(bug.resolution) FILTER html %]
-
- [% IF bug.resolution == "DUPLICATE" %]
- of [% terms.bug %] [%+ "${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]
- [% END %]
-
+ [% PROCESS bug/knob.html.tmpl %]
</td>
</tr>
[%###############################################################%]
@@ -422,24 +421,20 @@
<label for="priority" accesskey="i"><b><u>I</u>mportance</b></label>:
</td>
<td>
- <table>
- <tr>
- [% PROCESS select selname => "priority" %]
- [% PROCESS select selname = "bug_severity" %]
- [% IF bug.use_votes %]
- <td>
- [% IF bug.votes %]
- with
- <a href="votes.cgi?action=show_bug&amp;bug_id=[% bug.bug_id %]">
- [% bug.votes %] vote[%IF bug.votes > 1 %]s[% END %]
- </a>.
- [% END %]
- (<a href="votes.cgi?action=show_user&amp;bug_id=
- [% bug.bug_id %]#vote_[% bug.bug_id %]">vote</a>)
- </td>
- [% END %]
- </tr>
- </table>
+ [% PROCESS select selname => "priority" no_td=>1 %]
+ [% PROCESS select selname = "bug_severity" no_td=>1 %]
+ [% IF bug.use_votes %]
+ <span id="votes_container">
+ [% IF bug.votes %]
+ with
+ <a href="votes.cgi?action=show_bug&amp;bug_id=[% bug.bug_id %]">
+ [% bug.votes %] vote[%IF bug.votes > 1 %]s[% END %]
+ </a>.
+ [% END %]
+ (<a href="votes.cgi?action=show_user&amp;bug_id=
+ [% bug.bug_id %]#vote_[% bug.bug_id %]">vote</a>)
+ </span>
+ [% END %]
</td>
</tr>
diff --git a/template/en/default/bug/knob.html.tmpl b/template/en/default/bug/knob.html.tmpl
index 432e9b309..4cf6031e7 100644
--- a/template/en/default/bug/knob.html.tmpl
+++ b/template/en/default/bug/knob.html.tmpl
@@ -18,15 +18,16 @@
# Contributor(s): Gervase Markham <gerv@gerv.net>
# Vaskin Kissoyan <vkissoyan@yahoo.com>
# Frédéric Buclin <LpSolit@gmail.com>
+ # Guy Pyrzak <guy.pyrzak@gmail.com>
#%]
[% PROCESS global/variables.none.tmpl %]
-
-<br>
-<div id="knob">
- <div id="knob-options">
+<div id="status">
[% initial_action_shown = 0 %]
+ [% show_resolution = 0 %]
+ [% bug_status_select_displayed = 0 %]
+ [% closed_status_array = [] %]
[%# These actions are based on the current custom workflow. %]
[% FOREACH bug_status = bug.status.can_change_to %]
[% NEXT IF bug.isunconfirmed && bug_status.is_open && !bug.user.canconfirm %]
@@ -36,85 +37,114 @@
# for compatibility with older versions. %]
[% NEXT IF !bug.isopened && (bug.everconfirmed && bug_status.name == "UNCONFIRMED"
|| !bug.everconfirmed && bug_status.name == "REOPENED") %]
+ [% IF NOT bug_status_select_displayed %]
+ <select name="bug_status" id="bug_status">
+ [% bug_status_select_displayed = 1 %]
+ [% END %]
[% PROCESS initial_action %]
[% NEXT IF bug_status.name == bug.bug_status %]
- <input type="radio" id="knob_[% bug_status.id FILTER html %]" name="knob"
- value="[% bug_status.name FILTER html %]">
- <label for="knob_[% bug_status.id FILTER html %]">
- Change status to <b>[% get_status(bug_status.name) FILTER html %]</b>
- </label>
- [% IF bug.isopened && !bug_status.is_open %]
- and set the resolution to [% PROCESS select_resolution field = "knob_${bug_status.id}" %]
+ <option value="[% bug_status.name FILTER html %]">
+ [% get_status(bug_status.name) FILTER html %]
+ </option>
+ [% IF !bug_status.is_open %]
+ [% show_resolution = 1 %]
+ [% filtered_status = bug_status.name FILTER js %]
+ [% closed_status_array.push( filtered_status ) %]
[% END %]
- <br>
[% END %]
[%# These actions are special and are independent of the workflow. %]
[% IF bug.user.canedit || bug.user.isreporter %]
+ [% IF NOT bug_status_select_displayed %]
+ <select name="bug_status" id="bug_status">
+ [% bug_status_select_displayed = 1 %]
+ [% END %]
[% IF bug.isopened %]
[% IF bug.resolution %]
[% PROCESS initial_action %]
- <input type="radio" id="knob-clear" name="knob" value="clearresolution">
- <label for="knob-clear">
- Clear the resolution (remove the current resolution of
- <b>[% get_resolution(bug.resolution) FILTER html %]</b>)
- </label>
- <br>
[% END %]
- [% ELSE %]
- [% IF bug.resolution != "MOVED" || bug.user.canmove %]
+ [% ELSIF bug.resolution != "MOVED" || bug.user.canmove %]
[% PROCESS initial_action %]
- <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 field = "knob_change_resolution" %]
- <br>
- [% END %]
+ [% show_resolution = 1 %]
[% END %]
-
- [% PROCESS duplicate %]
+ [% END %]
+ [% IF bug_status_select_displayed %]
+ </select>
+ [% ELSE %]
+ [% get_status(bug.bug_status) FILTER html %]
+ [% IF bug.resolution %]
+ [%+ get_resolution(bug.resolution) FILTER html %]
+ [% IF bug.dup_id %]
+ <span id="duplicate_display">of
+ [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]</span>
+ [% END %]
+ [% END %]
[% END %]
- </div>
-
- <div id="knob-buttons">
- <input type="submit" value="Commit" id="commit">
- [% IF bug.user.canmove %]
- <input type="submit" name="action" id="action" value="[% Param("move-button-text") %]">
+ [% IF bug.user.canedit || bug.user.isreporter %]
+ [% IF show_resolution %]
+ <noscript><br>resolved&nbsp;as&nbsp;</noscript>
+ <span id="resolution_settings">[% PROCESS select_resolution %]</span>
[% END %]
- </div>
+ <noscript><br> duplicate</noscript>
+
+ <span id="duplicate_settings">of
+ <span id="dup_id_container" class="bz_default_hidden">
+ [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]
+ (<a href="#" id="dup_id_edit_action">edit</a>)
+ </span
+ ><input id="dup_id" name="dup_id" size="6"
+ value="[% bug.dup_id FILTER html %]">
+ </span>
+ <div id="dup_id_discoverable" class="bz_default_hidden">
+ <a href="#" id="dup_id_discoverable_action">Mark as Duplicate</a>
+ </div>
+ [% END %]
</div>
+<script type="text/javascript">
+ var close_status_array = new Array("[% closed_status_array.join('", "') FILTER replace(',$', '')
+ FILTER none %]");
+ YAHOO.util.Dom.setStyle('dup_id_discoverable', 'display', 'block');
+ hideEditableField( "dup_id_container", "dup_id", 'dup_id_edit_action',
+ 'dup_id', '[% bug.dup_id FILTER js %]' )
+ showHideStatusItems( "", ['[% "is_duplicate" IF bug.dup_id %]',
+ '[% bug.bug_status FILTER js %]']);
+ YAHOO.util.Event.addListener( 'bug_status', "change", showHideStatusItems,
+ ['[% "is_duplicate" IF bug.dup_id %]',
+ '[% bug.bug_status FILTER js %]']);
+ YAHOO.util.Event.addListener( 'resolution', "change", showDuplicateItem);
+ YAHOO.util.Event.addListener( 'dup_id_discoverable_action',
+ 'click',
+ setResolutionToDuplicate,
+ '[% Param('duplicate_or_move_bug_status')
+ FILTER js %]');
+ YAHOO.util.Event.addListener( window, 'load', showHideStatusItems,
+ ['[% "is_duplicate" IF bug.dup_id %]',
+ '[% bug.bug_status FILTER js %]'] );
+</script>
[%# Common actions %]
[% BLOCK initial_action %]
- [%# Only show 'Leave as' action in combination with another knob %]
[% IF !initial_action_shown %]
- <input type="radio" id="knob-leave" name="knob" value="none" checked="checked">
- <label for="knob-leave">
- Leave as <b>[% get_status(bug.bug_status) FILTER html %]&nbsp;
- [% get_resolution(bug.resolution) FILTER html %]</b>
- </label>
- <br>
+ <option selected value="[% bug.bug_status FILTER html %]">
+ [% get_status(bug.bug_status) FILTER html %]
+ </option>
+ [% IF !bug.isopened %]
+ [% show_resolution = 1 %]
+ [% filtered_status = bug.bug_status FILTER js %]
+ [% closed_status_array.push(filtered_status) %]
+ [% END %]
[% initial_action_shown = 1 %]
[% END %]
[% END %]
[% BLOCK select_resolution %]
- <select name="resolution_[% field FILTER html %]"
- onchange="document.forms['changeform'].[% field FILTER html %].checked=true">
+ <select name="resolution" id="resolution">
[% FOREACH r = bug.choices.resolution %]
- <option value="[% r FILTER html %]">[% get_resolution(r) FILTER html %]</option>
+ [% NEXT IF r == "MOVED" && bug.resolution != "MOVED" %]
+ <option value="[% r FILTER html %]"
+ [% "selected" IF r == bug.resolution %]>
+ [% get_resolution(r) FILTER html %]</option>
[% END %]
</select>
[% 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.forms['changeform'].knob_duplicate.checked=true}">
- <br>
-[% END %]
diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl
index 7e0e1cd70..80645a851 100644
--- a/template/en/default/global/code-error.html.tmpl
+++ b/template/en/default/global/code-error.html.tmpl
@@ -394,11 +394,7 @@
[% ELSIF error == "undefined_field" %]
Form field [% field FILTER html %] was not defined.
- [%# Useful message if browser did not select show_bug radio button %]
- [% IF field == "knob" %]
- Check that the "Leave as..." radio button was selected.
- [% END %]
-
+
[% ELSIF error == "unknown_action" %]
[% IF action %]
Unknown action [% action FILTER html %]!
diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl
index 5607371eb..fef4c0c99 100644
--- a/template/en/default/list/edit-multiple.html.tmpl
+++ b/template/en/default/list/edit-multiple.html.tmpl
@@ -18,6 +18,7 @@
# Contributor(s): Myk Melez <myk@mozilla.org>
# Max Kanat-Alexander <mkanat@bugzilla.org>
# Frédéric Buclin <LpSolit@gmail.com>
+ # Guy Pyrzak <guy.pyrzak@gmail.com>
#%]
[% PROCESS global/variables.none.tmpl %]
@@ -130,7 +131,11 @@
</td>
[% END %]
</tr>
-
+
+ <tr>
+ <th><label for="bug_status">Status:</label></th>
+ <td colspan="3">[% PROCESS status_section %]</td>
+ </tr>
[% IF user.in_group(Param("timetrackinggroup")) %]
<tr>
<th><label for="estimated_time">Estimated Hours:</label></th>
@@ -309,49 +314,6 @@
[% END %]
[% END %]
-
-[% all_open_bugs = !current_bug_statuses.containsany(closedstates) %]
-[% all_closed_bugs = !current_bug_statuses.containsany(openstates) %]
-[% display_warning = 0 %]
-
-<input id="knob-none" type="radio" name="knob" value="none" checked="checked">
-<label for="knob-none">Do nothing else</label><br>
-
-[% FOREACH bug_status = new_bug_statuses %]
- <input type="radio" id="knob_[% bug_status.id FILTER html %]" name="knob"
- value="[% bug_status.name FILTER html %]">
- <label for="knob_[% bug_status.id FILTER html %]">
- Change status to <b>[% get_status(bug_status.name) FILTER html %]</b>
- </label>
- [%# Closed bugs cannot have their resolution changed this way. %]
- [% IF !bug_status.is_open && !all_closed_bugs %]
- and set the resolution to [% PROCESS select_resolution id = bug_status.id %]
- [%+ "(*)" UNLESS all_open_bugs %]
- [% display_warning = 1 UNLESS all_open_bugs %]
- [% END %]
- <br>
-[% END %]
-
-[%# If all the bugs being changed are open, allow the user to clear their resolution. %]
-[% IF all_open_bugs %]
- <input id="knob-clearresolution" type="radio" name="knob" value="clearresolution">
- <label for="knob-clearresolution">Clear the resolution</label><br>
-[% END %]
-
-[%# If all the bugs being changed are closed, allow the user to change their resolution. %]
-[% IF all_closed_bugs %]
- <input type="radio" id="knob_change_resolution" name="knob" value="change_resolution">
- <label for="knob_change_resolution">Change resolution to</label>
- [%+ PROCESS select_resolution id = "change_resolution" %]<br>
-[% END %]
-
-[% IF display_warning %]
- <p class="box">
- (*) Note that the resolution will only be applied to open [% terms.bugs %].
- Already closed [% terms.bugs %] will keep their resolution unchanged.
- </p>
-[% END %]
-
<input type="submit" id="commit" value="Commit">
[% IF Param('move-enabled') && user.is_mover %]
@@ -374,12 +336,50 @@
</select>
[% END %]
-[% BLOCK select_resolution %]
- <select id="resolution_knob_[% id FILTER html %]" name="resolution_knob_[% id FILTER html %]"
- onchange="document.forms['changeform'].[% "knob_$id" FILTER html %].checked=true">
+[%############################################################################%]
+[%# Status Block #%]
+[%############################################################################%]
+
+[% BLOCK status_section %]
+ [% all_open_bugs = !current_bug_statuses.containsany(closedstates) %]
+ [% all_closed_bugs = !current_bug_statuses.containsany(openstates) %]
+ [% closed_status_array = [] %]
+
+ <select name="bug_status" id="bug_status">
+ <option value="[% dontchange FILTER html %]" selected="selected">[% dontchange FILTER html %]</option>
+
+ [% FOREACH bug_status = new_bug_statuses %]
+ <option value="[% bug_status.name FILTER html %]">
+ [% get_status(bug_status.name) FILTER html %]
+ </option>
+ [% IF !bug_status.is_open %]
+ [% filtered_status = bug_status.name FILTER js %]
+ [% closed_status_array.push( filtered_status ) %]
+ [% END %]
+ [% END %]
+
+ [%# If all the bugs being changed are closed, allow the user to change their resolution. %]
+ [% IF all_closed_bugs %]
+ [% filtered_status = dontchange FILTER js %]
+ [% closed_status_array.push( filtered_status ) %]
+ [% END %]
+ </select>
+
+ <span id="resolution_settings">
+ <select id="resolution" name="resolution">
+ <option value="[% dontchange FILTER html %]" selected >[% dontchange FILTER html %]</option>
[% FOREACH r = resolutions %]
[% NEXT IF !r %]
+ [% NEXT IF r == "DUPLICATE" || r == "MOVED" %]
<option value="[% r FILTER html %]">[% get_resolution(r) FILTER html %]</option>
[% END %]
</select>
+ </span>
+
+ <script type="text/javascript">
+ var close_status_array = new Array("[% closed_status_array.join('", "') FILTER none %]");
+ YAHOO.util.Event.addListener('bug_status', "change", showHideStatusItems, '[% "is_duplicate" IF bug.dup_id %]');
+ YAHOO.util.Event.onDOMReady( showHideStatusItems );
+ </script>
+
[% END %]