]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 456743 - Add the ability to disable field values (mark them as inactive)
authorghendricks%novell.com <>
Fri, 17 Jul 2009 22:40:09 +0000 (22:40 +0000)
committerghendricks%novell.com <>
Fri, 17 Jul 2009 22:40:09 +0000 (22:40 +0000)
 patch by ghendricks@novell.com r=LpSolit, a=LpSolit

Bugzilla/Field.pm
Bugzilla/Field/Choice.pm
editvalues.cgi
query.cgi
template/en/default/admin/fieldvalues/edit.html.tmpl
template/en/default/admin/fieldvalues/list.html.tmpl
template/en/default/bug/field.html.tmpl
template/en/default/search/form.html.tmpl

index 1cc89239e62b1e53b216e6fb6cf9b10305f2c26f..a71afef359b97a0d73fb1b28c5517be07bbad15f 100644 (file)
@@ -15,6 +15,7 @@
 # Contributor(s): Dan Mosedale <dmose@mozilla.org>
 #                 Frédéric Buclin <LpSolit@gmail.com>
 #                 Myk Melez <myk@mozilla.org>
+#                 Greg Hendricks <ghendricks@novell.com>
 
 =head1 NAME
 
@@ -1033,8 +1034,14 @@ sub check_field {
     my $dbh = Bugzilla->dbh;
 
     # If $legalsRef is undefined, we use the default valid values.
+    # Valid values for this check are all possible values. 
+    # Using get_legal_values would only return active values, but since
+    # some bugs may have inactive values set, we want to check them too. 
     unless (defined $legalsRef) {
-        $legalsRef = get_legal_field_values($name);
+        $legalsRef = Bugzilla::Field->new({name => $name})->legal_values;
+        my @values = map($_->name, @$legalsRef);
+        $legalsRef = \@values;
+
     }
 
     if (!defined($value)
index f23b0c46d4de219674e5bcd53c931de21f5733fc..ce1020d6b851713925482dab808a3e5176f07a7a 100644 (file)
@@ -17,6 +17,7 @@
 # The Original Code is the Bugzilla Bug Tracking System.
 #
 # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
+#                 Greg Hendricks <ghendricks@novell.com>
 
 use strict;
 
@@ -40,12 +41,14 @@ use constant DB_COLUMNS => qw(
     id
     value
     sortkey
+    isactive
     visibility_value_id
 );
 
 use constant UPDATE_COLUMNS => qw(
     value
     sortkey
+    isactive
     visibility_value_id
 );
 
@@ -58,6 +61,7 @@ use constant VALIDATORS => {
     value   => \&_check_value,
     sortkey => \&_check_sortkey,
     visibility_value_id => \&_check_visibility_value_id,
+    isactive => \&Bugzilla::Object::check_boolean,
 };
 
 use constant CLASS_MAP => {
@@ -211,7 +215,8 @@ sub _check_if_controller {
 # Accessors #
 #############
 
-sub sortkey { return $_[0]->{'sortkey'}; }
+sub is_active { return $_[0]->{'isactive'}; }
+sub sortkey   { return $_[0]->{'sortkey'};  }
 
 sub bug_count {
     my $self = shift;
@@ -301,8 +306,9 @@ sub controlled_values {
 # Mutators #
 ############
 
-sub set_name    { $_[0]->set('value', $_[1]);   }
-sub set_sortkey { $_[0]->set('sortkey', $_[1]); }
+sub set_is_active { $_[0]->set('isactive', $_[1]); }
+sub set_name      { $_[0]->set('value', $_[1]);    }
+sub set_sortkey   { $_[0]->set('sortkey', $_[1]);  }
 sub set_visibility_value {
     my ($self, $value) = @_;
     $self->set('visibility_value_id', $value);
index 3c553c8d1a2ae51907757a5fc68fe5522db6a3bf..477bf86967a657fe3319b489518f3bdb918ff4a1 100755 (executable)
@@ -188,6 +188,9 @@ if ($action eq 'update') {
     $value->set_name($cgi->param('value_new'));
     $value->set_sortkey($cgi->param('sortkey'));
     $value->set_visibility_value($cgi->param('visibility_value_id'));
+    if (!($value->is_static || $value->is_default)) {
+        $value->set_is_active($cgi->param('is_active'));
+    }
     $vars->{'changes'} = $value->update();
     delete_token($token);
     $vars->{'message'} = 'field_value_updated';
index eed492114407b89eae8f8dac1584d28fda3fdb0b..5774106816640ed86eb1e52508c5f345948769a9 100755 (executable)
--- a/query.cgi
+++ b/query.cgi
@@ -232,11 +232,6 @@ if (Bugzilla->params->{'usetargetmilestone'}) {
 
 $vars->{'have_keywords'} = Bugzilla::Keyword::keyword_count();
 
-my $legal_resolutions = get_legal_field_values('resolution');
-push(@$legal_resolutions, "---"); # Oy, what a hack.
-# Another hack - this array contains "" for some reason. See bug 106589.
-$vars->{'resolution'} = [grep ($_, @$legal_resolutions)];
-
 my @chfields;
 
 push @chfields, "[Bug creation]";
@@ -262,11 +257,12 @@ if (Bugzilla->user->in_group(Bugzilla->params->{'timetrackinggroup'})) {
 }
 @chfields = (sort(@chfields));
 $vars->{'chfield'} = \@chfields;
-$vars->{'bug_status'} = get_legal_field_values('bug_status');
-$vars->{'rep_platform'} = get_legal_field_values('rep_platform');
-$vars->{'op_sys'} = get_legal_field_values('op_sys');
-$vars->{'priority'} = get_legal_field_values('priority');
-$vars->{'bug_severity'} = get_legal_field_values('bug_severity');
+$vars->{'bug_status'} = Bugzilla::Field->new({name => 'bug_status'})->legal_values;
+$vars->{'rep_platform'} = Bugzilla::Field->new({name => 'rep_platform'})->legal_values;
+$vars->{'op_sys'} = Bugzilla::Field->new({name => 'op_sys'})->legal_values;
+$vars->{'priority'} = Bugzilla::Field->new({name => 'priority'})->legal_values;
+$vars->{'bug_severity'} = Bugzilla::Field->new({name => 'bug_severity'})->legal_values;
+$vars->{'resolution'} = Bugzilla::Field->new({name => 'resolution'})->legal_values;
 
 # Boolean charts
 my @fields = Bugzilla->get_fields({ obsolete => 0 });
index b014155774c0163e86c5d715da3a02a955647636..5650ee87b5bcf23f4f16682eb818a11ebb0ebe8f 100644 (file)
         </td>
       </tr>
     [% END %]
+    <tr>
+      <th align="right"><label for="is_active">Enabled for [% terms.bugs %]:</label></th>
+      <td><input id="is_active" name="is_active" type="checkbox" value="1" 
+           [%+ 'checked="checked"' IF value.is_active %]
+           [%+ 'disabled="disabled"' IF value.is_default OR value.is_static %]>
+           [% IF value.is_default %]
+             This value is selected as default in the parameters for this field. It cannot be disabled.
+           [% ELSIF value.is_static %]
+             This value is non-deletable and cannot be disabled.
+           [% END %]
+           </td>
+    </tr>
   </table>
-
   <input type="hidden" name="value" value="[% value.name FILTER html %]">
   <input type="hidden" name="action" value="update">
   <input type="hidden" name="field" value="[% field.name FILTER html %]">
index fdc22d9126ee55dccb7d0f56d31f89d6b7b4b04e..3f750ebcae1839e19bfc154839fdd54f9b3f8e10 100644 (file)
        name => "sortkey"
        heading => "Sortkey"
      },
+     {
+       name => "isactive"
+       heading => "Enabled for $terms.bugs"
+       yesno_field => 1
+     },
      {
        name => "action"
        heading => "Action"
index 21a73a805e97459f5b6d2b95f5c870496be9c0bb..039910f1de9a556ef9a7345d8e33f093a4eeb77d 100644 (file)
                 selected="selected"
               [% ELSIF (control_field && control_value
                         && !bug.${control_field.name}.contains(control_value.name))
-                       || (field.name == "product" && !legal_value.is_active)
+                       || !legal_value.is_active
               %]
                 class="bz_hidden_option" disabled="disabled"
               [% END %]>
index 46df426c117040c907adb3cb8ae30d1ee734a75f..078ff8c6b3549a1f260a938a8a5312542f37c3b6 100644 (file)
@@ -611,15 +611,17 @@ function doOnSelectProduct(selectmode) {
   <td align="left">
     <select name="[% sel.name %]" id="[% sel.name %]"
             multiple="multiple" size="[% sel.size %]">
-      [% FOREACH name = ${sel.name} %]
-        <option value="[% name FILTER html %]"
-          [% " selected" IF lsearch(default.${sel.name}, name) != -1 %]>
+      [% FOREACH value = ${sel.name} %]
+      [%# This only applies for Resolution really %]
+        <option value="[% value.name OR '---' FILTER html %]"
+          [% " selected" IF lsearch(default.${sel.name}, value.name) != -1 %]>
           [% IF sel.name == "bug_status" %]
-            [% get_status(name) FILTER html %]
+            [% get_status(value.name) FILTER html %]
           [% ELSIF sel.name == "resolution" %]
-            [% get_resolution(name) FILTER html %]
+            [%# Again, resolution has that odd empty value. Replace it with '---' %]
+            [% get_resolution(value.name) OR '---' FILTER html %]
           [% ELSE %]
-            [% name FILTER html %]
+            [% value.name FILTER html %]
           [% END %]
         </option>
       [% END %]