From 4aad094aa406d102927a0665b021ad820c3e6164 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Tue, 19 Dec 2006 16:32:03 +0000 Subject: Bug 343635: Enabling classifications should add a tree view of classifications and products when entering a new bug - Patch by Frédéric Buclin r=bkor a=justdave MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- enter_bug.cgi | 40 +++++++++++++++------- .../default/global/choose-classification.html.tmpl | 5 ++- .../en/default/global/choose-product.html.tmpl | 36 +++++++++++++------ 3 files changed, 57 insertions(+), 24 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'); diff --git a/template/en/default/global/choose-classification.html.tmpl b/template/en/default/global/choose-classification.html.tmpl index 1ef99d4d8..7f5a5bcad 100644 --- a/template/en/default/global/choose-classification.html.tmpl +++ b/template/en/default/global/choose-classification.html.tmpl @@ -41,7 +41,10 @@  Show all products - + + +   + [% END %] [% FOREACH class = classifications %] diff --git a/template/en/default/global/choose-product.html.tmpl b/template/en/default/global/choose-product.html.tmpl index 0d4a451b6..a24ca61c1 100644 --- a/template/en/default/global/choose-product.html.tmpl +++ b/template/en/default/global/choose-product.html.tmpl @@ -20,8 +20,9 @@ #%] [%# INTERFACE: - # products: array of product objects. The list of products - # the user can enter bugs into. + # classifications: array of hashes, with an 'object' key representing a + # classification object and 'products' the list of + # product objects the user can enter bugs into. # target: the script that displays this template. # cloned_bug_id: ID of the bug being cloned. # format: the desired format to display the target. @@ -42,16 +43,29 @@ -[% FOREACH p = products %] +[% FOREACH c = classifications %] + [% IF c.object %] + + + + [% END %] + + [% FOREACH p = c.products %] + + + + + + [% END %] + - - - + [% END %] -- cgit v1.2.3-24-g4f1b
[% c.object.name FILTER html %]: + [%+ c.object.description FILTER html_light %]
+ + [% p.name FILTER html FILTER no_break %]:  + [% p.description FILTER html_light %]
- - [% p.name FILTER html %]:  - [% p.description FILTER html_light %]