/** * 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; }