/**
  * Called in index action. Sets the SearchConfigs namespaces based on MW-core NS request style.
  * @see    WikiSearchControllerTest::testSetNamespacesFromRequest
  * @param  WikiaSearchConfig $searchConfig
  * @return boolean true
  */
 private function setNamespacesFromRequest(WikiaSearchConfig $searchConfig, User $user)
 {
     $searchEngine = F::build('SearchEngine');
     $searchableNamespaces = $searchEngine->searchableNamespaces();
     $namespaces = array();
     foreach ($searchableNamespaces as $i => $name) {
         if ($this->getVal('ns' . $i, false)) {
             $namespaces[] = $i;
         }
     }
     if (empty($namespaces) && $user->getOption('searchAllNamespaces')) {
         $namespaces = array_keys($searchableNamespaces);
     }
     $searchConfig->setNamespaces($namespaces);
     return true;
 }
 /**
  * Builds the necessary query clauses based on values set in the searchconfig object
  * @see    WikiaSearchTest::testGetQueryClausesString
  * @param  WikiaSearchConfig $searchConfig
  * @return string
  */
 private function getQueryClausesString(WikiaSearchConfig $searchConfig)
 {
     $queryClauses = array();
     if ($searchConfig->isInterWiki()) {
         $widQueries = array();
         foreach ($this->getInterWikiSearchExcludedWikis() as $excludedWikiId) {
             $widQueries[] = self::valueForField('wid', $excludedWikiId, array('negate' => true));
         }
         $queryClauses[] = implode(' AND ', $widQueries);
         $queryClauses[] = self::valueForField('lang', $this->wg->ContLang->mCode);
         $queryClauses[] = self::valueForField('iscontent', 'true');
         $hub = $searchConfig->getHub();
         if (!empty($hub)) {
             $queryClauses[] = self::valueForField('hub', $hub);
         }
     } else {
         if ($searchConfig->getVideoSearch()) {
             $searchConfig->setNamespaces(array(NS_FILE));
             $queryClauses[] = self::valueForField('is_video', 'true');
             $queryWithVideo = sprintf('(%s OR %s)', self::valueForField('wid', $searchConfig->getCityId()), self::valueForField('wid', self::VIDEO_WIKI_ID));
             array_unshift($queryClauses, $queryWithVideo);
         } else {
             array_unshift($queryClauses, self::valueForField('wid', $searchConfig->getCityId()));
         }
         $nsQuery = '';
         foreach ($searchConfig->getNamespaces() as $namespace) {
             $nsQuery .= (!empty($nsQuery) ? ' OR ' : '') . self::valueForField('ns', $namespace);
         }
         $queryClauses[] = "({$nsQuery})";
     }
     if (!$searchConfig->getIncludeRedirects()) {
         $queryClauses[] = self::valueForField('is_redirect', 'false');
     }
     return sprintf('(%s)', implode(' AND ', $queryClauses));
 }