my $fields = $cache->{fields};
my %requested;
- if (my $types = $criteria->{type}) {
+ if (my $types = delete $criteria->{type}) {
$types = ref($types) ? $types : [$types];
%requested = map { %{ $fields->{by_type}->{$_} || {} } } @$types;
}
else {
%requested = %{ $fields->{by_name} };
}
-
- my $do_by_name = $criteria->{by_name};
- return $do_by_name ? \%requested : [values %requested];
-}
+ my $do_by_name = delete $criteria->{by_name};
-# DEPRECATED. Use fields() instead.
-sub get_fields {
- my $class = shift;
- my $criteria = shift;
- # This function may be called during installation, and Field::match
- # may fail at that time. so we want to return an empty list in that
- # case.
- my $fields = eval { Bugzilla::Field->match($criteria) } || [];
- return @$fields;
+ # Filtering before returning the fields based on
+ # the criterias.
+ foreach my $filter (keys %$criteria) {
+ foreach my $field (keys %requested) {
+ if ($requested{$field}->$filter != $criteria->{$filter}) {
+ delete $requested{$field};
+ }
+ }
+ }
+
+ return $do_by_name ? \%requested : [values %requested];
}
sub active_custom_fields {
version => ['product'],
);
- my @custom_deps = Bugzilla->get_fields(
- { visibility_field_id => NOT_NULL });
- foreach my $field (@custom_deps) {
- $deps{$field->name} = [$field->visibility_field->name];
+ foreach my $field (@{ Bugzilla->fields }) {
+ $deps{$field->name} = [ $field->visibility_field->name ]
+ if $field->{visibility_field_id};
}
+
$cache->{bug_validator_dependencies} = \%deps;
return \%deps;
};
);
sub DATE_COLUMNS {
- my @fields = Bugzilla->get_fields({ type => FIELD_TYPE_DATETIME });
+ my @fields = @{ Bugzilla->fields({ type => FIELD_TYPE_DATETIME }) };
return map { $_->name } @fields;
}
Bugzilla::Hook::process('bug_end_of_create_validators',
{ params => $params });
- my @mandatory_fields = Bugzilla->get_fields({ is_mandatory => 1,
- enter_bug => 1,
- obsolete => 0 });
+ my @mandatory_fields = @{ Bugzilla->fields({ is_mandatory => 1,
+ enter_bug => 1,
+ obsolete => 0 }) };
foreach my $field (@mandatory_fields) {
$class->_check_field_is_mandatory($params->{$field->name}, $field,
$params);
sub editable_bug_fields {
my @fields = Bugzilla->dbh->bz_table_columns('bugs');
# Obsolete custom fields are not editable.
- my @obsolete_fields = Bugzilla->get_fields({obsolete => 1, custom => 1});
+ my @obsolete_fields = @{ Bugzilla->fields({obsolete => 1, custom => 1}) };
@obsolete_fields = map { $_->name } @obsolete_fields;
foreach my $remove ("bug_id", "reporter", "creation_ts", "delta_ts",
"lastdiffed", @obsolete_fields)
return $self->{$attr} if defined $self->{$attr};
- $self->{_multi_selects} ||= [Bugzilla->get_fields(
- {custom => 1, type => FIELD_TYPE_MULTI_SELECT })];
+ $self->{_multi_selects} ||= Bugzilla->fields(
+ { custom => 1, type => FIELD_TYPE_MULTI_SELECT });
+
if ( grep($_->name eq $attr, @{$self->{_multi_selects}}) ) {
# There is a bug in Perl 5.10.0, which is fixed in 5.10.1,
# which taints $attr at this point. trick_taint() can go
sub _get_new_bugmail_fields {
my $bug = shift;
- my @fields = Bugzilla->get_fields({obsolete => 0, mailhead => 1});
+ my @fields = @{ Bugzilla->fields({obsolete => 0, in_new_bugmail => 1}) };
my @diffs;
foreach my $field (@fields) {
use Data::Dumper;
# Display information about all fields.
- print Dumper(Bugzilla->get_fields());
+ print Dumper(Bugzilla->fields());
# Display information about non-obsolete custom fields.
print Dumper(Bugzilla->active_custom_fields);
use Bugzilla::Field;
# Display information about non-obsolete custom fields.
- # Bugzilla->get_fields() is a wrapper around Bugzilla::Field->match(),
- # so both methods take the same arguments.
- print Dumper(Bugzilla::Field->match({ obsolete => 0, custom => 1 }));
+ # Bugzilla->fields() is a wrapper around Bugzilla::Field->get_all(),
+ # with arguments which filter the fields before returning them.
+ print Dumper(Bugzilla->fields({ obsolete => 0, custom => 1 }));
# Create or update a custom field or field definition.
my $field = Bugzilla::Field->create(
}
sub _fix_invalid_custom_field_names {
- my @fields = Bugzilla->get_fields({ custom => 1 });
+ my $fields = Bugzilla->fields({ custom => 1 });
- foreach my $field (@fields) {
+ foreach my $field (@$fields) {
next if $field->name =~ /^[a-zA-Z0-9_]+$/;
# The field name is illegal and can break the DB. Kill the field!
$field->set_obsolete(1);
sub bug_fields {
my $self = shift;
- $self->{bug_fields} ||= { map { $_->{name} => $_ } Bugzilla->get_fields };
+ $self->{bug_fields} ||= Bugzilla->fields({ by_name => 1 });
return $self->{bug_fields};
}
}
# Do the actual column-getting from fielddefs, now.
- foreach my $field (Bugzilla->get_fields({ obsolete => 0, buglist => 1 })) {
+ my @fields = @{ Bugzilla->fields({ obsolete => 0, buglist => 1 }) };
+ foreach my $field (@fields) {
my $id = $field->name;
$id = $old_names{$id} if exists $old_names{$id};
my $sql;
flagtypes.name keywords relevance);
# Multi-select fields are not currently supported.
- my @multi_selects = Bugzilla->get_fields(
- { obsolete => 0, type => FIELD_TYPE_MULTI_SELECT });
+ my @multi_selects = @{Bugzilla->fields(
+ { obsolete => 0, type => FIELD_TYPE_MULTI_SELECT })};
push(@no_report_columns, map { $_->name } @multi_selects);
# If you're not a time-tracker, you can't use time-tracking
# Get all the fields whose names don't contain periods. (Fields that
# contain periods are always handled in MAPPINGS.)
my @db_fields = grep { $_->name !~ /\./ }
- Bugzilla->get_fields({ obsolete => 0 });
+ @{ Bugzilla->fields({ obsolete => 0 }) };
my %full_map = (%{ MAPPINGS() }, map { $_->name => $_->name } @db_fields);
# Eliminate the fields that start with bug_ or rep_, because those are
}
if (!defined $params->{ids} and !defined $params->{names}) {
- @fields = Bugzilla->get_fields({ obsolete => 0 });
+ @fields = @{ Bugzilla->fields({ obsolete => 0 }) };
}
my @fields_out;
my $field = Bugzilla::Bug::FIELD_MAP->{$params->{field}}
|| $params->{field};
- my @global_selects = grep { !$_->is_abnormal }
- Bugzilla->get_fields({ is_select => 1 });
+ my @global_selects =
+ @{ Bugzilla->fields({ is_select => 1, is_abnormal => 0 }) };
my $values;
if (grep($_->name eq $field, @global_selects)) {
# field = '' -> Show nice list of fields
#
if (!$cgi->param('field')) {
- my @field_list = grep { !$_->is_abnormal }
- Bugzilla->get_fields({ is_select => 1 });
+ my @field_list =
+ @{ Bugzilla->fields({ is_select => 1, is_abnormal => 0 }) };
$vars->{'fields'} = \@field_list;
$template->process("admin/fieldvalues/select-field.html.tmpl", $vars)
$vars->{'resolution'} = Bugzilla::Field->new({name => 'resolution'})->legal_values;
# Boolean charts
-my @fields = Bugzilla->get_fields({ obsolete => 0 });
+my @fields = @{ Bugzilla->fields({ obsolete => 0 }) };
# If we're not in the time-tracking group, exclude time-tracking fields.
if (!Bugzilla->user->is_timetracker) {
# These are all the fields we want to preserve the order of in reports.
my %fields;
- my @select_fields = Bugzilla->get_fields({ is_select => 1 });
+ my @select_fields = @{ Bugzilla->fields({ is_select => 1 }) };
foreach my $field (@select_fields) {
my @names = map($_->name, @{$field->legal_values});
unshift @names, ' ' if $field->name eq 'resolution';
var select_values = new Array();
[% USE Bugzilla %]
-[% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %]
+[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
select_values[[% sel_field.id FILTER js %]] = [
[% FOREACH legal_value = sel_field.legal_values %]
[%# Prefix components with the name of their product so that admins
<select name="visibility_field_id" id="visibility_field_id"
onchange="onChangeVisibilityField()">
<option></option>
- [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %]
+ [% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
<option value="[% sel_field.id FILTER html %]">
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
<td>
<select disabled="disabled" name="value_field_id" id="value_field_id">
<option></option>
- [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %]
+ [% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
<option value="[% sel_field.id FILTER html %]">
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
<select name="visibility_field_id" id="visibility_field_id"
onchange="onChangeVisibilityField()">
<option></option>
- [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %]
+ [% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
[% ' selected="selected"'
<td>
<select name="value_field_id" id="value_field_id">
<option></option>
- [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %]
+ [% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
[% ' selected="selected"'
%]
[% USE Bugzilla %]
-[% custom_fields = Bugzilla.get_fields({ custom => 1 }) %]
+[% custom_fields = Bugzilla.fields({ custom => 1 }) %]
[%# We want to display the type name of fields, not their type ID. %]
[% overrides.type = {} %]