rt 4.0.23
[freeside.git] / rt / share / html / REST / 1.0 / search / ticket
index 46eb5ff..f022b03 100755 (executable)
@@ -1,40 +1,40 @@
 %# BEGIN BPS TAGGED BLOCK {{{
-%# 
+%#
 %# COPYRIGHT:
-%# 
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%#                                          <jesse@bestpractical.com>
-%# 
+%#
+%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
+%#                                          <sales@bestpractical.com>
+%#
 %# (Except where explicitly superseded by other copyright notices)
-%# 
-%# 
+%#
+%#
 %# LICENSE:
-%# 
+%#
 %# This work is made available to you under the terms of Version 2 of
 %# the GNU General Public License. A copy of that license should have
 %# been provided with this software, but in any event can be snarfed
 %# from www.gnu.org.
-%# 
+%#
 %# This work is distributed in the hope that it will be useful, but
 %# WITHOUT ANY WARRANTY; without even the implied warranty of
 %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 %# General Public License for more details.
-%# 
+%#
 %# You should have received a copy of the GNU General Public License
 %# along with this program; if not, write to the Free Software
 %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 %# 02110-1301 or visit their web page on the internet at
 %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%# 
-%# 
+%#
+%#
 %# CONTRIBUTION SUBMISSION POLICY:
-%# 
+%#
 %# (The following paragraph is not intended to limit the rights granted
 %# to you to modify and distribute this software under the terms of
 %# the GNU General Public License and is only of importance to you if
 %# you choose to contribute your changes and enhancements to the
 %# community by submitting them to Best Practical Solutions, LLC.)
-%# 
+%#
 %# By intentionally submitting any modifications, corrections or
 %# derivatives to this work, or any other work intended for use with
 %# Request Tracker, to Best Practical Solutions, LLC, you confirm that
@@ -43,7 +43,7 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%# 
+%#
 %# END BPS TAGGED BLOCK }}}
 %# REST/1.0/search/ticket
 %#
@@ -57,7 +57,7 @@ $fields => undef
 use RT::Interface::REST;
 my $output = "";
 my $status = "200 Ok";
-my $tickets = new RT::Tickets $session{CurrentUser};
+my $tickets = RT::Tickets->new($session{CurrentUser});
 
 # Parse and validate any field specifications.
 my $field  = RT::Interface::REST->field_spec;
@@ -69,7 +69,7 @@ if ($fields) {
         $output = "Invalid field specification: $fields";
         goto OUTPUT;
     }
-    @fields = map lc, split /,/, $fields;
+    @fields = map lc, split /\s*,\s*/, $fields;
     @fields{@fields} = ();
     unless (exists $fields{id}) {
         unshift @fields, "id";
@@ -88,24 +88,29 @@ my ($n, $s);
 eval {
     ($n, $s) = $tickets->FromSQL($query);
 };
-my $sortstring = "";
+
 if ($orderby) {
-    $sortstring = 'FIELD => ';
+    my %args;
+
     my $order = substr($orderby, 0, 1);
     if ($order eq '+' || $order eq '-') {
-       $sortstring .= 'substr($orderby, 1)';
-       if ($order eq '+') {
-           $sortstring .= ", ORDER => 'ASC'";
-       } elsif ($order eq '-') {
-           $sortstring .= ", ORDER => 'DESC'";
-       }
-    } else {
-       $sortstring .= '$orderby';
+        # remove the +/- sorting sigil
+        substr($orderby, 0, 1, '');
+
+        if ($order eq '+') {
+            $args{ORDER} = 'ASC';
+        }
+        elsif ($order eq '-') {
+            $args{ORDER} = 'DESC';
+        }
     }
-    my $foo = 'FIELD => ';
-    $foo .= '$orderby';
-    $tickets->OrderBy(eval $sortstring);
+
+    $tickets->OrderBy(
+        FIELD => $orderby,
+        %args,
+    );
 }
+
 if ($@ || $n == 0) {
     $s ||= $@;
     $status = "400 Bad request";
@@ -132,10 +137,11 @@ while (my $ticket = $tickets->Next) {
                }
                # Cut off the annoying ticket/ before the id;
                $key_values->{'id'} = $id;
-               $output .= join("\t", map {$key_values->{$_}} @$order)."\n";
-       
+               $output .= join("\t", map { ref $key_values->{$_} eq 'ARRAY' ?
+join( ', ', @{$key_values->{$_}} ) : $key_values->{$_} } @$order)."\n";
+
 
-       } else {        
+       } else {
                $output .= $ticket->Id . ": ". $ticket->Subject . "\n";
        }
     }