summaryrefslogtreecommitdiffstats
path: root/query.cgi
diff options
context:
space:
mode:
authorMax Kanat-Alexander <mkanat@bugzilla.org>2011-08-09 23:19:43 +0200
committerMax Kanat-Alexander <mkanat@bugzilla.org>2011-08-09 23:19:43 +0200
commit80c6d150b42ae5d9ba7464c5e20023cc90388259 (patch)
tree77df9794d444fbc861f53aa0240128a53f9d6467 /query.cgi
parent93175c689f0349d879b3dfca5bd0236c19b73855 (diff)
downloadbugzilla-80c6d150b42ae5d9ba7464c5e20023cc90388259.tar.gz
bugzilla-80c6d150b42ae5d9ba7464c5e20023cc90388259.tar.xz
Bug 636416: Use the standard value-controller javascript to control the
drop-down fields on the Advanced Search page. r=glob, a=mkanat
Diffstat (limited to 'query.cgi')
-rwxr-xr-xquery.cgi66
1 files changed, 43 insertions, 23 deletions
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]";