my $product_id = get_product_id($product);
if (!$product_id || !$user->can_enter_product($product)) {
- # Reference to a subset of %::proddesc, which the user is allowed to see
- my %products;
-
- if (AnyEntryGroups()) {
- # OK, now only add products the user can see
- Bugzilla->login(LOGIN_REQUIRED);
- foreach my $p (@::legal_product) {
- if ($user->can_enter_product($p)) {
- $products{$p} = $::proddesc{$p};
- }
- }
- }
- else {
- %products = %::proddesc;
- }
+ # Products which the user is allowed to see.
+ my @products = @{$user->get_enterable_products()};
- my $prodsize = scalar(keys %products);
- if ($prodsize == 0) {
+ if (scalar(@products) == 0) {
ThrowUserError("no_products");
}
- elsif ($prodsize > 1) {
- $vars->{'proddesc'} = \%products;
+ elsif (scalar(@products) > 1) {
+ # XXX - For backwards-compatibility with old template
+ # interfaces, we now create a proddesc hash. This can go away
+ # once we update the templates.
+ my %product_desc;
+ foreach my $product (@products) {
+ $product_desc{$product->name} = $product->description;
+ }
+ $vars->{'proddesc'} = \%product_desc;
$vars->{'target'} = "describecomponents.cgi";
# If an invalid product name is given, or the user is not
# allowed to access that product, a message is displayed
exit;
}
- $product = (keys %products)[0];
- $product_id = get_product_id($product);
+ # Else, if there is only one product:
+ $product = $products[0]->name;
+ $product_id = $products[0]->id;
}
######################################################################
@legal_keywords
%versions
%target_milestone
- $proddesc
);
# If we're using bug groups to restrict bug entry, we need to know who the
}
my %products;
+ # XXX - This loop should work in some more sensible, efficient way.
foreach my $p (@enterable_products) {
if (Bugzilla->user->can_enter_product($p)) {
if (IsInClassification(scalar $cgi->param('classification'),$p) ||
$cgi->param('classification') eq "__all") {
- $products{$p} = $::proddesc{$p};
+ my $product_object = new Bugzilla::Product({name => $p});
+ $products{$p} = $product_object->description;
}
}
}
$zz = @main::legal_target_milestone;
$zz = @main::legal_versions;
$zz = @main::milestoneurl;
- $zz = %main::proddesc;
$zz = @main::prodmaxvotes;
}
my $mpart = $dotargetmilestone ? ", milestoneurl" : "";
- SendSQL("SELECT name, description, votesperuser, disallownew$mpart " .
+ SendSQL("SELECT name, votesperuser, disallownew$mpart " .
"FROM products ORDER BY name");
while (@line = FetchSQLData()) {
- my ($p, $d, $votesperuser, $dis, $u) = (@line);
- $::proddesc{$p} = $d;
+ my ($p, $votesperuser, $dis, $u) = (@line);
if (!$dis && scalar($::components{$p})) {
push @::enterable_products, $p;
}
'*::legal_platform', '*::legal_opsys',
'*::legal_bug_status', '*::legal_resolution']));
- print $fh (Data::Dumper->Dump([\@::settable_resolution, \%::proddesc,
+ print $fh (Data::Dumper->Dump([\@::settable_resolution,
\%::classifications,
\@::enterable_products, \%::prodmaxvotes],
- ['*::settable_resolution', '*::proddesc',
+ ['*::settable_resolution',
'*::classifications',
'*::enterable_products', '*::prodmaxvotes']));