]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 561296: A fix allowing updating a field value's name when it is
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 14 May 2010 14:25:05 +0000 (07:25 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 14 May 2010 14:25:05 +0000 (07:25 -0700)
the default value
r=LpSolit, a=LpSolit

Bugzilla/CGI.pm
Bugzilla/Field/Choice.pm
editvalues.cgi
template/en/default/admin/fieldvalues/edit.html.tmpl
template/en/default/global/user-error.html.tmpl

index 75b7f18d7d80a490a35500d0de96b1ce35aa9311..00f23c393c0d6647af95ab8ae4e58ff09e39027a 100644 (file)
@@ -329,6 +329,14 @@ sub _fix_utf8 {
     return $input;
 }
 
+sub should_set {
+    my ($self, $param) = @_;
+    my $set = (defined $self->param($param) 
+               or defined $self->param("defined_$param"))
+              ? 1 : 0;
+    return $set;
+}
+
 # The various parts of Bugzilla which create cookies don't want to have to
 # pass them around to all of the callers. Instead, store them locally here,
 # and then output as required from |header|.
index 95fb4bf82e44ba732b9cbd9918f92b07fa2d970d..e4cb4406aeb0bb379c575fa49dbe1c1f104a0376 100644 (file)
@@ -61,7 +61,7 @@ use constant VALIDATORS => {
     value   => \&_check_value,
     sortkey => \&_check_sortkey,
     visibility_value_id => \&_check_visibility_value_id,
-    isactive => \&Bugzilla::Object::check_boolean,
+    isactive => \&_check_isactive,
 };
 
 use constant CLASS_MAP => {
@@ -216,6 +216,25 @@ sub set_visibility_value {
 # Validators #
 ##############
 
+sub _check_isactive {
+    my ($invocant, $value) = @_;
+    $value = Bugzilla::Object::check_boolean($invocant, $value);
+    if (!$value and ref $invocant) {
+        if ($invocant->is_default) {
+            my $field = $invocant->field;
+            ThrowUserError('fieldvalue_is_default', 
+                           { value => $invocant, field => $field,
+                             param_name => $invocant->DEFAULT_MAP->{$field->name}
+                           });
+        }
+        if ($invocant->is_static) {
+            ThrowUserError('fieldvalue_not_deletable',
+                           { value => $invocant, field => $invocant->field });
+        }
+    }
+    return $value;
+}
+
 sub _check_value {
     my ($invocant, $value) = @_;
 
index b651b23c293e65701354d915bf5d484a507bc1fb..a95385230223ae24adc19ce0777e84c06a1be051 100755 (executable)
@@ -181,12 +181,12 @@ if ($action eq 'edit') {
 if ($action eq 'update') {
     check_token_data($token, 'edit_field_value');
     $vars->{'value_old'} = $value->name;
+    if ($cgi->should_set('is_active')) {
+        $value->set_is_active($cgi->param('is_active'));
+    }
     $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 fb58e578444aafec3ffd6dd37c2e035bdb7f7a14..9c42ce639c1d68932a21c7b74b6cf24b2b254651 100644 (file)
            [% ELSIF value.is_static %]
              This value is non-deletable and cannot be disabled.
            [% END %]
-           </td>
+           [% IF !(value.is_default OR value.is_static) %]
+             <input id="defined_is_active" name="defined_is_active"
+                    type="hidden" value="1">
+           [% END %]
+      </td>
     </tr>
   </table>
   <input type="hidden" name="value" value="[% value.name FILTER html %]">
index 5fdcee8f3deaebd9070296facae6d818d8e4ff79..279f29c71fefe8e18163d5dcc3993cf5f54615f5 100644 (file)
   [% ELSIF error == "fieldvalue_is_default" %]
     [% title = "Specified Field Value Is Default" %]
     '[% value.name FILTER html %]' is the default value for
-    the '[% field.description FILTER html %]' field and cannot be deleted.
+    the '[% field.description FILTER html %]' field and cannot be deleted
+    or disabled.
     [% IF user.in_group('tweakparams') %]
       You have to <a href="editparams.cgi?section=bugfields#
       [%- param_name FILTER url_quote %]">change</a> the default value first.
 
   [% ELSIF error == "fieldvalue_not_deletable" %]
     [% title = "Field Value Not Deletable" %]
-    The value '[% value.name FILTER html %]' cannot be removed because
-    it plays some special role for the '[% field.description FILTER html %]' 
-    field.
+    The value '[% value.name FILTER html %]' cannot be removed or
+    disabled, because it plays some special role for the 
+    '[% field.description FILTER html %]' field.
 
   [% ELSIF error == "fieldvalue_reserved_word" %]
     [% title = "Reserved Word Not Allowed" %]