Bug 126174 - Correctly filter visibility values, and do not request the same values twice

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1670 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2013-05-30 15:35:50 +00:00
parent 41575103a1
commit 85b3d87a6a
1 changed files with 22 additions and 16 deletions

View File

@ -1222,16 +1222,16 @@ if ($dotweak && scalar @bugs) {
# This requires bug objects, at last!
my $custom = [];
my $bug_objects = Bugzilla::Bug->new_from_list(\@bugidlist);
my $bug_vals = {};
for my $field (Bugzilla->active_custom_fields)
{
my $vis_field = $field->visibility_field;
if ($vis_field)
{
my $vis_field_name = $vis_field->name;
my $visible = 0;
for my $bug (@$bug_objects)
my $visible;
for my $cv (@{ get_bug_vals($vis_field, $bug_objects, $bug_vals) })
{
if ($field->has_visibility_value($bug->$vis_field_name))
if ($field->has_visibility_value($cv))
{
$visible = 1;
last;
@ -1245,19 +1245,8 @@ if ($dotweak && scalar @bugs) {
push @$custom, { field => $field, values => $field->legal_value_names };
next;
}
my $vals = {};
my $value_field_name = $value_field->name;
my $value_name_field = $value_field->NAME_FIELD;
my $v;
for my $bug (@$bug_objects)
{
$v = $bug->$value_field_name;
$vals->{ref($v) ? $v->$value_name_field : $v} = 1;
}
my $class = Bugzilla::Field::Choice->type($value_field);
$vals = $class->match({ $value_name_field => [ keys %$vals ] });
my $union = [];
for my $cv (@$vals)
for my $cv (@{ get_bug_vals($value_field, $bug_objects, $bug_vals) })
{
push @$union, $field->restricted_legal_values($cv);
}
@ -1266,6 +1255,23 @@ if ($dotweak && scalar @bugs) {
$vars->{tweak_custom_fields} = $custom;
}
sub get_bug_vals
{
my ($field, $bugs, $bug_vals) = @_;
return $bug_vals->{$field} if $bug_vals->{$field};
my $field_name = $field->name;
my $name_field = $field->NAME_FIELD;
my $vals = {};
my $v;
for my $bug (@$bugs)
{
$v = $bug->$field_name;
$vals->{ref($v) ? $v->$name_field : $v} = 1;
}
my $class = Bugzilla::Field::Choice->type($field);
return $bug_vals->{$field} = $class->match({ $name_field => [ keys %$vals ] });
}
# If we're editing a stored query, use the existing query name as default for
# the "Remember search as" field.
$vars->{defaultsavename} = $cgi->param('query_based_on');