summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Bug.pm7
-rw-r--r--Bugzilla/Config.pm4
-rw-r--r--Bugzilla/Config/BugChange.pm13
-rw-r--r--Bugzilla/Config/Common.pm16
-rw-r--r--Bugzilla/Field/ChoiceInterface.pm3
-rw-r--r--Bugzilla/WebService/Bugzilla.pm4
-rw-r--r--docs/en/rst/administering/parameters.rst14
-rw-r--r--docs/en/rst/api/core/v1/bugzilla.rst4
-rw-r--r--template/en/default/admin/params/bugchange.html.tmpl4
-rw-r--r--template/en/default/global/user-error.html.tmpl3
10 files changed, 50 insertions, 22 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index 2bd6fb646..fc5dbc678 100644
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -1937,11 +1937,12 @@ sub _check_resolution {
# Don't allow open bugs to have resolutions.
ThrowUserError('resolution_not_allowed') if $is_open;
- # Check noresolveonopenblockers.
+ # Check if resolution_forbidden_with_open_blockers.
my $dependson = ref($invocant) ? $invocant->dependson
: ($params->{dependson} || []);
- if (Bugzilla->params->{"noresolveonopenblockers"}
- && $resolution eq 'FIXED'
+ if (Bugzilla->params->{"resolution_forbidden_with_open_blockers"}
+ && $resolution eq
+ Bugzilla->params->{"resolution_forbidden_with_open_blockers"}
&& (!ref $invocant or !$invocant->resolution
or $resolution ne $invocant->resolution)
&& scalar @$dependson)
diff --git a/Bugzilla/Config.pm b/Bugzilla/Config.pm
index ebd5f8ef6..51d65397e 100644
--- a/Bugzilla/Config.pm
+++ b/Bugzilla/Config.pm
@@ -204,6 +204,10 @@ sub update_params {
$new_params{'search_allow_no_criteria'} = $param->{'specific_search_allow_empty_words'};
}
+ if (exists $param->{'noresolveonopenblockers'}) {
+ $new_params{'resolution_forbidden_with_open_blockers'} = $param->{'noresolveonopenblockers'} ? 'FIXED' : "";
+ }
+
# --- DEFAULTS FOR NEW PARAMS ---
_load_params unless %params;
diff --git a/Bugzilla/Config/BugChange.pm b/Bugzilla/Config/BugChange.pm
index 0acdc0ce4..2a225b794 100644
--- a/Bugzilla/Config/BugChange.pm
+++ b/Bugzilla/Config/BugChange.pm
@@ -31,6 +31,10 @@ sub get_param_list {
@closed_bug_statuses = @current_closed_states if scalar(@current_closed_states);
};
+ my $resolution_field = Bugzilla::Field->new({ name => 'resolution', cache => 1 });
+ # The empty resolution is included - it represents "no value"
+ my @resolutions = map {$_->name} @{ $resolution_field->legal_values };
+
my @param_list = (
{
name => 'duplicate_or_move_bug_status',
@@ -71,10 +75,13 @@ sub get_param_list {
},
{
- name => 'noresolveonopenblockers',
- type => 'b',
- default => 0,
+ name => 'resolution_forbidden_with_open_blockers',
+ type => 's',
+ choices => \@resolutions,
+ default => '',
+ checker => \&check_resolution,
} );
+
return @param_list;
}
diff --git a/Bugzilla/Config/Common.pm b/Bugzilla/Config/Common.pm
index 52a2f8f11..95b1e3189 100644
--- a/Bugzilla/Config/Common.pm
+++ b/Bugzilla/Config/Common.pm
@@ -28,7 +28,7 @@ use parent qw(Exporter);
check_ip check_mail_delivery_method check_notification
check_bug_status check_smtp_auth check_theschwartz_available
check_maxattachmentsize check_email check_smtp_ssl
- check_comment_taggers_group check_smtp_server
+ check_comment_taggers_group check_smtp_server check_resolution
);
# Checking functions for the various values
@@ -164,6 +164,18 @@ sub check_bug_status {
return "";
}
+sub check_resolution {
+ my $resolution = shift;
+ my $resolution_field = Bugzilla::Field->new({ name => 'resolution', cache => 1 });
+ # The empty resolution is included - it represents "no value"
+ my @resolutions = map {$_->name} @{ $resolution_field->legal_values };
+
+ if (!grep($_ eq $resolution, @resolutions)) {
+ return "Must be blank or a valid resolution: one of " . join(', ', @resolutions);
+ }
+ return "";
+}
+
sub check_group {
my $group_name = shift;
return "" unless $group_name;
@@ -464,6 +476,8 @@ valid group is provided.
=item check_bug_status
+=item check_resolution
+
=item check_shadowdb
=item check_smtp_server
diff --git a/Bugzilla/Field/ChoiceInterface.pm b/Bugzilla/Field/ChoiceInterface.pm
index 634d36ad1..9ac508dc0 100644
--- a/Bugzilla/Field/ChoiceInterface.pm
+++ b/Bugzilla/Field/ChoiceInterface.pm
@@ -88,8 +88,7 @@ sub is_static {
# If we need to special-case Resolution for *anything* else, it should
# get its own subclass.
if ($self->field->name eq 'resolution') {
- return grep($_ eq $self->name, ('', 'FIXED', 'DUPLICATE'))
- ? 1 : 0;
+ return $self->name eq '' || $self->name eq 'DUPLICATE';
}
elsif ($self->field->custom) {
return $self->name eq '---' ? 1 : 0;
diff --git a/Bugzilla/WebService/Bugzilla.pm b/Bugzilla/WebService/Bugzilla.pm
index 45ef326ac..f94ea55c9 100644
--- a/Bugzilla/WebService/Bugzilla.pm
+++ b/Bugzilla/WebService/Bugzilla.pm
@@ -71,10 +71,10 @@ use constant PARAMETERS_LOGGED_IN => qw(
maxattachmentsize
maxlocalattachment
musthavemilestoneonaccept
- noresolveonopenblockers
password_complexity
rememberlogin
requirelogin
+ resolution_forbidden_with_open_blockers
search_allow_no_criteria
urlbase
use_see_also
@@ -428,10 +428,10 @@ A logged-in user can access the following parameters (listed alphabetically):
C<maxattachmentsize>,
C<maxlocalattachment>,
C<musthavemilestoneonaccept>,
- C<noresolveonopenblockers>,
C<password_complexity>,
C<rememberlogin>,
C<requirelogin>,
+ C<resolution_forbidden_with_open_blockers>,
C<search_allow_no_criteria>,
C<urlbase>,
C<use_see_also>,
diff --git a/docs/en/rst/administering/parameters.rst b/docs/en/rst/administering/parameters.rst
index 44eae8e51..80611ef6e 100644
--- a/docs/en/rst/administering/parameters.rst
+++ b/docs/en/rst/administering/parameters.rst
@@ -280,12 +280,14 @@ commenton*
any comment as to what the fix was (or even that it was truly
fixed!)
-noresolveonopenblockers
- This option will prevent users from resolving bugs as FIXED if
- they have unresolved dependencies. Only the FIXED resolution
- is affected. Users will be still able to resolve bugs to
- resolutions other than FIXED if they have unresolved dependent
- bugs.
+resolution_forbidden_with_open_blockers
+ This option will prevent users from resolving bugs as the chosen resolution
+ if they have unresolved dependencies. If using Bugzilla's default
+ resolutions, the most common value to choose is FIXED, because if a bug
+ is fixed, either is dependencies are actually fixed (and should be marked
+ as such) or the dependency is mistaken and should be removed. Only the
+ chosen resolution is affected; users will be still able to resolve bugs to
+ other resolutions even if they have unresolved dependent bugs.
.. _param-bugfields:
diff --git a/docs/en/rst/api/core/v1/bugzilla.rst b/docs/en/rst/api/core/v1/bugzilla.rst
index b066eca0c..67029cc1f 100644
--- a/docs/en/rst/api/core/v1/bugzilla.rst
+++ b/docs/en/rst/api/core/v1/bugzilla.rst
@@ -187,10 +187,10 @@ Example response for authenticated user:
"maxattachmentsize" : "1000",
"maxlocalattachment" : "0",
"musthavemilestoneonaccept" : "0",
- "noresolveonopenblockers" : "0",
"password_complexity" : "no_constraints",
"rememberlogin" : "on",
"requirelogin" : "0",
+ "resolution_forbidden_with_open_blockers" : "FIXED",
"urlbase" : "http://bugzilla.example.com/",
"use_see_also" : "1",
"useclassification" : "1",
@@ -225,10 +225,10 @@ A logged-in user can access the following parameters (listed alphabetically):
* maxattachmentsize
* maxlocalattachment
* musthavemilestoneonaccept
-* noresolveonopenblockers
* password_complexity
* rememberlogin
* requirelogin
+* resolution_forbidden_with_open_blockers
* search_allow_no_criteria
* urlbase
* use_see_also
diff --git a/template/en/default/admin/params/bugchange.html.tmpl b/template/en/default/admin/params/bugchange.html.tmpl
index f442c5953..4d73e0cb1 100644
--- a/template/en/default/admin/params/bugchange.html.tmpl
+++ b/template/en/default/admin/params/bugchange.html.tmpl
@@ -37,6 +37,6 @@
commentonduplicate => "If this option is on, the user needs to enter a short comment " _
"if the $terms.bug is marked as duplicate.",
- noresolveonopenblockers => "Don\'t allow $terms.bugs to be resolved as fixed " _
- "if they have unresolved dependencies." }
+ resolution_forbidden_with_open_blockers => "Don't allow $terms.bugs to be resolved with " _
+ "this resolution if they have unresolved dependencies." }
%]
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
index dd34f2cd6..299e2a194 100644
--- a/template/en/default/global/user-error.html.tmpl
+++ b/template/en/default/global/user-error.html.tmpl
@@ -1748,7 +1748,8 @@
[% END %].
They must either be resolved or removed from the
"[% field_descs.dependson FILTER html %]" field before you can resolve
- this [% terms.bug %] as [% display_value("resolution", "FIXED") FILTER html %].
+ this [% terms.bug %] as [% display_value("resolution",
+ Param('resolution_forbidden_with_open_blockers')) FILTER html %].
[% ELSIF error == "sudo_invalid_cookie" %]
[% title = "Invalid Sudo Cookie" %]