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-67ecbb4d7f56master
parent
41575103a1
commit
85b3d87a6a
38
buglist.cgi
38
buglist.cgi
|
@ -1222,16 +1222,16 @@ if ($dotweak && scalar @bugs) {
|
||||||
# This requires bug objects, at last!
|
# This requires bug objects, at last!
|
||||||
my $custom = [];
|
my $custom = [];
|
||||||
my $bug_objects = Bugzilla::Bug->new_from_list(\@bugidlist);
|
my $bug_objects = Bugzilla::Bug->new_from_list(\@bugidlist);
|
||||||
|
my $bug_vals = {};
|
||||||
for my $field (Bugzilla->active_custom_fields)
|
for my $field (Bugzilla->active_custom_fields)
|
||||||
{
|
{
|
||||||
my $vis_field = $field->visibility_field;
|
my $vis_field = $field->visibility_field;
|
||||||
if ($vis_field)
|
if ($vis_field)
|
||||||
{
|
{
|
||||||
my $vis_field_name = $vis_field->name;
|
my $visible;
|
||||||
my $visible = 0;
|
for my $cv (@{ get_bug_vals($vis_field, $bug_objects, $bug_vals) })
|
||||||
for my $bug (@$bug_objects)
|
|
||||||
{
|
{
|
||||||
if ($field->has_visibility_value($bug->$vis_field_name))
|
if ($field->has_visibility_value($cv))
|
||||||
{
|
{
|
||||||
$visible = 1;
|
$visible = 1;
|
||||||
last;
|
last;
|
||||||
|
@ -1245,19 +1245,8 @@ if ($dotweak && scalar @bugs) {
|
||||||
push @$custom, { field => $field, values => $field->legal_value_names };
|
push @$custom, { field => $field, values => $field->legal_value_names };
|
||||||
next;
|
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 = [];
|
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);
|
push @$union, $field->restricted_legal_values($cv);
|
||||||
}
|
}
|
||||||
|
@ -1266,6 +1255,23 @@ if ($dotweak && scalar @bugs) {
|
||||||
$vars->{tweak_custom_fields} = $custom;
|
$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
|
# If we're editing a stored query, use the existing query name as default for
|
||||||
# the "Remember search as" field.
|
# the "Remember search as" field.
|
||||||
$vars->{defaultsavename} = $cgi->param('query_based_on');
|
$vars->{defaultsavename} = $cgi->param('query_based_on');
|
||||||
|
|
Loading…
Reference in New Issue