]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 343635: Enabling classifications should add a tree view of classifications and...
authorlpsolit%gmail.com <>
Tue, 19 Dec 2006 16:32:03 +0000 (16:32 +0000)
committerlpsolit%gmail.com <>
Tue, 19 Dec 2006 16:32:03 +0000 (16:32 +0000)
enter_bug.cgi
template/en/default/global/choose-classification.html.tmpl
template/en/default/global/choose-product.html.tmpl

index 7f5a17e46b95ee7a6fa1ca99b81ec1baf180ea40..4496f010e798f8a3c8fb78ab789d4f42c56c729e 100755 (executable)
@@ -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');
index 1ef99d4d8daf094da301d28658f4f381f8c7ed69..7f5a5bcadcb6950d2cdb0a6c1ada5b90d9b4f309 100644 (file)
     </th>
 
     <td valign="top">&nbsp;Show all products</td>
-  </tr>    
+  </tr>
+  <tr>
+    <th colspan="2">&nbsp;</th>
+  </tr>
 [% END %]
 
 [% FOREACH class = classifications %]
index 0d4a451b6a2dec600c3ac2d62756154529530ff2..a24ca61c11fa54fdf10a34c9e8380fc9162e5013 100644 (file)
@@ -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.
 
 <table>
 
-[% FOREACH p = products %]
+[% FOREACH c = classifications %]
+  [% IF c.object %]
+    <tr>
+      <th colspan="2" align="left">[% c.object.name FILTER html %]:
+      [%+ c.object.description FILTER html_light %]</th>
+    </tr>
+  [% END %]
+
+  [% FOREACH p = c.products %]
+    <tr>
+      <th align="right" valign="top">
+        <a href="[% target %]?product=[% p.name FILTER url_quote -%]
+              [%- IF cloned_bug_id %]&amp;cloned_bug_id=[% cloned_bug_id FILTER url_quote %][% END -%] 
+              [%- IF format %]&amp;format=[% format FILTER url_quote %][% END %]">
+        [% p.name FILTER html FILTER no_break %]</a>:&nbsp;
+      </th>
+
+      <td valign="top">[% p.description FILTER html_light %]</td>
+    </tr>
+  [% END %]
+
   <tr>
-    <th align="right" valign="top">
-      <a href="[% target %]?product=[% p.name FILTER url_quote -%]
-            [%- IF cloned_bug_id %]&amp;cloned_bug_id=[% cloned_bug_id FILTER url_quote %][% END -%] 
-            [%- IF format %]&amp;format=[% format FILTER url_quote %][% END %]">
-      [% p.name FILTER html %]</a>:&nbsp;
-    </th>
-
-    <td valign="top">[% p.description FILTER html_light %]</td>
+    <th colspan="2">&nbsp;</th>
   </tr>
 [% END %]