public function search(){ $view = $this->getView(); $request = $this->getPageRequest(); if(!$request->getParameter('q')){ // Simply redirect to the sitemap if no query was provided. \Core\redirect('/page/sitemap'); } $search = new \Core\Search\SearchResults(); $search->query = $request->getParameter('q'); $results = PageModel::Search($request->getParameter('q'), ['indexable = 1']); $isadmin = \Core\user()->checkAccess('g:admin'); foreach($results as $r){ /** @var Core\Search\ModelResult $r */ /** @var PageModel $model */ $model = $r->_model; if(!$model->isPublished() && !$isadmin){ // The page is not published and the user is not an admin, skip! continue; } // Skip the sitemap page iteself, as that will probably contain most of the keywords. if($model->get('baseurl') == '/page/sitemap'){ continue; } if(!\Core\user()->checkAccess($model->get('access'))){ // User does not have access to this page! continue; } if($r->relevancy < 10){ // Not a good enough of a match. continue; } // Otherwise. $search->addResult($r); } $search->sortResults(); HookHandler::DispatchHook('/core/page/search/results', $search); $view->title = 'Site Search'; $view->assign('query', $request->getParameter('q')); $view->assign('results', $search); }
public function pagemetas_autocompleteuser(){ $request = $this->getPageRequest(); $view = $this->getView(); $view->mode = View::MODE_AJAX; $view->contenttype = View::CTYPE_JSON; $view->record = false; // This is an ajax-only request. if(!$request->isAjax()){ return View::ERROR_BADREQUEST; } // Does the user have access to search for users? if(!\Core\user()->checkAccess('p:/user/search/autocomplete')){ return View::ERROR_ACCESSDENIED; } $includeInactive = ($request->getParameter('inactive') == '1'); $term = $request->getParameter('term'); $results = UserModel::Search($term); // I want to order them by relevancy. $sr = new Core\Search\SearchResults(); $sr->addResults($results); $sr->sortResults(); $filteredresults = array(); foreach($sr->get() as $user){ /** @var Core\Search\ModelResult $user */ /** @var UserModel $model */ $model = $user->_model; // This model will only be added to the form if it's active. if(!($model->get('active') || $includeInactive)){ continue; } $filteredresults[] = array( 'id' => $model->get('id'), 'label' => $model->getDisplayName(), 'value' => $model->get('id'), ); } // The json data will contain the following keys for each element: // id, label, value $view->jsondata = $filteredresults; }