From 75d797af27c5e47fe79f44f4c0bc8c0a5f3bd3c4 Mon Sep 17 00:00:00 2001 From: "bugreport%peshkin.net" Date: Mon, 25 Nov 2002 05:38:09 +0000 Subject: [PATCH] Bug 180460 request.cgi doesn't filter list of products/components patch by joel r=bbaetz a=justdave --- webtools/bugzilla/globals.pl | 45 +++++++++++++++++++++++++++++++++++ webtools/bugzilla/request.cgi | 7 +++--- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/webtools/bugzilla/globals.pl b/webtools/bugzilla/globals.pl index 9d4372d0093c..07e9804c259a 100644 --- a/webtools/bugzilla/globals.pl +++ b/webtools/bugzilla/globals.pl @@ -795,6 +795,51 @@ sub GetEnterableProducts { return (@products); } +# GetEnterableProductHash +# returns a hash containing +# legal_products => an enterable product list +# legal_components => the list of components of enterable products +# components => a hash of component lists for each enterable product +sub GetEnterableProductHash { + my $query = "SELECT products.name, components.name " . + "FROM products " . + "LEFT JOIN components " . + "ON components.product_id = products.id " . + "LEFT JOIN group_control_map " . + "ON group_control_map.product_id = products.id " . + "AND group_control_map.entry != 0 "; + if ((defined @{$::vars->{user}{groupids}}) + && (@{$::vars->{user}{groupids}} > 0)) { + $query .= "AND group_id NOT IN(" . + join(',', @{$::vars->{user}{groupids}}) . ") "; + } + $query .= "WHERE group_id IS NULL " . + "ORDER BY products.name, components.name"; + PushGlobalSQLState(); + SendSQL($query); + my @products = (); + my %components = (); + my %components_by_product = (); + while (MoreSQLData()) { + my ($product, $component) = FetchSQLData(); + if (!grep($_ eq $product, @products)) { + push @products, $product; + } + if ($component) { + $components{$component} = 1; + push @{$components_by_product{$product}}, $component; + } + } + PopGlobalSQLState(); + my @componentlist = (sort keys %components); + return { + legal_products => \@products, + legal_components => \@componentlist, + components => \%components_by_product, + }; +} + + sub CanSeeBug { my ($id, $userid) = @_; diff --git a/webtools/bugzilla/request.cgi b/webtools/bugzilla/request.cgi index c2dbae81eaec..c74e97e64cc4 100755 --- a/webtools/bugzilla/request.cgi +++ b/webtools/bugzilla/request.cgi @@ -254,9 +254,10 @@ sub queue { # menu when the products menu changes; used by the template to populate # the menus and keep the components menu consistent with the products menu GetVersionTable(); - $vars->{'products'} = \@::legal_product; - $vars->{'components'} = \@::legal_components; - $vars->{'components_by_product'} = \%::components; + my $enterable = GetEnterableProductHash(); + $vars->{'products'} = $enterable->{legal_products}; + $vars->{'components'} = $enterable->{legal_components}; + $vars->{'components_by_product'} = $enterable->{components}; $vars->{'excluded_columns'} = \@excluded_columns; $vars->{'group_field'} = $::FORM{'group'};