getSearchEngineFactory()->create( $backendType ); } else { $searchEngine = MediaWikiServices::getInstance()->newSearchEngine(); } $profiles = $searchEngine->getProfiles( $profileType ); if ( $profiles ) { $types = []; $helpMessages = []; $defaultProfile = null; foreach ( $profiles as $profile ) { $types[] = $profile['name']; if ( isset ( $profile['desc-message'] ) ) { $helpMessages[$profile['name']] = $profile['desc-message']; } if ( !empty( $profile['default'] ) ) { $defaultProfile = $profile['name']; } } return [ ApiBase::PARAM_TYPE => $types, ApiBase::PARAM_HELP_MSG => $helpMsg, ApiBase::PARAM_HELP_MSG_PER_VALUE => $helpMessages, ApiBase::PARAM_DFLT => $defaultProfile, ]; } return null; } /** * Build the search engine to use. * If $params is provided then the following searchEngine options * will be set: * - limit: mandatory * - offset: optional, if set limit will be incremented by * one ( to support the continue parameter ) * - namespace: mandatory * - search engine profiles defined by SearchApi::getSearchProfileParams() * @param string[]|null API request params (must be sanitized by * ApiBase::extractRequestParams() before) * @return SearchEngine the search engine */ public function buildSearchEngine( array $params = null ) { if ( $params != null ) { $type = isset( $params['backend'] ) ? $params['backend'] : null; $searchEngine = MediaWikiServices::getInstance()->getSearchEngineFactory()->create( $type ); $limit = $params['limit']; $searchEngine->setNamespaces( $params['namespace'] ); $offset = null; if ( isset( $params['offset'] ) ) { // If the API supports offset then it probably // wants to fetch limit+1 so it can check if // more results are available to properly set // the continue param $offset = $params['offset']; $limit += 1; } $searchEngine->setLimitOffset( $limit, $offset ); foreach ( $this->getSearchProfileParams() as $type => $param ) { if ( isset( $params[$param] ) ) { $searchEngine->setFeatureData( $type, $params[$param] ); } } } else { $searchEngine = MediaWikiServices::getInstance()->newSearchEngine(); } return $searchEngine; } /** * @return string[] the list of supported search profile types. Key is * the profile type and its associated value is the request param. */ abstract public function getSearchProfileParams(); }