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__);
 }
示例#4
0
 /**
  * @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;
 }