public static function onArticleSaveComplete($article, $user, $revision, $status) { wfProfileIn(__METHOD__); $insertedImages = Wikia::getVar('imageInserts'); $imageDeletes = Wikia::getVar('imageDeletes'); $changedImages = $imageDeletes; foreach ($insertedImages as $img) { $changedImages[$img['il_to']] = true; } $sendTrackEvent = false; foreach ($changedImages as $imageDBName => $dummy) { $title = Title::newFromDBkey($imageDBName); if (!empty($title)) { $mq = new self($title); $mq->unsetCache(); $sendTrackEvent = true; } } // send track event if embed change if ($sendTrackEvent) { Track::event('embed_change'); } wfProfileOut(__METHOD__); return true; }
function execute() { $this->app->setSkinTemplateObj($this); $response = $this->app->sendRequest(Wikia::getVar('OasisEntryControllerName', 'Oasis'), 'index', null, false); $response->sendHeaders(); $response->render(); }
function doEdit($edit) { // create "fake" EditPage $editor = (object) array('textbox1' => isset($edit['text']) ? $edit['text'] : ''); // try to get section name MyHome::getSectionName($editor, '', !empty($edit['section']) ? $edit['section'] : false, $errno); // create "fake" RecentChange object $row = (object) array('rev_timestamp' => time(), 'rev_user' => 1, 'rev_user_text' => 'test', 'page_namespace' => NS_MAIN, 'page_title' => 'Test', 'rev_comment' => isset($edit['comment']) ? $edit['comment'] : '', 'rev_minor_edit' => true, 'page_is_new' => !empty($edit['is_new']), 'page_id' => 1, 'rev_id' => 1, 'rc_id' => 1, 'rc_patrolled' => 1, 'rc_old_len' => 1, 'rc_new_len' => 1, 'rc_deleted' => 1, 'rc_timestamp' => time()); $rc = RecentChange::newFromCurRow($row); // call MyHome to add its data to rc object and Wikia vars MyHome::storeInRecentChanges($rc); $data = Wikia::getVar('rc_data'); unset($data['articleComment']); return $data; }
/** * Hook: add premium video and clear cache (editor - source mode) * @param Article $article * @param User $user * @param $text * @param $summary * @param $minoredit * @param $watchthis * @param $sectionanchor * @param $flags * @param $revision * @param $status * @param $baseRevId * @return true */ public static function onArticleSaveComplete(&$article, &$user, $text, $summary, $minoredit, $watchthis, $sectionanchor, &$flags, $revision, &$status, $baseRevId) { if (!F::build('VideoInfoHelper', array(), 'videoInfoExists')) { return true; } $insertedImages = Wikia::getVar('imageInserts'); $affected = false; $userId = $user->getId(); foreach ($insertedImages as $img) { $videoInfoHelper = F::build('VideoInfoHelper'); $videoData = $videoInfoHelper->getVideoDataByTitle($img['il_to'], true); if (!empty($videoData)) { $videoInfo = F::build('VideoInfo', array($videoData)); $affected = $videoInfo->addPremiumVideo($userId); } } // clear cache if premium video is added if ($affected) { $mediaService = F::build('MediaQueryService'); $mediaService->clearCacheTotalVideos(); $mediaService->clearCacheTotalPremiumVideos(); } return true; }
/** * saveListingRelation -- hook for , * * @static * @access public * * * @return bool */ public static function watchBlogListing(&$article, &$user, $text, $summary, $minor, $undef1, $undef2, &$flags, $revision, &$status, $baseRevId) { if (!$status->value['new']) { return true; } wfProfileIn(__METHOD__); $dbw = wfGetDB(DB_SLAVE); if (defined('NS_BLOG_ARTICLE') && $article->getTitle()->getNamespace() == NS_BLOG_ARTICLE) { $cat = array_keys(Wikia::getVar('categoryInserts')); $catIn = array(); foreach ($cat as $value) { $title = Title::makeTitle(NS_CATEGORY, $value); $catIn[] = $dbw->addQuotes($title->getDBKey()); } $username = $user->getName(); $con = ''; if (count($catIn) > 0) { $con .= '(blr_relation in(' . implode(",", $catIn) . ') AND blr_type = "cat" ) OR '; } $con .= '(blr_relation = "' . $dbw->addQuotes($username) . '" AND blr_type = "user" ) '; $res = $dbw->select(array('blog_listing_relation'), array('blr_title'), $con, __METHOD__); $related = array(); while ($row = $dbw->fetchObject($res)) { //Bug fix // $exploded = explode(":", $row->blr_title); if (count($exploded) > 1) { $title = $exploded[1]; } else { $title = $row->blr_title; } $title = Title::makeTitle(NS_BLOG_LISTING, $title); $related[] = ucfirst($title->getDBKey()); } self::emailNotification($article->getTitle(), $related, NS_BLOG_LISTING, $user, "blogpost", wfMsg('follow-bloglisting-summary')); } wfProfileOut(__METHOD__); return true; }
private function processAllInTrack() { wfProfileIn(__METHOD__); global $wgContLang; if ($this->mTitle->isContentPage()) { // BADGE_EDIT if (empty($this->mCounters[BADGE_EDIT])) { $this->mCounters[BADGE_EDIT] = 0; } $this->mCounters[BADGE_EDIT]++; // EDIT+CATEGORY // get categories article already belongs to $articleCategories = array_change_key_case($this->mTitle->getParentCategories(), CASE_LOWER); // get categories to which article is added within this edit $insertedCategories = array_change_key_case(Wikia::getVar('categoryInserts'), CASE_LOWER); // get configuration of edit+categories $editPlusCategory = AchConfig::getInstance()->getInTrackEditPlusCategory(); $cat1 = strtolower($wgContLang->getNSText(NS_CATEGORY)); foreach ($editPlusCategory as $badge_type_id => $badge_config) { if ($badge_config['enabled']) { $cat2 = str_replace(' ', '_', strtolower($badge_config['category'])); if (isset($insertedCategories[$cat2]) || isset($articleCategories[$cat1 . ':' . $cat2])) { if (empty($this->mCounters[$badge_type_id])) { $this->mCounters[$badge_type_id] = 0; } $this->mCounters[$badge_type_id]++; } } } // BADGE_PICTURE $insertedImages = Wikia::getVar('imageInserts'); if (!empty($insertedImages) && is_array($insertedImages)) { if (empty($this->mCounters[BADGE_PICTURE])) { $this->mCounters[BADGE_PICTURE] = 0; } foreach ($insertedImages as $inserted_image) { if ($inserted_image['il_to'][0] != ':') { if (wfFindFile($inserted_image['il_to'])) { //check if the image has been used less than 10 times //(to avoid awarding after template based bulk insertion) //calls api.php?action=query&list=imageusage&iulimit=10&iutitle=File:File_mame.ext $imageUsageCount = 0; $imageUsageLimit = 10; $params = array('action' => 'query', 'list' => 'imageusage', 'iutitle' => "File:{$inserted_image['il_to']}", 'iulimit' => $imageUsageLimit); try { wfProfileIn(__METHOD__ . '::apiCall'); $api = new ApiMain(new FauxRequest($params)); $api->execute(); $res = $api->getResultData(); wfProfileOut(__METHOD__ . '::apiCall'); if (is_array($res['query']['imageusage'])) { $imageUsageCount = count($res['query']['imageusage']); } } catch (Exception $e) { } if ($imageUsageCount < $imageUsageLimit) { $this->mCounters[BADGE_PICTURE]++; } } } } } // BADGE_CATEGORY $insertedCategories = Wikia::getVar('categoryInserts'); if (!empty($insertedCategories) && is_array($insertedCategories)) { if (empty($this->mCounters[BADGE_CATEGORY])) { $this->mCounters[BADGE_CATEGORY] = 0; } $this->mCounters[BADGE_CATEGORY] += count($insertedCategories); } } // BADGE_BLOGPOST // is defined check if required because blogs are not enabled everywhere if (defined('NS_BLOG_ARTICLE') && $this->mTitle->getNamespace() == NS_BLOG_ARTICLE) { if ($this->mTitle->getBaseText() == $this->mUser->getName()) { if ($this->mStatus->value['new'] == true) { if (empty($this->mCounters[BADGE_BLOGPOST])) { $this->mCounters[BADGE_BLOGPOST] = 0; } $this->mCounters[BADGE_BLOGPOST]++; } } } // BADGE_BLOGCOMMENT // is defined check if required because blogs are not enabled everywhere if (defined('NS_BLOG_ARTICLE_TALK') && $this->mTitle->getNamespace() == NS_BLOG_ARTICLE_TALK) { // handle only article/comment creating (not editing) if ($this->mStatus->value['new'] == true) { $blogPostTitle = Title::newFromText($this->mTitle->getBaseText(), NS_BLOG_ARTICLE); if ($blogPostTitle) { $blogPostArticle = new Article($blogPostTitle); if (empty($this->mCounters[BADGE_BLOGCOMMENT]) || !in_array($blogPostArticle->getID(), $this->mCounters[BADGE_BLOGCOMMENT])) { if (empty($this->mCounters[BADGE_BLOGCOMMENT])) { $this->mCounters[BADGE_BLOGCOMMENT] = array(); } $this->mCounters[BADGE_BLOGCOMMENT][] = $blogPostArticle->getID(); } } } } // BADGE_LOVE if (empty($this->mCounters[BADGE_LOVE])) { $this->mCounters[BADGE_LOVE][COUNTERS_COUNTER] = 1; } else { if ($this->mCounters[BADGE_LOVE][COUNTERS_DATE] == date('Y-m-d')) { // ignore } else { if ($this->mCounters[BADGE_LOVE][COUNTERS_DATE] == date('Y-m-d', strtotime('-1 day'))) { $this->mCounters[BADGE_LOVE][COUNTERS_COUNTER]++; } else { $this->mCounters[BADGE_LOVE][COUNTERS_COUNTER] = 1; } } } $this->mCounters[BADGE_LOVE][COUNTERS_DATE] = date('Y-m-d'); wfProfileOut(__METHOD__); }
/** * Given an associative array of data to store, adds this to additional data and updates * the row in recentchanges corresponding to the provided RecentChange (or, if rc is not * provided, then the RecentChange that is stored in Wikia::getVar('rc') will be used); */ public static function storeAdditionalRcData($additionalData, &$rc = null) { wfProfileIn(__METHOD__); $rc_data = Wikia::getVar('rc_data'); $rc_data = $rc_data ? $rc_data : array(); // rc_data might not have been set $rc_data = array_merge($rc_data, $additionalData); // additionalData overwrites existing keys in rc_data if there are collisions. if (!is_object($rc)) { $rc = Wikia::getVar('rc'); } if ($rc instanceof RecentChange) { /* @var $rc RecentChange */ $rc_id = $rc->getAttribute('rc_id'); $rc_log_type = $rc->getAttribute('rc_log_type'); if (!in_array($rc_log_type, self::$additionalRcDataBlacklist)) { $dbw = wfGetDB(DB_MASTER); $dbw->update('recentchanges', array('rc_params' => MyHome::packData($rc_data)), array('rc_id' => $rc_id), __METHOD__); } } Wikia::setVar('rc_data', $rc_data); wfProfileOut(__METHOD__); }
/** * @desc Counts actions involve adding or editing articles * * @param Article $article */ function onArticleSaveComplete(&$article, &$user, $text, $summary, $minoredit, $watchthis, $sectionanchor, &$flags, $revision, &$status, $baseRevId) { // Quick exit if we are already done with Founder Progress Bar (memcache key set for 30 days) if (self::allTasksComplete()) { return true; } wfProfileIn(__METHOD__); $app = F::app(); $title = $article->getTitle(); if ($flags & EDIT_NEW) { // Tasks related to adding new pages X (do not count auto generated user pages or categories or files or ...) if ($title->getNamespace() == NS_MAIN) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_PAGE_ADD_10)); $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_PAGE_ADD_20)); if (self::bonusTaskEnabled(FT_BONUS_PAGE_ADD_5)) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_BONUS_PAGE_ADD_5)); } } // if blogpost if ($app->wg->EnableBlogArticles && $title->getNamespace() == NS_BLOG_ARTICLE) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_BLOGPOST_ADD)); } // if topten list if ($app->wg->EnableTopListsExt && $title->getNamespace() == NS_TOPLIST) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_TOPTENLIST_ADD)); } // edit profile page X if ($title->getNamespace() == NS_USER && $title->getText() == $app->wg->User->getName()) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_PROFILE_EDIT)); } } // Tasks related to updating existing pages if ($flags & EDIT_UPDATE) { // Tasks related to editing any article content X $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_TOTAL_EDIT_75)); $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_TOTAL_EDIT_300)); if (self::bonusTaskEnabled(FT_BONUS_EDIT_50)) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_BONUS_EDIT_50)); } // if main page if ($title->getArticleId() == Title::newMainPage()->getArticleId()) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_MAINPAGE_EDIT)); // Is there a better way to detect if there's a slider on the main page? if (stripos($text, "slider") > 0) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_MAINPAGE_ADDSLIDER)); } } // Add a page to a category: this var is set by the Parser $categoryInserts = Wikia::getVar('categoryInserts'); if (!empty($categoryInserts)) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_CATEGORY_ADD_3)); $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_CATEGORY_ADD_5)); } // edit category page X if ($title->getNamespace() == NS_CATEGORY) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_CATEGORY_EDIT)); } // edit TOP_NAV Wiki-navigation X if ($title->getNamespace() == NS_MEDIAWIKI && $title->getText() == "Wiki-navigation") { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_TOPNAV_EDIT)); } // if commcorner X if ($title->getNamespace() == NS_MEDIAWIKI && $title->getText() == "Community-corner") { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_COMMCORNER_EDIT)); } // edit profile page X if ($title->getNamespace() == NS_USER && $title->getText() == $app->wg->User->getName()) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_PROFILE_EDIT)); } // if page contains gallery tag if (stripos($text, "<gallery") !== false) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_GALLERY_ADD)); } // if page contains video tag if (stripos($text, "<video") !== false || stripos($text, "[[Video:") !== false) { $app->sendRequest('FounderProgressBar', 'doTask', array('task_id' => FT_VIDEO_ADD)); } } wfProfileOut(__METHOD__); return true; }