From 79ec29975ac8d1a4f49b83ed404a1ee04c33b73c Mon Sep 17 00:00:00 2001 From: Gervase Markham Date: Mon, 30 Mar 2015 18:53:57 +0100 Subject: Bug 1007605 - Make FIXED non-fixed, by changing noresolveonopenblockers to define what the fixed resolution is. r,a=glob --- Bugzilla/Bug.pm | 7 ++++--- Bugzilla/Config.pm | 4 ++++ Bugzilla/Config/BugChange.pm | 13 ++++++++++--- Bugzilla/Config/Common.pm | 16 +++++++++++++++- Bugzilla/Field/ChoiceInterface.pm | 3 +-- Bugzilla/WebService/Bugzilla.pm | 4 ++-- docs/en/rst/administering/parameters.rst | 14 ++++++++------ docs/en/rst/api/core/v1/bugzilla.rst | 4 ++-- template/en/default/admin/params/bugchange.html.tmpl | 4 ++-- template/en/default/global/user-error.html.tmpl | 3 ++- 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, C, C, - C, C, C, C, + C, C, C, C, 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" %] -- cgit v1.2.3-24-g4f1b