Skip to content
Snippets Groups Projects
Commit d180cf3b authored by Peter Rotich's avatar Peter Rotich
Browse files

Add typeahead on basic ticket search

parent 41cbf387
Branches
Tags
No related merge requests found
...@@ -22,30 +22,32 @@ class TicketsAjaxAPI extends AjaxController { ...@@ -22,30 +22,32 @@ class TicketsAjaxAPI extends AjaxController {
function search() { function search() {
$limit = isset($_GET['limit']) ? (int) $_GET['limit']:25; $limit = isset($_REQUEST['limit']) ? (int) $_REQUEST['limit']:25;
$items=array(); $items=array();
$ticketid=false; $ticketid=false;
if(isset($_GET['id'])){ if(is_numeric($_REQUEST['q'])) {
$WHERE=' WHERE ticketID LIKE \''.db_input($_GET['id'], false).'%\''; $WHERE=' WHERE ticketID LIKE \''.db_input($_REQUEST['q'], false).'%\'';
$ticketid=true; $ticketid=true;
}elseif(isset($_GET['email'])){ } elseif(isset($_REQUEST['q'])) {
$WHERE=' WHERE email LIKE \''.db_input(strtolower($_GET['email']), false).'%\''; $WHERE=' WHERE email LIKE \''.db_input(strtolower($_REQUEST['q']), false).'%\'';
}else{ } else {
Http::response(400, "id or email argument is required"); Http::response(400, 'Query argument is required');
} }
$sql='SELECT DISTINCT ticketID,email,name FROM '.TICKET_TABLE.' '.$WHERE.' ORDER BY created LIMIT '.$limit; $sql='SELECT DISTINCT ticketID, email, name '
$res=db_query($sql); .' FROM '.TICKET_TABLE.' '.$WHERE
if($res && db_num_rows($res)){ .' ORDER BY created '
.' LIMIT '.$limit;
if(($res=db_query($sql)) && db_num_rows($res)){
while(list($id,$email,$name)=db_fetch_row($res)) { while(list($id,$email,$name)=db_fetch_row($res)) {
$info=($ticketid)?$email:$id; $info=($ticketid)?$email:$id;
$id=($ticketid)?$id:$email; $id=($ticketid)?$id:$email;
# TODO: Return 'name' from email address if 'email' argument
# specified?
$items[] = array('id'=>$id, 'value'=>$id, 'info'=>$info, $items[] = array('id'=>$id, 'value'=>$id, 'info'=>$info,
'name'=>$name); 'name'=>$name);
} }
} }
return $this->encode(array('results'=>$items));
return $this->encode($items);
} }
function acquireLock($tid) { function acquireLock($tid) {
......
...@@ -254,7 +254,7 @@ $basic_display=!isset($_REQUEST['advance_search'])?true:false; ...@@ -254,7 +254,7 @@ $basic_display=!isset($_REQUEST['advance_search'])?true:false;
<input type="hidden" name="a" value="search"> <input type="hidden" name="a" value="search">
<table> <table>
<tr> <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> <td><input type="submit" name="basic_search" class="button" value="Search"></td>
</tr> </tr>
</table> </table>
......
...@@ -45,7 +45,7 @@ $dispatcher = patterns("", ...@@ -45,7 +45,7 @@ $dispatcher = patterns("",
url("^/config/", patterns("ajax.config.php:ConfigAjaxAPI", url("^/config/", patterns("ajax.config.php:ConfigAjaxAPI",
url_get("^ui",'ui') 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("^/ticket/", patterns("ajax.tickets.php:TicketsAjaxAPI",
url_get("^(?P<tid>\d+)/preview", "previewTicket"), url_get("^(?P<tid>\d+)/preview", "previewTicket"),
url_get("^(?P<tid>\d+)/lock", "acquireLock"), url_get("^(?P<tid>\d+)/lock", "acquireLock"),
......
...@@ -185,4 +185,21 @@ $(document).ready(function(){ ...@@ -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"
});
}); });
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment