summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--defparams.pl7
-rw-r--r--globals.pl24
-rwxr-xr-xquery.cgi2
-rwxr-xr-xreports.cgi4
-rwxr-xr-xrequest.cgi8
5 files changed, 28 insertions, 17 deletions
diff --git a/defparams.pl b/defparams.pl
index 1e880dd82..cb02eb986 100644
--- a/defparams.pl
+++ b/defparams.pl
@@ -261,8 +261,11 @@ sub check_netmask {
{
name => 'useentrygroupdefault',
- desc => 'If this is on, Bugzilla will use product bug groups to restrict ' .
- 'who can enter bugs. Requires makeproductgroups to be on as well.',
+ desc => 'If this is on, Bugzilla will use product bug groups by default ' .
+ 'to restrict who can enter bugs. If this is on, users can see ' .
+ 'any product to which they have entry access in search menus. ' .
+ 'If this is off, users can see any product to which they have not ' .
+ 'been excluded by a mandatory restriction.',
type => 'b',
default => 0
},
diff --git a/globals.pl b/globals.pl
index 25a949e38..51d6642fa 100644
--- a/globals.pl
+++ b/globals.pl
@@ -774,12 +774,17 @@ sub CanEnterProduct {
#
# This function returns an alphabetical list of product names to which
# the user can enter bugs.
-sub GetEnterableProducts {
+sub GetSelectableProducts {
my $query = "SELECT name " .
"FROM products " .
"LEFT JOIN group_control_map " .
- "ON group_control_map.product_id = products.id " .
- "AND group_control_map.entry != 0 ";
+ "ON group_control_map.product_id = products.id ";
+ if (Param('useentrygroupdefault')) {
+ $query .= "AND group_control_map.entry != 0 ";
+ } else {
+ $query .= "AND group_control_map.membercontrol = " .
+ CONTROLMAPMANDATORY . " ";
+ }
if ((defined @{$::vars->{user}{groupids}})
&& (@{$::vars->{user}{groupids}} > 0)) {
$query .= "AND group_id NOT IN(" .
@@ -796,19 +801,24 @@ sub GetEnterableProducts {
return (@products);
}
-# GetEnterableProductHash
+# GetSelectableProductHash
# 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 {
+sub GetSelectableProductHash {
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 ";
+ "ON group_control_map.product_id = products.id ";
+ if (Param('useentrygroupdefault')) {
+ $query .= "AND group_control_map.entry != 0 ";
+ } else {
+ $query .= "AND group_control_map.membercontrol = " .
+ CONTROLMAPMANDATORY . " ";
+ }
if ((defined @{$::vars->{user}{groupids}})
&& (@{$::vars->{user}{groupids}} > 0)) {
$query .= "AND group_id NOT IN(" .
diff --git a/query.cgi b/query.cgi
index 680ed0557..f6f8c87a5 100755
--- a/query.cgi
+++ b/query.cgi
@@ -198,7 +198,7 @@ my @products = ();
my %component_set;
my %version_set;
my %milestone_set;
-foreach my $p (GetEnterableProducts()) {
+foreach my $p (GetSelectableProducts()) {
# We build up boolean hashes in the "-set" hashes for each of these things
# before making a list because there may be duplicates names across products.
push @products, $p;
diff --git a/reports.cgi b/reports.cgi
index 05e19990e..e18d3ee37 100755
--- a/reports.cgi
+++ b/reports.cgi
@@ -61,9 +61,7 @@ GetVersionTable();
# We only want those products that the user has permissions for.
my @myproducts;
push( @myproducts, "-All-");
-foreach my $this_product (@legal_product) {
- push(@myproducts, $this_product) if CanEnterProduct($this_product);
-}
+push( @myproducts, GetSelectableProducts());
if (! defined $FORM{'product'}) {
diff --git a/request.cgi b/request.cgi
index 920ac79cf..29c19f27f 100755
--- a/request.cgi
+++ b/request.cgi
@@ -254,10 +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();
- my $enterable = GetEnterableProductHash();
- $vars->{'products'} = $enterable->{legal_products};
- $vars->{'components'} = $enterable->{legal_components};
- $vars->{'components_by_product'} = $enterable->{components};
+ my $selectable = GetSelectableProductHash();
+ $vars->{'products'} = $selectable->{legal_products};
+ $vars->{'components'} = $selectable->{legal_components};
+ $vars->{'components_by_product'} = $selectable->{components};
$vars->{'excluded_columns'} = \@excluded_columns;
$vars->{'group_field'} = $::FORM{'group'};