public function prepareData() { global $wgTitle, $wgUser, $wgCont; $pars = array(); $pars['slider'] = array(); $lang = AutoHubsPagesHelper::getLangForHub($wgTitle); $data = AutoHubsPagesData::newFromTagTitle($wgTitle); $tagname = AutoHubsPagesHelper::getHubNameFromTitle($wgTitle); $vars = AutoHubsPagesHelper::getHubsFeedsVariable($tagname); $isManager = $wgUser->isAllowed('corporatepagemanager'); $datafeeds = new WikiaStatsAutoHubsConsumerDB(DB_SLAVE); $tag_id = AutoHubsPagesHelper::getHubIdFromTitle($wgTitle); $tag_name = AutoHubsPagesHelper::getHubNameFromTitle($wgTitle); $pars['tagname'] = $tag_name; $pars['title'] = $wgTitle; $pars['var_feeds'] = $vars[$tag_name]; $pars['is_manager'] = $isManager; $pars['tag_id'] = $tag_id; if ($isManager) { $temp = $datafeeds->getTopWikis($tag_id, $lang, 30, true, true); $pars['topWikis1'] = $temp['value']; } else { $temp = $datafeeds->getTopWikis($tag_id, $lang, 10, false); $pars['topWikis1'] = $temp['value']; } $temp = $datafeeds->getTopUsers($tag_id, $lang, 5); $pars['topEditors'] = $temp['value']; if ($isManager) { $temp = $datafeeds->getTopBlogs($tag_id, $lang, 9, 3, true, true); } else { $temp = $datafeeds->getTopBlogs($tag_id, $lang, 3, 1); } $pars['topBlogs'] = $temp['value']; if ($isManager) { $temp = $datafeeds->getTopArticles($tag_id, $lang, 15, 3, true, true, true); } else { $temp = $datafeeds->getTopArticles($tag_id, $lang, 5, 1, false, false, true); } $pars['hotSpots'] = $temp['value']; $pars['slider'] = CorporatePageHelper::parseMsgImg('hub-' . $tag_name . '-slider', true); $pars['wikia_whats_up'] = wfMsgExt("corporatepage-wikia-whats-up", array("parsemag")); return $pars; }
static function hideFeed() { global $wgUser, $wgRequest, $wgLang; $response = new AjaxResponse(); $result = array(); if (!$wgUser->isAllowed('corporatepagemanager')) { $result['response'] = 'error'; $response->addText(json_encode($result)); return $response; } $tag_id = (int) $wgRequest->getVal('tag_id', 0); $city_id = (int) $wgRequest->getVal('city_id', 0); $page_id = (int) $wgRequest->getVal('page_id', 0); $dir = $wgRequest->getVal('dir', 'add'); $ws = new WikiaStatsAutoHubsConsumerDB(DB_MASTER); $result = array(); if ($dir == 'add') { if ($wgRequest->getVal('type') == 'article') { if ($ws->addExludeArticle($tag_id, $city_id, $page_id, $wgLang->getCode())) { $result['response'] = 'ok'; } } if ($wgRequest->getVal('type') == 'blog') { if ($ws->addExludeBlog($tag_id, $city_id, $page_id, $wgLang->getCode())) { $result['response'] = 'ok'; } } if ($wgRequest->getVal('type') == 'city') { if ($ws->addExludeWiki($tag_id, $city_id, $wgLang->getCode())) { $result['response'] = 'ok'; } } } else { $result['response'] = 'ok'; if ($wgRequest->getVal('type') == 'article') { $ws->removeExludeArticle($tag_id, $city_id, $page_id, $wgLang->getCode()); } if ($wgRequest->getVal('type') == 'blog') { $ws->removeExludeBlog($tag_id, $city_id, $page_id, $wgLang->getCode()); } if ($wgRequest->getVal('type') == 'city') { $ws->removeExludeWiki($tag_id, $city_id, $wgLang->getCode()); } } $result['response'] = 'ishide'; $response->addText(json_encode($result)); return $response; }
/** * connect to statsdb and processing events table */ public function receiveFromEvents() { global $wgStatsDB, $wgCityId, $wgMemc, $wgStatsDBEnabled, $wgSharedDB, $wgIP; wfProfileIn(__METHOD__); if (empty($wgStatsDBEnabled)) { wfProfileOut(__METHOD__); return false; } try { while (1) { $dbr = wfGetDB(DB_SLAVE, array(), $wgStatsDB); $where = array(" rev_timestamp >= '" . $this->mDate . "' ", " (event_type = 2 or event_type = 1 ) "); if (!empty($wgStatsIgnoreWikis)) { $where[] = 'wiki_id not in (' . $dbr->makeList($wgStatsIgnoreWikis) . ')'; } $oRes = $dbr->select(array('events'), array('wiki_id, page_id, page_ns, user_id, rev_timestamp, user_is_bot'), $where, __METHOD__); $result = array(); $loop = 0; while ($oRow = $dbr->fetchObject($oRes)) { if ($oRow->rev_timestamp > $this->mDate) { $this->mDate = $oRow->rev_timestamp; } $result[$oRow->wiki_id][$oRow->page_id] = $oRow; $loop++; } $dbr->freeResult($oRes); Wikia::log(__METHOD__, 'events', 'Read ' . $loop . ' events (for ' . count($result) . ' Wikis) successfully. Next timestamp: ' . $this->mDate); $records = count($result); if (!empty($result)) { $producerDB = new WikiaStatsAutoHubsConsumerDB(DB_MASTER); $data = array('blogs' => array(), 'articles' => array(), 'user' => array(), 'tags' => array()); $loop = 0; foreach ($result as $city_id => $rows) { $start = time(); $loop++; Wikia::log(__METHOD__, 'events', 'Wikia ' . $city_id . ' (' . $loop . '/' . $records . ') processing: ' . count($rows) . ' rows'); $memkey = sprintf("%s:wikia:%d", __METHOD__, $city_id); $info = $wgMemc->get($memkey); if (empty($info)) { # wikia $oWikia = WikiFactory::getWikiByID($city_id); if (!is_object($oWikia)) { Wikia::log(__METHOD__, "Wikia not found: " . $city_id); continue; } # server $server = WikiFactory::getVarValueByName("wgServer", $city_id); $info = array('lang' => $oWikia->city_lang, 'db' => $oWikia->city_dbname, 'sitename' => $oWikia->city_title, 'server' => $server); $wgMemc->set($memkey, $info, 60 * 60 * 2); } if (!isset($info['db']) && !isset($info['sitename']) && !isset($info['lang']) && !isset($info['server'])) { Wikia::log(__METHOD__, "Wikia not found: " . $city_id); continue; } # initial table $lang = $info['lang']; if (!isset($data['blogs'][$lang])) { $data['blogs'][$lang] = array(); } if (!isset($data['articles'][$lang])) { $data['articles'][$lang] = array(); } if (!isset($data['user'][$lang])) { $data['user'][$lang] = array(); } # tags $oWFTags = new WikiFactoryTags($city_id); $tags = $oWFTags->getTags(); foreach ($rows as $oRow) { if (is_object($oRow)) { $oUser = User::newFromId($oRow->user_id); if (!is_object($oUser)) { continue; } if (NS_BLOG_ARTICLE == $oRow->page_ns) { if (!empty($tags)) { foreach ($tags as $id => $val) { if (!isset($data['blogs'][$lang][$id])) { $data['blogs'][$lang][$id] = array(); } # prepare insert data $data['blogs'][$lang][$id][] = array('tb_city_id' => $city_id, 'tb_page_id' => $oRow->page_id, 'tb_tag_id' => $id, 'tb_date' => date("Y-m-d"), 'tb_city_lang' => $lang, 'tb_count' => 1); } } } else { $memkey = sprintf("%s:%s:user:%d", __METHOD__, $wgSharedDB, $oRow->user_id); $user = $wgMemc->get($memkey); if (empty($user)) { $groups = $oUser->getGroups(); $user_groups = implode(";", $groups); $user = array('name' => $oUser->getName(), 'groups' => $user_groups); $wgMemc->set($memkey, $user, 60 * 60 * 2); } if (!isset($user['name'])) { continue; } if ($user['name'] == $wgIP || User::isIP($user['name'])) { continue; } if (!empty($tags)) { foreach ($tags as $id => $val) { $date = date("Y-m-d"); $mcKey = wfSharedMemcKey("auto_hubs", "unique_control", $city_id, $oRow->page_id, $oRow->user_id, $id, $date); $out = $wgMemc->get($mcKey, null); if ($out == 1) { continue; } $wgMemc->set($mcKey, 1, 24 * 60 * 60); $allowed = $oRow->user_is_bot != 'Y' && !in_array($oUser->getName(), $producerDB->getBanedUsers()); if (!isset($data['user'][$lang][$id]) && $allowed) { $data['user'][$lang][$id] = array(); } if (!isset($data['articles'][$lang][$id])) { $data['articles'][$lang][$id] = array(); } # # prepare insert data $data['articles'][$lang][$id][] = array('ta_city_id' => $city_id, 'ta_page_id' => $oRow->page_id, 'ta_tag_id' => $id, 'ta_date' => $date, 'ta_city_lang' => $lang, 'ta_count' => 1); if ($allowed) { $data['user'][$lang][$id][] = array('tu_user_id' => $oRow->user_id, 'tu_tag_id' => $id, 'tu_date' => $date, 'tu_groups' => $user['groups'], 'tu_username' => addslashes($user['name']), 'tu_city_lang' => $lang, 'tu_count' => 1); } } } } } } $end = time(); $time = Wikia::timeDuration($end - $start); Wikia::log(__METHOD__, 'events', 'Wikia ' . $city_id . ' processed in: ' . $time); } // insert data to database # blogs $start = time(); Wikia::log(__METHOD__, 'events', 'Insert ' . count($data['blogs']) . ' blogs'); $producerDB->insertBlogComment($data['blogs']); $end = time(); $time = Wikia::timeDuration($end - $start); Wikia::log(__METHOD__, 'events', 'Inserts done in: ' . $time); # articles $start = time(); Wikia::log(__METHOD__, 'events', 'Insert ' . count($data['articles']) . ' articles'); $producerDB->insertArticleEdit($data['articles']); $end = time(); $time = Wikia::timeDuration($end - $start); Wikia::log(__METHOD__, 'events', 'Inserts done in: ' . $time); $start = time(); Wikia::log(__METHOD__, 'events', 'Insert ' . count($data['user']) . ' users'); $producerDB->insertUserEdit($data['user']); $end = time(); $time = Wikia::timeDuration($end - $start); Wikia::log(__METHOD__, 'events', 'Inserts done in: ' . $time); // unset data unset($data); } else { Wikia::log(__METHOD__, "No data found in events table. Last timestamp: " . $this->mDate); } Wikia::log(__METHOD__, "Wait " . self::sleepTime . " sec. "); sleep(self::sleepTime); } } catch (MWException $e) { $mesg = $e->getMessage(); $class = get_class($e); Wikia::log(__METHOD__, 'events', $mesg); die('Cannot proceed events data. Message was: ' . $mesg . '. Class was:' . $class); } wfProfileOut(__METHOD__); }
/** * @author Jakub Kurcek * @param hubId integer * @param forceRefresh boolean - if true clears the cache and creates new one. * * Returns data for feed creation. If no cache - creates one. */ private function PrepareHotContentFeed($hubId, $forceRefresh = false) { global $wgMemc, $wgHTTPTimeout; // local settings $lang = "en"; $thumbSize = 288; $thumbHeight = 124; $resultsNumber = 10; $stopCache = false; // switch to false after tests if ($forceRefresh) { $this->clearCache($hubId); } $memcFeedArray = $this->getFromCache($hubId); if ($memcFeedArray == null || !empty($stopCache)) { $datafeeds = new WikiaStatsAutoHubsConsumerDB(DB_SLAVE); $out = $datafeeds->getTopArticles($hubId, $lang, $resultsNumber); $feedArray = array(); foreach ($out['value'] as $key => $val) { $httpResultArr = $this->getDataFromApi($val['wikiurl'] . '/api.php?action=imagecrop&imgId=' . $val['page_id'] . '&imgSize=' . (int) $thumbSize . '&imgHeight=' . (int) $thumbHeight . '&format=json'); $feedArray[] = array('title' => $val['page_name'], 'description' => $val['all_count'], 'url' => $val['page_url'], 'date' => time(), 'author' => 'Wikia', 'otherTags' => array('image' => $httpResultArr, 'fromwikia' => $val['wikiname'])); } $this->saveToCache($hubId, $feedArray); } else { $feedArray = $memcFeedArray; } return $feedArray; }
public function executeHotSpots() { global $wgUser, $wgTitle; $isManager = $wgUser->isAllowed('corporatepagemanager'); $datafeeds = new WikiaStatsAutoHubsConsumerDB(DB_SLAVE); $lang = AutoHubsPagesHelper::getLangForHub($wgTitle); $tag_id = AutoHubsPagesHelper::getHubIdFromTitle($wgTitle); $tag_name = AutoHubsPagesHelper::getHubNameFromTitle($wgTitle); if ($isManager) { $temp = $datafeeds->getTopArticles($tag_id, $lang, 15, 3, true, true, true); } else { $temp = $datafeeds->getTopArticles($tag_id, $lang, 5, 1, false, false, true); } $this->hidehotspots = false; $this->title = $wgTitle; $this->hotSpots = $temp['value']; $this->tag_id = $tag_id; $this->is_manager = $isManager; }