/** * Finds an article match and sets the value in the search config * @see WikiaSearchTest::testGetArticleMatch * @see WikiaSearchTest::testGetArticleMatchWithNoMatch * @see WikiaSearchTest::testGetArticleMatchWithMatchFirstCall * @see WikiaSearchTest::testGetArticleMatchWithMatchFirstCallMismatchedNamespaces * @param WikiaSearchConfig $config * @return WikiaSearchArticleMatch|null */ public function getArticleMatch(WikiaSearchConfig $config) { wfProfileIn(__METHOD__); if ($config->hasArticleMatch()) { return $config->getArticleMatch(); } $term = $config->getOriginalQuery(); $searchEngine = F::build('SearchEngine'); $title = $searchEngine->getNearMatch($term); if ($title !== null && in_array($title->getNamespace(), $config->getNamespaces())) { $article = F::build('Article', array($title, RequestContext::getMain()), 'newFromTitle'); $articleMatch = F::build('WikiaSearchArticleMatch', array($article)); $config->setArticleMatch($articleMatch); wfProfileOut(__METHOD__); return $articleMatch; } wfProfileOut(__METHOD__); return null; }