/** * Called in index action. * Based on an article match and various settings, generates tracking events and routes user to appropriate page. * @see WikiaSearchControllerTest::testArticleMatchTracking * @param WikiaSearchConfig $searchConfig * @return boolean true (if not routed to search match page) */ private function handleArticleMatchTracking(WikiaSearchConfig $searchConfig) { $articleMatch = $searchConfig->getArticleMatch(); $track = F::build('Track'); if (!empty($articleMatch) && $this->getVal('fulltext', '0') === '0') { $article = $articleMatch->getArticle(); $title = $article->getTitle(); $this->wf->RunHooks('SpecialSearchIsgomatch', array(&$title, $searchConfig->getOriginalQuery())); $track->event('search_start_gomatch', array('sterm' => $searchConfig->getOriginalQuery(), 'rver' => 0)); $this->response->redirect($title->getFullURL()); } elseif (!empty($articleMatch)) { $track->event('search_start_match', array('sterm' => $searchConfig->getOriginalQuery(), 'rver' => 0)); } else { $title = F::build('Title', array($searchConfig->getOriginalQuery()), 'newFromText'); if ($title !== null) { $this->wf->RunHooks('SpecialSearchNogomatch', array(&$title)); } } return true; }
/** * 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; }