diff --git a/Bugzilla/Field.pm b/Bugzilla/Field.pm index eaca6772a..65b3aca11 100644 --- a/Bugzilla/Field.pm +++ b/Bugzilla/Field.pm @@ -1021,18 +1021,25 @@ sub update_visibility_values } my $del = [ keys %$h ]; return 0 if !@$add && !@$del; - if (@$del) - { - Bugzilla->dbh->do( - "DELETE FROM fieldvaluecontrol WHERE field_id=? AND value_id=?". - " AND visibility_value_id IN (".join(", ", @$del).")", - undef, $self->id, $controlled_value_id - ); - } + $self->delete_visibility_values($controlled_value_id, $del, 1); $self->add_visibility_values($controlled_value_id, $add); return 1; } +sub delete_visibility_values +{ + my $self = shift; + my ($controlled_value_id, $visibility_value_ids, $dont_touch) = @_; + return 0 if !@$visibility_value_ids; + my $ok = Bugzilla->dbh->do( + "DELETE FROM fieldvaluecontrol WHERE field_id=? AND value_id=?". + " AND visibility_value_id IN (".join(", ", map { int($_) } @$visibility_value_ids).")", + undef, $self->id, $controlled_value_id + ); + $self->touch if !$dont_touch; + return $ok; +} + sub add_visibility_values { my $self = shift; diff --git a/editmilestones.cgi b/editmilestones.cgi index 4b54d4097..0edd517d0 100755 --- a/editmilestones.cgi +++ b/editmilestones.cgi @@ -87,6 +87,17 @@ unless ($action) exit; } +# +# action='change_empty' -> Enable/disable empty milestone +# +if ($action eq 'change_empty' && Bugzilla->get_field('target_milestone')->null_field_id == Bugzilla->get_field('product')->id) +{ + my $f = ($ARGS->{allow_empty} ? 'add' : 'delete').'_visibility_values'; + Bugzilla->get_field('target_milestone')->$f(FLAG_NULLABLE, [ $product->id ]); + print Bugzilla->cgi->redirect('editmilestones.cgi?product='.url_quote($product->name)); + exit; +} + # # action='add' -> present form for parameters for new milestone # diff --git a/editversions.cgi b/editversions.cgi index 9f42f5a80..c76ad5991 100755 --- a/editversions.cgi +++ b/editversions.cgi @@ -88,6 +88,17 @@ unless ($action) exit; } +# +# action='change_empty' -> Enable/disable empty version +# +if ($action eq 'change_empty' && Bugzilla->get_field('version')->null_field_id == Bugzilla->get_field('product')->id) +{ + my $f = ($ARGS->{allow_empty} ? 'add' : 'delete').'_visibility_values'; + Bugzilla->get_field('version')->$f(FLAG_NULLABLE, [ $product->id ]); + print Bugzilla->cgi->redirect('editversions.cgi?product='.url_quote($product->name)); + exit; +} + # # action='add' -> present form for parameters for new version # diff --git a/template/en/default/admin/milestones/list.html.tmpl b/template/en/default/admin/milestones/list.html.tmpl index 42bc157b0..47ba2098e 100644 --- a/template/en/default/admin/milestones/list.html.tmpl +++ b/template/en/default/admin/milestones/list.html.tmpl @@ -77,6 +77,21 @@ }) %] +[% vf = Bugzilla.get_field('target_milestone') %] +[% IF vf.null_field.name == 'product' %] +

+ [% IF !vf.nullable %] + Empty milestone (---) disabled globally. + [% ELSE %] +

+ Empty milestone (---) is [% vf.null_visibility_values.${product.id} ? 'enabled' : 'disabled' %] in this product. + + +
+ [% END %] +

+[% END %] + [% Hook.process('before_table') %] [% PROCESS admin/table.html.tmpl diff --git a/template/en/default/admin/versions/list.html.tmpl b/template/en/default/admin/versions/list.html.tmpl index 22f4a1391..9d32b8b32 100644 --- a/template/en/default/admin/versions/list.html.tmpl +++ b/template/en/default/admin/versions/list.html.tmpl @@ -71,6 +71,21 @@ }) %] +[% vf = Bugzilla.get_field('version') %] +[% IF vf.null_field.name == 'product' %] +

+ [% IF !vf.nullable %] + Empty version (---) disabled globally. + [% ELSE %] +

+ Empty version (---) is [% vf.null_visibility_values.${product.id} ? 'enabled' : 'disabled' %] in this product. + + +
+ [% END %] +

+[% END %] + [% Hook.process('before_table') %] [% PROCESS admin/table.html.tmpl