/**
  * getWikiData
  *
  * use subpage as param and try to find wiki which match criteria
  *
  * @access private
  *
  * @param mixed $subpage:
  *
  * @return Database Row from city_list
  */
 private function getWikiData($subpage)
 {
     global $wgRequest;
     $domain = $wgRequest->getVal("wpCityDomain", null);
     $cityid = $wgRequest->getVal("cityid", null);
     $tab = "variables";
     if (is_null($cityid) && (isset($subpage) || isset($domain))) {
         /**
          * if there is # in subpage we are switching tab
          */
         if (strpos($subpage, "/")) {
             $parts = explode("/", $subpage, 3);
             if (is_array($parts) && sizeof($parts) >= 2) {
                 $subpage = $parts[0];
                 $tab = $parts[1];
                 if ($tab === "variables" && isset($parts[2])) {
                     $this->mVariableName = trim($parts[2]);
                 }
                 if (($tab === "tags" || $tab === "findtags") && isset($parts[2])) {
                     $this->mSearchTag = trim($parts[2]);
                 }
             }
         }
         if (is_null($domain)) {
             $domain = $subpage;
         }
         if (ctype_digit($subpage)) {
             $cityid = $subpage;
         } else {
             /**
              * if $domain starts with db: it means that we want to search by database
              * if $domain starts with id: it means that we want to search by city_id
              */
             $cityid = null;
             if (preg_match("/^db\\:/", $domain)) {
                 list($prefix, $name) = explode(":", $domain, 2);
                 $cityid = WikiFactory::DBtoID(strtolower($name));
             } elseif (preg_match("/^id\\:/", $domain)) {
                 list($prefix, $cityid) = explode(":", $domain, 2);
             } else {
                 /**
                  * if there's no dot in cityname we add .wikia.com
                  * or if is only one dot (language.domain.wikia.com)
                  */
                 if (sizeof(explode(".", $domain)) <= 2 && strlen($domain) > 0) {
                     $this->mDomain = $domain;
                     $domain = $domain . ".wikia.com";
                 } else {
                     list($code, $subdomain) = explode(".", $domain, 2);
                     $exists = 0;
                     if (in_array($code, array_keys(Language::getLanguageNames()))) {
                         $exists = 1;
                     } else {
                         $cityid = WikiFactory::DomainToId($domain);
                         if (!is_null($cityid)) {
                             $exists = 1;
                         }
                     }
                     if ($exists == 1) {
                         $this->mDomain = $code . "." . $subdomain;
                         $domain = sprintf("%s.%s", $code, $subdomain);
                     }
                 }
                 if (is_null($cityid)) {
                     $cityid = WikiFactory::DomainToId($domain);
                 }
             }
         }
     }
     $this->mTab = $tab;
     if (!is_null($cityid)) {
         $this->mTitle = Title::makeTitle(NS_SPECIAL, "WikiFactory/{$cityid}/{$tab}");
     }
     if (!isset($this->mVariableName)) {
         $this->mVariableName = "";
     }
     return WikiFactory::getWikiByID($cityid);
 }
 public function execute($subpage)
 {
     global $wgUser, $wgOut, $wgRequest, $wgCityId, $wgDBname, $wgLang;
     if ($wgUser->isBlocked()) {
         throw new UserBlockedError($this->getUser()->mBlock);
     }
     if (wfReadOnly()) {
         $wgOut->readOnlyPage();
         return;
     }
     // Set the current wiki ID, DB name and user from globals
     $this->mCityId = $wgCityId;
     $this->mCityDBName = $wgDBname;
     $this->mUser = $wgUser;
     // Check the current $wgUser against the set of groups WikiStats recognizes
     $this->userIsSpecial = WikiStats::isAllowed();
     $this->mFromDate = $wgRequest->getVal("wsfrom", WIKISTATS_MIN_STATS_YEAR . WIKISTATS_MIN_STATS_MONTH);
     $this->mToDate = $wgRequest->getVal("wsto", date("Ym"));
     $this->mTitle = Title::makeTitle(NS_SPECIAL, "WikiStats");
     $this->mAction = $wgRequest->getVal("action", "");
     $this->mXLS = $wgRequest->getVal("wsxls", false);
     $this->mMonth = $wgRequest->getVal("wsmonth", 0);
     $this->mLimit = $wgRequest->getVal("wslimit", WIKISTATS_WIKIANS_RANK_NBR);
     $this->mAllWikis = 0;
     // Use the first part of the subpage as the action
     if ($subpage) {
         $path = explode("/", $subpage);
         $this->mAction = $path[0];
     }
     // Redirect to the default action if one hasn't been set
     if (empty($this->mAction)) {
         $wgOut->redirect($this->mTitle->getFullURL("action={$this->defaultAction}"));
     }
     // Split out the the from and to month and year for convenience
     if (preg_match("/^([0-9]{4})([0-9]{1,2})/", $this->mFromDate, $m)) {
         list(, $this->fromYear, $this->fromMonth) = $m;
     } else {
         $wgOut->showErrorPage("Bad parameters", "wikistats_error_malformed_date");
         return;
     }
     if (preg_match("/^([0-9]{4})([0-9]{1,2})/", $this->mToDate, $m)) {
         list(, $this->toYear, $this->toMonth) = $m;
     } else {
         $wgOut->showErrorPage("Bad parameters", "wikistats_error_malformed_date");
         return;
     }
     $domain = $all = "";
     if ($this->userIsSpecial) {
         $this->mLang = $wgRequest->getVal("wslang", "");
         $this->mHub = $wgRequest->getVal("wscat", "");
         $this->mNS = $wgRequest->getIntArray("wsns", "");
         $domain = $wgRequest->getVal("wswiki", "");
         $all = $wgRequest->getVal("wsall", 0);
         $this->mNamespaces = $wgLang->getNamespaces();
     }
     // Override some values if we're special and got a domain (or 'all')
     if ($domain == 'all' || $all == 1) {
         $this->mCityId = 0;
         $this->mCityDBName = WIKISTATS_CENTRAL_ID;
         $this->mCityDomain = 'all';
         $this->mAllWikis = 1;
     } elseif (!empty($domain) && $this->userIsSpecial == 1) {
         $this->mCityId = WikiFactory::DomainToId($domain);
         $this->mCityDBName = WikiFactory::IDToDB($this->mCityId);
         $this->mCityDomain = $domain;
     } else {
         $this->mCityDomain = WikiFactory::DBToDomain($this->mCityDBName);
     }
     $this->mStats = WikiStats::newFromId($this->mCityId);
     $this->mPredefinedNamespaces = $this->mStats->getPageNSList();
     $this->mStats->setStatsDate(array('fromMonth' => $this->fromMonth, 'fromYear' => $this->fromYear, 'toMonth' => $this->toMonth, 'toYear' => $this->toYear));
     $this->mStats->setHub($this->mHub);
     $this->mStats->setLang($this->mLang);
     #---
     $this->mSkin = RequestContext::getMain()->getSkin();
     if (is_object($this->mSkin)) {
         $skinname = get_class($this->mSkin);
         $skinname = strtolower(str_replace("Skin", "", $skinname));
         $this->mSkinName = $skinname;
     }
     $this->showForm();
     if ($this->mAction) {
         $func = 'show' . ucfirst(strtolower($this->mAction));
         if (method_exists($this, $func)) {
             $this->{$func}($subpage);
         }
     }
 }
 /**
  * Get interstitial data.  If format is json, returns data only.  Has template.
  * @requestParam integer wikiId
  * @responseParam array wikiAdminAvatars
  * @responseParam array wikiTopEditorAvatars
  * @responseParam array wikiStats
  * @responseParam array wikiInfo
  */
 public function getInterstitial()
 {
     $this->response->setCacheValidity(WikiaResponse::CACHE_SHORT);
     $wikiId = $this->request->getVal('wikiId', 0);
     $domain = $this->request->getVal('domain', null);
     if ($wikiId == 0 && $domain != null) {
         // This is not guaranteed valid for all domains, but the custom domains in use have aliases set up
         $domain = "{$domain}.wikia.com";
         $wikiId = WikiFactory::DomainToId($domain);
         if ($wikiId == 0) {
             throw new InvalidParameterApiException("domain");
         }
     }
     if ($wikiId == 0) {
         throw new MissingParameterApiException("wikiId or domain");
     }
     $this->wikiAdminAvatars = $this->helper->getWikiAdminAvatars($wikiId);
     $this->wikiTopEditorAvatars = $this->helper->getWikiTopEditorAvatars($wikiId);
     $tempArray = array();
     foreach ($this->helper->getWikiStats($wikiId) as $key => $value) {
         $tempArray[$key] = $this->wg->Lang->formatNum($value);
     }
     $this->wikiStats = $tempArray;
     $this->wikiInfo = $this->helper->getWikiInfoForVisualization($wikiId, $this->wg->contLang->getCode());
     $images = array();
     foreach ($this->wikiInfo['images'] as $image) {
         $images[] = $this->helper->getImageDataForSlider($wikiId, $image);
     }
     if (!empty($images[0])) {
         $this->wikiMainImageUrl = $images[0]['image_url'];
     } else {
         $this->wikiMainImageUrl = $this->wg->blankImgUrl;
     }
     if (!empty($this->app->wg->EnableWAMPageExt)) {
         $wamModel = new WAMPageModel();
         $this->wamUrl = $wamModel->getWAMMainPageUrl();
         $this->wikiWamScore = $this->helper->getWamScore($wikiId);
     }
     $this->imagesSlider = $this->sendRequest('WikiaMediaCarouselController', 'renderSlider', array('data' => $images));
     $wordmarkUrl = '';
     try {
         $title = GlobalTitle::newFromText('Wiki-wordmark.png', NS_FILE, $wikiId);
         if ($title !== null) {
             $file = new GlobalFile($title);
             if ($file !== null) {
                 $wordmarkUrl = $file->getUrl();
             }
         }
     } catch (Exception $e) {
     }
     $this->wordmark = $wordmarkUrl;
 }