From 80c6d150b42ae5d9ba7464c5e20023cc90388259 Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Tue, 9 Aug 2011 14:19:43 -0700 Subject: Bug 636416: Use the standard value-controller javascript to control the drop-down fields on the Advanced Search page. r=glob, a=mkanat --- query.cgi | 66 +++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 23 deletions(-) (limited to 'query.cgi') diff --git a/query.cgi b/query.cgi index 93de62b63..0182f66eb 100755 --- a/query.cgi +++ b/query.cgi @@ -40,6 +40,46 @@ use Bugzilla::Keyword; use Bugzilla::Field; use Bugzilla::Install::Util qw(vers_cmp); +############### +# Subroutines # +############### + +sub get_product_values { + my ($products, $field, $vars) = @_; + my @all_values = map { @{ $_->$field } } @$products; + + my (@unique, %duplicates, %duplicate_count, %seen); + foreach my $value (@all_values) { + my $lc_name = lc($value->name); + if ($seen{$lc_name}) { + $duplicate_count{$seen{$lc_name}->id}++; + $duplicates{$value->id} = $seen{$lc_name}; + next; + } + push(@unique, $value); + $seen{$lc_name} = $value; + } + + if ($field eq 'version') { + @unique = sort { vers_cmp(lc($a->name), lc($b->name)) } @unique; + } + else { + @unique = sort { lc($a->name) cmp lc($b->name) } @unique; + } + + $field =~ s/s$//; + $field = 'target_milestone' if $field eq 'milestone'; + $vars->{duplicates}->{$field} = \%duplicates; + $vars->{duplicate_count}->{$field} = \%duplicate_count; + # "component" is a reserved word in Template Toolkit. + $field = 'component_' if $field eq 'component'; + $vars->{$field} = \@unique; +} + +############### +# Main Script # +############### + my $cgi = Bugzilla->cgi; my $dbh = Bugzilla->dbh; my $template = Bugzilla->template; @@ -133,38 +173,18 @@ if (!PrefillForm($buffer)) { my @selectable_products = sort {lc($a->name) cmp lc($b->name)} @{$user->get_selectable_products}; Bugzilla::Product::preload(\@selectable_products); +$vars->{'product'} = \@selectable_products; # Create the component, version and milestone lists. -my %components; -my %versions; -my %milestones; - -foreach my $product (@selectable_products) { - $components{$_->name} = 1 foreach (@{$product->components}); - $versions{$_->name} = 1 foreach (@{$product->versions}); - $milestones{$_->name} = 1 foreach (@{$product->milestones}); +foreach my $field (qw(components versions milestones)) { + get_product_values(\@selectable_products, $field, $vars); } -my @components = sort(keys %components); -my @versions = sort { vers_cmp (lc($a), lc($b)) } keys %versions; -my @milestones = sort(keys %milestones); - -$vars->{'product'} = \@selectable_products; - # Create data structures representing each classification if (Bugzilla->params->{'useclassification'}) { $vars->{'classification'} = $user->get_selectable_classifications; } -# We use 'component_' because 'component' is a Template Toolkit reserved word. -$vars->{'component_'} = \@components; - -$vars->{'version'} = \@versions; - -if (Bugzilla->params->{'usetargetmilestone'}) { - $vars->{'target_milestone'} = \@milestones; -} - my @chfields; push @chfields, "[Bug creation]"; -- cgit v1.2.3-24-g4f1b