diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index 2eff8924b84c1d909d8c35da3ea171d4ebf2619a..6fb369d73778254779707efab374eddd7677cf28 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -22,30 +22,32 @@ class TicketsAjaxAPI extends AjaxController { function search() { - $limit = isset($_GET['limit']) ? (int) $_GET['limit']:25; + $limit = isset($_REQUEST['limit']) ? (int) $_REQUEST['limit']:25; $items=array(); $ticketid=false; - if(isset($_GET['id'])){ - $WHERE=' WHERE ticketID LIKE \''.db_input($_GET['id'], false).'%\''; + if(is_numeric($_REQUEST['q'])) { + $WHERE=' WHERE ticketID LIKE \''.db_input($_REQUEST['q'], false).'%\''; $ticketid=true; - }elseif(isset($_GET['email'])){ - $WHERE=' WHERE email LIKE \''.db_input(strtolower($_GET['email']), false).'%\''; - }else{ - Http::response(400, "id or email argument is required"); + } elseif(isset($_REQUEST['q'])) { + $WHERE=' WHERE email LIKE \''.db_input(strtolower($_REQUEST['q']), false).'%\''; + } else { + Http::response(400, 'Query argument is required'); } - $sql='SELECT DISTINCT ticketID,email,name FROM '.TICKET_TABLE.' '.$WHERE.' ORDER BY created LIMIT '.$limit; - $res=db_query($sql); - if($res && db_num_rows($res)){ + $sql='SELECT DISTINCT ticketID, email, name ' + .' FROM '.TICKET_TABLE.' '.$WHERE + .' ORDER BY created ' + .' LIMIT '.$limit; + + if(($res=db_query($sql)) && db_num_rows($res)){ while(list($id,$email,$name)=db_fetch_row($res)) { $info=($ticketid)?$email:$id; $id=($ticketid)?$id:$email; - # TODO: Return 'name' from email address if 'email' argument - # specified? $items[] = array('id'=>$id, 'value'=>$id, 'info'=>$info, 'name'=>$name); } } - return $this->encode(array('results'=>$items)); + + return $this->encode($items); } function acquireLock($tid) { diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index d0b27690e2cf138140c1707e1f3a92809493cc91..3bfc8156ace212268d53e34be15f6ccaafb4b4c3 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -254,7 +254,7 @@ $basic_display=!isset($_REQUEST['advance_search'])?true:false; <input type="hidden" name="a" value="search"> <table> <tr> - <td><input type="text" id="query" name="query" size=30 value="<?php echo Format::htmlchars($_REQUEST['query']); ?>"></td> + <td><input type="text" id="ticket-search" name="query" size=30 value="<?php echo Format::htmlchars($_REQUEST['query']); ?>"></td> <td><input type="submit" name="basic_search" class="button" value="Search"></td> </tr> </table> diff --git a/scp/ajax.php b/scp/ajax.php index a65de32d2d166af48661eec772cedc414d3b87a1..7c66da27ca0b1853953bdec0c624560db3176215 100644 --- a/scp/ajax.php +++ b/scp/ajax.php @@ -45,7 +45,7 @@ $dispatcher = patterns("", url("^/config/", patterns("ajax.config.php:ConfigAjaxAPI", url_get("^ui",'ui') )), - url_get("^/ticket$", array("ajax.tickets.php:TicketsAjaxAPI", "search")), + url_get("^/tickets$", array("ajax.tickets.php:TicketsAjaxAPI", "search")), url("^/ticket/", patterns("ajax.tickets.php:TicketsAjaxAPI", url_get("^(?P<tid>\d+)/preview", "previewTicket"), url_get("^(?P<tid>\d+)/lock", "acquireLock"), diff --git a/scp/js/scp.js b/scp/js/scp.js index 4f61090529b84749a91139ef237308ed3a5e31ee..10b8d733121107ce95840054cd6024d08bba9d54 100644 --- a/scp/js/scp.js +++ b/scp/js/scp.js @@ -185,4 +185,21 @@ $(document).ready(function(){ } } + /* Typeahead init */ + $('#ticket-search').typeahead({ + source: function (typeahead, query) { + $.ajax({ + url: "ajax.php/tickets?q="+query, + dataType: 'json', + success: function (data) { + typeahead.process(data); + } + }); + }, + onselect: function (obj) { + $('#ticket-search').closest('form').submit(); + }, + property: "value" + }); + });