コード例 #1
0
 /**
  * Subroutine for optionally prepending article match to result array. 
  * @return WikiaSearchResultSet provides fluent interface
  */
 public function prependArticleMatchIfExists()
 {
     wfProfileIn(__METHOD__);
     if (!($this->searchConfig->hasArticleMatch() && $this->resultsStart == 0)) {
         return $this;
     }
     $articleMatch = $this->searchConfig->getArticleMatch();
     $article = $articleMatch->getCanonicalArticle();
     $title = $article->getTitle();
     $articleId = $article->getID();
     if (!in_array($title->getNamespace(), $this->searchConfig->getNamespaces())) {
         // we had an article match by name, but not in our desired namespaces
         return $this;
     }
     $articleMatchId = sprintf('%s_%s', $this->wg->CityId, $articleId);
     $articleService = F::build('ArticleService', array($articleId));
     $firstRev = $title->getFirstRevision();
     $created = $firstRev ? wfTimestamp(TS_ISO_8601, $firstRev->getTimestamp()) : '';
     $lastRev = Revision::newFromId($title->getLatestRevID());
     $touched = $lastRev ? wfTimeStamp(TS_ISO_8601, $lastRev->getTimestamp()) : '';
     $fieldsArray = array('wid' => $this->wg->CityId, 'title' => $article->mTitle, 'url' => urldecode($title->getFullUrl()), 'score' => 'PTT', 'isArticleMatch' => true, 'ns' => $title->getNamespace(), 'pageId' => $article->getID(), 'created' => $created, 'touched' => $touched);
     //@TODO: we could put categories ^^ here but we aren't really using them yet
     $result = F::build('WikiaSearchResult', array($fieldsArray));
     $snippet = $articleService->getTextSnippet(250);
     $result->setText($snippet);
     if ($articleMatch->hasRedirect()) {
         $result->setVar('redirectTitle', $articleMatch->getArticle()->getTitle());
     }
     $result->setVar('id', $articleMatchId);
     $this->addResult($result);
     $this->resultsFound++;
     wfProfileOut(__METHOD__);
     return $this;
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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;
 }