/**
* AJAX request for search query auto-completion.
* @param $args array
* @param $request Request
* @return JSON string
*/
function queryAutocomplete($args, $request)
{
$this->validate(null, $request);
// Check whether auto-suggest is enabled.
$suggestionList = array();
$lucenePlugin = $this->_getLucenePlugin();
$enabled = (bool) $lucenePlugin->getSetting(0, 'autosuggest');
if ($enabled) {
// Retrieve search criteria from the user input.
$articleSearch = new ArticleSearch();
$searchFilters = $articleSearch->getSearchFilters($request);
// Get the autosuggest input and remove it from
// the filter array.
$autosuggestField = $request->getUserVar('searchField');
$userInput = $searchFilters[$autosuggestField];
if (isset($searchFilters[$autosuggestField])) {
unset($searchFilters[$autosuggestField]);
}
// Instantiate a search request.
$searchRequest = new SolrSearchRequest();
$searchRequest->setJournal($searchFilters['searchJournal']);
$searchRequest->setFromDate($searchFilters['fromDate']);
$searchRequest->setToDate($searchFilters['toDate']);
$keywords = $articleSearch->getKeywordsFromSearchFilters($searchFilters);
$searchRequest->addQueryFromKeywords($keywords);
// Get the web service.
$solrWebService = $lucenePlugin->getSolrWebService();
/* @var $solrWebService SolrWebService */
$suggestions = $solrWebService->getAutosuggestions($searchRequest, $autosuggestField, $userInput, (int) $lucenePlugin->getSetting(0, 'autosuggestType'));
// Prepare a suggestion list as understood by the
// autocomplete JS handler.
foreach ($suggestions as $suggestion) {
$suggestionList[] = array('label' => $suggestion, 'value' => $suggestion);
}
}
// Return the suggestions as JSON message.
$json = new JSONMessage(true, $suggestionList);
return $json->getString();
}