From e3837b96c71158697052cd72f253f910ae7f79dc Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Fri, 13 Jul 2007 21:02:57 +0000 Subject: Bug 388022: Use Bugzilla::Bug to set/update custom fields in process_bug.cgi Patch By Max Kanat-Alexander r=LpSolit, a=LpSolit --- Bugzilla/Bug.pm | 52 +++++++++++++++++-------- process_bug.cgi | 10 ++--- template/en/default/global/code-error.html.tmpl | 4 ++ 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index da9e9a6b3..60fd18bb6 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -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); diff --git a/process_bug.cgi b/process_bug.cgi index 0faae9e7c..267613f67 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -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 diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl index 81c096112..394af020d 100644 --- a/template/en/default/global/code-error.html.tmpl +++ b/template/en/default/global/code-error.html.tmpl @@ -150,6 +150,10 @@ Cannot seem to handle [% field FILTER html %] and [% type FILTER html %] 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. -- cgit v1.2.3-24-g4f1b