From 4f519ad5b64f74aeb0eb58d12bcf90fa0d8d0ff8 Mon Sep 17 00:00:00 2001
From: Vitaliy Filippov
Date: Thu, 29 Jan 2015 18:10:45 +0300
Subject: [PATCH] Add specific UI for enabling/disabling empty versions and
milestones
---
Bugzilla/Field.pm | 23 ++++++++++++-------
editmilestones.cgi | 11 +++++++++
editversions.cgi | 11 +++++++++
.../default/admin/milestones/list.html.tmpl | 15 ++++++++++++
.../en/default/admin/versions/list.html.tmpl | 15 ++++++++++++
5 files changed, 67 insertions(+), 8 deletions(-)
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 %]
+
+ [% 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 %]
+
+ [% END %]
+
+[% END %]
+
[% Hook.process('before_table') %]
[% PROCESS admin/table.html.tmpl