]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1161070: api searches should honour the same fields in its "order" parameter...
authorDavid Lawrence <dkl@mozilla.com>
Sat, 25 Jul 2015 04:21:06 +0000 (04:21 +0000)
committerDavid Lawrence <dkl@mozilla.com>
Sat, 25 Jul 2015 04:21:06 +0000 (04:21 +0000)
r=dylan,a=simon

Bugzilla/API/1_0/Resource/Bug.pm
Bugzilla/WebService/Bug.pm
buglist.cgi

index 6a32a687fb5bb2395da04713e62661b586a2fc9f..c6ae6a19abdb2f9af5133833d4d74813e0c94462 100644 (file)
@@ -716,7 +716,25 @@ sub search {
         ThrowUserError('buglist_parameters_required');
     }
 
-    $options{order}  = [ split(/\s*,\s*/, delete $match_params->{order}) ] if $match_params->{order};
+    # Allow the use of order shortcuts similar to web UI
+    if ($match_params->{order}) {
+        # Convert the value of the "order" form field into a list of columns
+        # by which to sort the results.
+        my %order_types = (
+            "Bug Number"   => [ "bug_id" ],
+            "Importance"   => [ "priority", "bug_severity" ],
+            "Assignee"     => [ "assigned_to", "bug_status", "priority", "bug_id" ],
+            "Last Changed" => [ "changeddate", "bug_status", "priority",
+                                "assigned_to", "bug_id" ],
+        );
+        if ($order_types{$match_params->{order}}) {
+            $options{order} = $order_types{$match_params->{order}};
+        }
+        else {
+            $options{order} = [ split(/\s*,\s*/, $match_params->{order}) ];
+        }
+    }
+
     $options{params} = $match_params;
 
     my $search = new Bugzilla::Search(%options);
index 47c04774560415779a5ea56db94ee529f3afc011..c6b28a9a04264d6af6e3aca9f6991336c1da9113 100644 (file)
@@ -575,7 +575,25 @@ sub search {
         ThrowUserError('buglist_parameters_required');
     }
 
-    $options{order}  = [ split(/\s*,\s*/, delete $match_params->{order}) ] if $match_params->{order};
+    # Allow the use of order shortcuts similar to web UI
+    if ($match_params->{order}) {
+        # Convert the value of the "order" form field into a list of columns
+        # by which to sort the results.
+        my %order_types = (
+            "Bug Number"   => [ "bug_id" ],
+            "Importance"   => [ "priority", "bug_severity" ],
+            "Assignee"     => [ "assigned_to", "bug_status", "priority", "bug_id" ],
+            "Last Changed" => [ "changeddate", "bug_status", "priority",
+                                "assigned_to", "bug_id" ],
+        );
+        if ($order_types{$match_params->{order}}) {
+            $options{order} = $order_types{$match_params->{order}};
+        }
+        else {
+            $options{order} = [ split(/\s*,\s*/, $match_params->{order}) ];
+        }
+    }
+
     $options{params} = $match_params;
 
     my $search = new Bugzilla::Search(%options);
index 2ecb04e0c4095cf18452c88c95196415e222f551..7b1c69e4011ff70a79069c9f77ffb9378edf227e 100755 (executable)
@@ -645,29 +645,18 @@ my @order_columns;
 if ($order) {
     # Convert the value of the "order" form field into a list of columns
     # by which to sort the results.
-    ORDER: for ($order) {
-        /^Bug Number$/ && do {
-            @order_columns = ("bug_id");
-            last ORDER;
-        };
-        /^Importance$/ && do {
-            @order_columns = ("priority", "bug_severity");
-            last ORDER;
-        };
-        /^Assignee$/ && do {
-            @order_columns = ("assigned_to", "bug_status", "priority",
-                              "bug_id");
-            last ORDER;
-        };
-        /^Last Changed$/ && do {
-            @order_columns = ("changeddate", "bug_status", "priority",
-                              "assigned_to", "bug_id");
-            last ORDER;
-        };
-        do {
-            # A custom list of columns. Bugzilla::Search will validate items.
-            @order_columns = split(/\s*,\s*/, $order);
-        };
+    my %order_types = (
+        "Bug Number"   => [ "bug_id" ],
+        "Importance"   => [ "priority", "bug_severity" ],
+        "Assignee"     => [ "assigned_to", "bug_status", "priority", "bug_id" ],
+        "Last Changed" => [ "changeddate", "bug_status", "priority",
+                            "assigned_to", "bug_id" ],
+    );
+    if ($order_types{$order}) {
+        @order_columns = @{ $order_types{$order} };
+    }
+    else {
+        @order_columns = split(/\s*,\s*/, $order);
     }
 }