Bug 1007605 - Make FIXED non-fixed, by changing noresolveonopenblockers to define what the fixed resolution is. r,a=glob
git-svn-id: svn://10.0.0.236/trunk@265894 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
5c17fd886b
commit
ac987f352c
@ -1 +1 @@
|
||||
9348
|
||||
9349
|
||||
@ -1 +1 @@
|
||||
2c82105b0fed5d6739111c5de8dba063b01ab446
|
||||
79ec29975ac8d1a4f49b83ed404a1ee04c33b73c
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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>,
|
||||
|
||||
@ -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:
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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." }
|
||||
%]
|
||||
|
||||
@ -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" %]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user