summaryrefslogtreecommitdiffstats
path: root/enter_bug.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'enter_bug.cgi')
-rwxr-xr-xenter_bug.cgi40
1 files changed, 28 insertions, 12 deletions
diff --git a/enter_bug.cgi b/enter_bug.cgi
index 7f5a17e46..4496f010e 100755
--- a/enter_bug.cgi
+++ b/enter_bug.cgi
@@ -72,21 +72,36 @@ if ($product_name eq '') {
my $classification = Bugzilla->params->{'useclassification'} ?
scalar($cgi->param('classification')) : '__all';
- unless ($classification) {
- my $class;
- # Get all classifications with at least one enterable product.
- foreach my $product (@enterable_products) {
- $class->{$product->classification_id} ||=
- new Bugzilla::Classification($product->classification_id);
+ # Unless a real classification name is given, we sort products
+ # by classification.
+ my @classifications;
+
+ unless ($classification && $classification ne '__all') {
+ if (Bugzilla->params->{'useclassification'}) {
+ my $class;
+ # Get all classifications with at least one enterable product.
+ foreach my $product (@enterable_products) {
+ $class->{$product->classification_id}->{'object'} ||=
+ new Bugzilla::Classification($product->classification_id);
+ # Nice way to group products per classification, without querying
+ # the DB again.
+ push(@{$class->{$product->classification_id}->{'products'}}, $product);
+ }
+ @classifications = sort {$a->{'object'}->sortkey <=> $b->{'object'}->sortkey
+ || lc($a->{'object'}->name) cmp lc($b->{'object'}->name)}
+ (values %$class);
+ }
+ else {
+ @classifications = ({object => undef, products => \@enterable_products});
}
- my @classifications = sort {$a->sortkey <=> $b->sortkey
- || lc($a->name) cmp lc($b->name)}
- (values %$class);
+ }
+ unless ($classification) {
# We know there is at least one classification available,
# else we would have stopped earlier.
if (scalar(@classifications) > 1) {
- $vars->{'classifications'} = \@classifications;
+ # We only need classification objects.
+ $vars->{'classifications'} = [map {$_->{'object'}} @classifications];
$vars->{'target'} = "enter_bug.cgi";
$vars->{'format'} = $cgi->param('format');
@@ -98,7 +113,7 @@ if ($product_name eq '') {
exit;
}
# If we come here, then there is only one classification available.
- $classification = $classifications[0]->name;
+ $classification = $classifications[0]->{'object'}->name;
}
# Keep only enterable products which are in the specified classification.
@@ -108,6 +123,7 @@ if ($product_name eq '') {
if ($class) {
@enterable_products
= grep {$_->classification_id == $class->id} @enterable_products;
+ @classifications = ({object => $class, products => \@enterable_products});
}
else {
@enterable_products = ();
@@ -118,7 +134,7 @@ if ($product_name eq '') {
ThrowUserError('no_products');
}
elsif (scalar(@enterable_products) > 1) {
- $vars->{'products'} = \@enterable_products;
+ $vars->{'classifications'} = \@classifications;
$vars->{'target'} = "enter_bug.cgi";
$vars->{'format'} = $cgi->param('format');
$vars->{'cloned_bug_id'} = $cgi->param('cloned_bug_id');