From c5cb83324741c724eca45c6130e15ac8cd071cfb Mon Sep 17 00:00:00 2001
From: Jared Hancock <jared@osticket.com>
Date: Tue, 17 Jun 2014 14:06:22 -0500
Subject: [PATCH] Maintain search backend sort order

---
 include/staff/tickets.inc.php | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php
index 0b4863416..b2c5288b2 100644
--- a/include/staff/tickets.inc.php
+++ b/include/staff/tickets.inc.php
@@ -122,6 +122,7 @@ if($staffId && ($staffId==$thisstaff->getId())) { //My tickets
 
 //Search?? Somebody...get me some coffee
 $deep_search=false;
+$order_by=$order=null;
 if($search):
     $qstr.='&a='.urlencode($_REQUEST['a']);
     $qstr.='&t='.urlencode($_REQUEST['t']);
@@ -142,9 +143,12 @@ if($search):
             require_once(INCLUDE_DIR.'ajax.tickets.php');
 
             $tickets = TicketsAjaxApi::_search(array('query'=>$queryterm));
-            if (count($tickets))
-                $qwhere .= ' AND ticket.ticket_id IN ('.
-                    implode(',',db_input($tickets)).')';
+            if (count($tickets)) {
+                $ticket_ids = implode(',',db_input($tickets));
+                $qwhere .= ' AND ticket.ticket_id IN ('.$ticket_ids.')';
+                $order_by = 'FIELD(ticket.ticket_id, '.$ticket_ids.')';
+                $order = ' ';
+            }
             else
                 // No hits -- there should be an empty list of results
                 $qwhere .= ' AND false';
@@ -154,9 +158,12 @@ if($search):
 endif;
 
 if ($_REQUEST['advsid'] && isset($_SESSION['adv_'.$_REQUEST['advsid']])) {
+    $ticket_ids = implode(',', db_input($_SESSION['adv_'.$_REQUEST['advsid']]));
     $qstr.='advsid='.$_REQUEST['advsid'];
-    $qwhere .= ' AND ticket.ticket_id IN ('. implode(',',
-        db_input($_SESSION['adv_'.$_REQUEST['advsid']])).')';
+    $qwhere .= ' AND ticket.ticket_id IN ('.$ticket_ids.')';
+    // Thanks, http://stackoverflow.com/a/1631794
+    $order_by = 'FIELD(ticket.ticket_id, '.$ticket_ids.')';
+    $order = ' ';
 }
 
 $sortOptions=array('date'=>'effective_date','ID'=>'ticket.`number`',
@@ -168,7 +175,6 @@ $orderWays=array('DESC'=>'DESC','ASC'=>'ASC');
 
 //Sorting options...
 $queue = isset($_REQUEST['status'])?strtolower($_REQUEST['status']):$status;
-$order_by=$order=null;
 if($_REQUEST['sort'] && $sortOptions[$_REQUEST['sort']])
     $order_by =$sortOptions[$_REQUEST['sort']];
 elseif($sortOptions[$_SESSION[$queue.'_tickets']['sort']]) {
-- 
GitLab