summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2007-07-13 23:02:57 +0200
committermkanat%bugzilla.org <>2007-07-13 23:02:57 +0200
commite3837b96c71158697052cd72f253f910ae7f79dc (patch)
tree765d03eb8b347d5458d7f1ed7fbb2073bd16b93f
parent5ab86735ff66381698b1e8e0bc587970dacc69fe (diff)
downloadbugzilla-e3837b96c71158697052cd72f253f910ae7f79dc.tar.gz
bugzilla-e3837b96c71158697052cd72f253f910ae7f79dc.tar.xz
Bug 388022: Use Bugzilla::Bug to set/update custom fields in process_bug.cgi
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit
-rwxr-xr-xBugzilla/Bug.pm52
-rwxr-xr-xprocess_bug.cgi10
-rw-r--r--template/en/default/global/code-error.html.tmpl4
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 <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.