Пример #1
0
	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;
	}