diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index 9fe9fe5bcc6af1a06f884cd754260d26541d4208..d3a57023703a7427d13d75df43df021622235d09 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -77,18 +77,28 @@ case 'search': if ($_REQUEST['query']) { $results_type=__('Search Results'); // Use an index if possible - if ($_REQUEST['search-type'] == 'email') { + if ($_REQUEST['search-type'] == 'typeahead' && Validator::is_email($_REQUEST['query'])) { $tickets = $tickets->filter(array( 'user__emails__address' => $_REQUEST['query'], )); } else { - $tickets = $tickets->filter(Q::any(array( + $basic_search = Q::any(array( 'number__startswith' => $_REQUEST['query'], 'user__name__contains' => $_REQUEST['query'], 'user__emails__address__contains' => $_REQUEST['query'], 'user__org__name__contains' => $_REQUEST['query'], - ))); + )); + if (!$_REQUEST['search-type']) { + // [Search] click, consider keywords too. This is a + // relatively ugly hack. SearchBackend::find() add in a + // constraint for the search. We need to pop that off and + // include it as an OR with the above constraints + $tickets = $ost->searcher->find($_REQUEST['query'], $tickets); + $keywords = array_pop($tickets->constraints); + $basic_search->add($keywords); + } + $tickets->filter($basic_search); } break; } elseif (isset($_SESSION['advsearch'])) { diff --git a/scp/js/scp.js b/scp/js/scp.js index fad761841fa6a6e82b811518ab3143398617972d..dfa6ed4e08beb7a497e2ab57710186153d3b449e 100644 --- a/scp/js/scp.js +++ b/scp/js/scp.js @@ -261,7 +261,7 @@ var scp_prep = function() { }, onselect: function (obj) { var form = $('#basic-ticket-search').closest('form'); - form.find('input[name=search-type]').val('email'); + form.find('input[name=search-type]').val('typeahead'); $('#basic-ticket-search').val(obj.value); form.submit(); },