]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 388022: Use Bugzilla::Bug to set/update custom fields in process_bug.cgi
authormkanat%bugzilla.org <>
Fri, 13 Jul 2007 21:02:57 +0000 (21:02 +0000)
committermkanat%bugzilla.org <>
Fri, 13 Jul 2007 21:02:57 +0000 (21:02 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit

Bugzilla/Bug.pm
process_bug.cgi
template/en/default/global/code-error.html.tmpl

index da9e9a6b3964529eb13142ddb894320c9e5fa26a..60fd18bb69a688cb45769e179848fbf5a20f7a9a 100755 (executable)
@@ -133,12 +133,19 @@ sub VALIDATORS {
         status_whiteboard => \&_check_status_whiteboard,
     };
 
-    my @select_fields = Bugzilla->get_fields({custom => 1, obsolete => 0,
-                                              type => FIELD_TYPE_SINGLE_SELECT});
-
-    foreach my $field (@select_fields) {
-        $validators->{$field->name} = \&_check_select_field;
+    # Set up validators for custom fields.    
+    my @custom_fields = Bugzilla->get_fields({custom => 1, obsolete => 0});
+    foreach my $field (@custom_fields) {
+        my $validator;
+        if ($field->type == FIELD_TYPE_SINGLE_SELECT) {
+            $validator = \&_check_select_field;
+        }
+        else {
+            $validator = \&_check_freetext_field;
+        }
+        $validators->{$field->name} = $validator;
     }
+
     return $validators;
 };
 
@@ -147,18 +154,22 @@ use constant UPDATE_VALIDATORS => {
     resolution => \&_check_resolution,
 };
 
-use constant UPDATE_COLUMNS => qw(
-    everconfirmed
-    bug_file_loc
-    bug_severity
-    bug_status
-    op_sys
-    priority
-    rep_platform
-    resolution
-    short_desc
-    status_whiteboard
-);
+sub UPDATE_COLUMNS {
+    my @columns = qw(
+        everconfirmed
+        bug_file_loc
+        bug_severity
+        bug_status
+        op_sys
+        priority
+        rep_platform
+        resolution
+        short_desc
+        status_whiteboard
+    );
+    push(@columns, Bugzilla->custom_field_names);
+    return @columns;
+};
 
 # This is used by add_comment to know what we validate before putting in
 # the DB.
@@ -896,6 +907,8 @@ sub _check_estimated_time {
     return $_[0]->_check_time($_[1], 'estimated_time');
 }
 
+sub _check_freetext_field { return defined $_[1] ? trim($_[1]) : ''; }
+
 sub _check_groups {
     my ($invocant, $product, $group_ids) = @_;
 
@@ -1169,6 +1182,11 @@ sub _set_global_validator {
 # "Set" Methods #
 #################
 
+sub set_custom_field {
+    my ($self, $field, $value) = @_;
+    ThrowCodeError('field_not_custom', { field => $field }) if !$field->custom;
+    $self->set($field->name, $value);
+}
 sub set_dependencies {
     my ($self, $dependson, $blocked) = @_;
     ($dependson, $blocked) = $self->_check_dependencies($dependson, $blocked);
index 0faae9e7c2e4730c6c25005220f60f4b32557383..267613f6788fcec56fe23792325aac823e42fc9d 100755 (executable)
@@ -591,12 +591,7 @@ foreach my $field (Bugzilla->get_fields({custom => 1, obsolete => 0})) {
         && (!$cgi->param('dontchange')
             || $cgi->param($fname) ne $cgi->param('dontchange')))
     {
-        DoComma();
-        $::query .= "$fname = ?";
-        my $value = $cgi->param($fname);
-        check_field($fname, $value) if ($field->type == FIELD_TYPE_SINGLE_SELECT);
-        trick_taint($value);
-        push(@values, $value);
+        $_->set_custom_field($field, $cgi->param($fname)) foreach @bug_objects;
     }
 }
 
@@ -1397,7 +1392,8 @@ foreach my $id (@idlist) {
             # Bugzilla::Bug does these for us already.
             next if grep($_ eq $col, qw(keywords op_sys rep_platform priority
                                         bug_severity short_desc
-                                        status_whiteboard bug_file_loc));
+                                        status_whiteboard bug_file_loc),
+                                     Bugzilla->custom_field_names);
 
             if ($col eq 'product') {
                 # If some votes have been removed, RemoveVotes() returns
index 81c096112fa012b17e851157e87616ca9e56024b..394af020d93fd6563f4d873019fd4d0a27f7b739 100644 (file)
     Cannot seem to handle <code>[% field FILTER html %]</code>
     and <code>[% type FILTER html %]</code> together.
 
+  [% ELSIF error == "field_not_custom" %]
+    '[% field.description FILTER html %]' ([% field.name FILTER html %])
+    is not a custom field.
+
   [% ELSIF error == "gd_not_installed" %]
     [% admindocslinks = {'installation.html#install-perlmodules' => 'Installing Perl modules necessary for Charting'} %]
     Charts will not work without the GD Perl module being installed.