Commit e3837b96 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

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
parent 5ab86735
...@@ -133,12 +133,19 @@ sub VALIDATORS { ...@@ -133,12 +133,19 @@ sub VALIDATORS {
status_whiteboard => \&_check_status_whiteboard, status_whiteboard => \&_check_status_whiteboard,
}; };
my @select_fields = Bugzilla->get_fields({custom => 1, obsolete => 0, # Set up validators for custom fields.
type => FIELD_TYPE_SINGLE_SELECT}); my @custom_fields = Bugzilla->get_fields({custom => 1, obsolete => 0});
foreach my $field (@custom_fields) {
foreach my $field (@select_fields) { my $validator;
$validators->{$field->name} = \&_check_select_field; if ($field->type == FIELD_TYPE_SINGLE_SELECT) {
$validator = \&_check_select_field;
}
else {
$validator = \&_check_freetext_field;
}
$validators->{$field->name} = $validator;
} }
return $validators; return $validators;
}; };
...@@ -147,18 +154,22 @@ use constant UPDATE_VALIDATORS => { ...@@ -147,18 +154,22 @@ use constant UPDATE_VALIDATORS => {
resolution => \&_check_resolution, resolution => \&_check_resolution,
}; };
use constant UPDATE_COLUMNS => qw( sub UPDATE_COLUMNS {
everconfirmed my @columns = qw(
bug_file_loc everconfirmed
bug_severity bug_file_loc
bug_status bug_severity
op_sys bug_status
priority op_sys
rep_platform priority
resolution rep_platform
short_desc resolution
status_whiteboard 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 # This is used by add_comment to know what we validate before putting in
# the DB. # the DB.
...@@ -896,6 +907,8 @@ sub _check_estimated_time { ...@@ -896,6 +907,8 @@ sub _check_estimated_time {
return $_[0]->_check_time($_[1], 'estimated_time'); return $_[0]->_check_time($_[1], 'estimated_time');
} }
sub _check_freetext_field { return defined $_[1] ? trim($_[1]) : ''; }
sub _check_groups { sub _check_groups {
my ($invocant, $product, $group_ids) = @_; my ($invocant, $product, $group_ids) = @_;
...@@ -1169,6 +1182,11 @@ sub _set_global_validator { ...@@ -1169,6 +1182,11 @@ sub _set_global_validator {
# "Set" Methods # # "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 { sub set_dependencies {
my ($self, $dependson, $blocked) = @_; my ($self, $dependson, $blocked) = @_;
($dependson, $blocked) = $self->_check_dependencies($dependson, $blocked); ($dependson, $blocked) = $self->_check_dependencies($dependson, $blocked);
......
...@@ -591,12 +591,7 @@ foreach my $field (Bugzilla->get_fields({custom => 1, obsolete => 0})) { ...@@ -591,12 +591,7 @@ foreach my $field (Bugzilla->get_fields({custom => 1, obsolete => 0})) {
&& (!$cgi->param('dontchange') && (!$cgi->param('dontchange')
|| $cgi->param($fname) ne $cgi->param('dontchange'))) || $cgi->param($fname) ne $cgi->param('dontchange')))
{ {
DoComma(); $_->set_custom_field($field, $cgi->param($fname)) foreach @bug_objects;
$::query .= "$fname = ?";
my $value = $cgi->param($fname);
check_field($fname, $value) if ($field->type == FIELD_TYPE_SINGLE_SELECT);
trick_taint($value);
push(@values, $value);
} }
} }
...@@ -1397,7 +1392,8 @@ foreach my $id (@idlist) { ...@@ -1397,7 +1392,8 @@ foreach my $id (@idlist) {
# Bugzilla::Bug does these for us already. # Bugzilla::Bug does these for us already.
next if grep($_ eq $col, qw(keywords op_sys rep_platform priority next if grep($_ eq $col, qw(keywords op_sys rep_platform priority
bug_severity short_desc bug_severity short_desc
status_whiteboard bug_file_loc)); status_whiteboard bug_file_loc),
Bugzilla->custom_field_names);
if ($col eq 'product') { if ($col eq 'product') {
# If some votes have been removed, RemoveVotes() returns # If some votes have been removed, RemoveVotes() returns
......
...@@ -150,6 +150,10 @@ ...@@ -150,6 +150,10 @@
Cannot seem to handle <code>[% field FILTER html %]</code> Cannot seem to handle <code>[% field FILTER html %]</code>
and <code>[% type FILTER html %]</code> together. 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" %] [% ELSIF error == "gd_not_installed" %]
[% admindocslinks = {'installation.html#install-perlmodules' => 'Installing Perl modules necessary for Charting'} %] [% admindocslinks = {'installation.html#install-perlmodules' => 'Installing Perl modules necessary for Charting'} %]
Charts will not work without the GD Perl module being installed. Charts will not work without the GD Perl module being installed.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment