/** * Called from maintenance script only. Send Digest emails for any founders with that preference enabled * * @param array $events Events is empty for this type */ public function process(array $events) { global $wgTitle; wfProfileIn(__METHOD__); $founderEmailObj = FounderEmails::getInstance(); $wgTitle = Title::newMainPage(); // Get list of founders with digest mode turned on $cityList = $founderEmailObj->getFoundersWithPreference('founderemails-views-digest'); $wikiService = new WikiService(); // Gather daily page view stats for each wiki requesting views digest foreach ($cityList as $cityID) { $user_ids = $wikiService->getWikiAdminIds($cityID); $foundingWiki = WikiFactory::getWikiById($cityID); $page_url = GlobalTitle::newFromText('Createpage', NS_SPECIAL, $cityID)->getFullUrl(array('modal' => 'AddPage')); $emailParams = array('$WIKINAME' => $foundingWiki->city_title, '$WIKIURL' => $foundingWiki->city_url, '$PAGEURL' => $page_url, '$UNIQUEVIEWS' => $founderEmailObj->getPageViews($cityID)); foreach ($user_ids as $user_id) { $user = User::newFromId($user_id); // skip if not enable if (!$this->enabled($user, $cityID)) { continue; } self::addParamsUser($cityID, $user->getName(), $emailParams); $langCode = $user->getGlobalPreference('language'); $links = array('$WIKINAME' => $emailParams['$WIKIURL']); $mailSubject = strtr(wfMsgExt('founderemails-email-views-digest-subject', array('content')), $emailParams); $mailBody = strtr(wfMsgExt('founderemails-email-views-digest-body', array('content', 'parsemag'), $emailParams['$UNIQUEVIEWS']), $emailParams); $mailBodyHTML = F::app()->renderView('FounderEmails', 'GeneralUpdate', array_merge($emailParams, array('language' => 'en', 'type' => 'views-digest'))); $mailBodyHTML = strtr($mailBodyHTML, FounderEmails::addLink($emailParams, $links)); $mailCategory = FounderEmailsEvent::CATEGORY_VIEWS_DIGEST . (!empty($langCode) && $langCode == 'en' ? 'EN' : 'INT'); $founderEmailObj->notifyFounder($user, $this, $mailSubject, $mailBody, $mailBodyHTML, $cityID, $mailCategory); } } wfProfileOut(__METHOD__); }
public function enabled_wiki($wgCityId) { $wikiService = new WikiService(); $user_ids = $wikiService->getWikiAdminIds($wgCityId); foreach ($user_ids as $user_id) { $user = User::newFromId($user_id); if ($this->enabled($user, $wgCityId)) { return true; } } return false; }
/** * Get statistical information about the current wiki [DEPRECATED] * * @responseParam Integer $edits Number of edits on a wiki * @responseParam Integer $articles Number of real articles on a wiki * @responseParam Integer $pages Number of all pages on a wiki (eg. File pages, Articles, Category pages ...) * @responseParam Integer $users Stats Number of all users in a wiki * @responseParam Integer $activeUsers Number of active users on a wiki * @responseParam Integer $images Number of all images on a wiki * @responseParam Integer $videos Number of all videos on a wiki * @responseParam Integer $admins Number of all admins on a wiki * * @example */ function getData() { $this->response->setCacheValidity(self::CACHE_VALIDITY); $wikiService = new WikiService(); $siteStats = $wikiService->getSiteStats(); $siteStats['videos'] = $wikiService->getTotalVideos(); //views are empty anyway... unset($siteStats['views']); //lets return always integers for consistency foreach ($siteStats as &$stat) { $stat = (int) $stat; } $siteStats['admins'] = count($wikiService->getWikiAdminIds()); $this->response->setValues($siteStats); }
/** * @param array $events * * @return bool */ public function process(array $events) { // Make sure we have some events if (count($events) == 0) { return false; } // get just one event when we have more... for now, just randomly $event = $events[rand(0, count($events) - 1)]; $eventData = $event['data']; if ($this->isEditorThrottled($eventData)) { return true; } $wikiService = new WikiService(); $adminUserIds = $wikiService->getWikiAdminIds(); foreach ($adminUserIds as $adminId) { $this->processForUser($adminId, $eventData); } return true; }
/** * Called from maintenance script only. Send Digest emails for any founders with that preference enabled * @param array $events */ public function process(array $events) { global $wgTitle; wfProfileIn(__METHOD__); $wgTitle = Title::newMainPage(); $founderEmailObj = FounderEmails::getInstance(); // Get list of founders with digest mode turned on (defined in FounderEmailsEvent $cityList = $founderEmailObj->getFoundersWithPreference('founderemails-complete-digest'); $wikiService = new WikiService(); foreach ($cityList as $cityID) { $user_ids = $wikiService->getWikiAdminIds($cityID); $foundingWiki = WikiFactory::getWikiById($cityID); $page_url = GlobalTitle::newFromText('WikiActivity', NS_SPECIAL, $cityID)->getFullUrl(); $emailParams = array('$WIKINAME' => $foundingWiki->city_title, '$WIKIURL' => $foundingWiki->city_url, '$PAGEURL' => $page_url, '$UNIQUEVIEWS' => $founderEmailObj->getPageViews($cityID), '$USERJOINS' => $founderEmailObj->getNewUsers($cityID), '$USEREDITS' => $founderEmailObj->getDailyEdits($cityID)); foreach ($user_ids as $user_id) { $user = User::newFromId($user_id); // skip if not enable if (!$this->enabled($user, $cityID)) { continue; } self::addParamsUser($cityID, $user->getName(), $emailParams); // Only send email if there is some kind of activity to report if ($emailParams['$UNIQUEVIEWS'] == 0 && $emailParams['$USERJOINS'] == 0 && $emailParams['$USEREDITS'] == 0) { continue; } $langCode = $user->getGlobalPreference('language'); $links = array('$WIKINAME' => $emailParams['$WIKIURL']); $mailSubject = strtr(wfMsgExt('founderemails-email-complete-digest-subject', array('language' => $langCode)), $emailParams); $mailBody = strtr(wfMsgExt('founderemails-email-complete-digest-body', array('language' => $langCode, 'parsemag'), $emailParams['$UNIQUEVIEWS'], $emailParams['$USEREDITS'], $emailParams['$USERJOINS']), $emailParams); $mailBodyHTML = F::app()->renderView("FounderEmails", "GeneralUpdate", array_merge($emailParams, array('language' => $langCode, 'type' => 'complete-digest'))); $mailBodyHTML = strtr($mailBodyHTML, FounderEmails::addLink($emailParams, $links)); $mailCategory = FounderEmailsEvent::CATEGORY_COMPLETE_DIGEST . (!empty($langCode) && $langCode == 'en' ? 'EN' : 'INT'); // Send the e-mail $founderEmailObj->notifyFounder($user, $this, $mailSubject, $mailBody, $mailBodyHTML, $cityID, $mailCategory); } } wfProfileOut(__METHOD__); }
/** * Hook - clear cache for list of admin_ids * @param object $user * @param array $addgroup * @param array $removegroup * @return true */ public static function onUserRightsChange($user, $addgroup, $removegroup) { global $wgCityId, $wgMemc; wfProfileIn(__METHOD__); if (!empty($wgCityId)) { if ($addgroup && (in_array('sysop', $addgroup) || in_array('bureaucrat', $addgroup)) || $removegroup && (in_array('sysop', $removegroup) || in_array('bureaucrat', $removegroup))) { $wikiService = new WikiService(); /* @var $wikiService WikiService */ $memKey = $wikiService->getMemKeyAdminIds($wgCityId); $wgMemc->delete($memKey); $memKey = $wikiService->getMemKeyAdminIds($wgCityId, true); $wgMemc->delete($memKey); $wikiService->getWikiAdminIds($wgCityId, true); } } wfProfileOut(__METHOD__); return true; }
public function process(array $events) { global $wgExternalSharedDB, $wgEnableAnswers, $wgTitle, $wgContLang; wfProfileIn(__METHOD__); $wgTitle = Title::newMainPage(); $founderEmailObj = FounderEmails::getInstance(); $wikiService = new WikiService(); foreach ($events as $event) { $wikiId = $event['wikiId']; if ($wikiId == 0) { continue; } // should "never" happen BugId:12717 $activateTime = $event['data']['activateTime']; $activateDays = $event['data']['activateDays']; $user_ids = $wikiService->getWikiAdminIds($wikiId); if (time() >= $activateTime) { $emailParams = array('$WIKINAME' => $event['data']['wikiName'], '$WIKIURL' => $event['data']['wikiUrl'], '$WIKIMAINPAGEURL' => $event['data']['wikiMainpageUrl'], '$ADDAPAGEURL' => $event['data']['addapageUrl'], '$ADDAPHOTOURL' => $event['data']['addaphotoUrl'], '$CUSTOMIZETHEMEURL' => $event['data']['customizethemeUrl'], '$EDITMAINPAGEURL' => $event['data']['editmainpageUrl'], '$EXPLOREURL' => $event['data']['exploreUrl']); $wikiType = !empty($wgEnableAnswers) ? '-answers' : ''; foreach ($user_ids as $user_id) { $user = User::newFromId($user_id); // skip if not enable if (!$this->enabled($user, $wikiId)) { continue; } self::addParamsUser($wikiId, $user->getName(), $emailParams); $emailParams['$USERPAGEEDITURL'] = $user->getUserPage()->getFullUrl(array('action' => 'edit')); $langCode = $user->getGlobalPreference('language'); // force loading messages for given languege, to make maintenance script works properly $wgContLang = Language::factory($langCode); $mailSubject = strtr(wfMsgExt('founderemails' . $wikiType . '-email-' . $activateDays . '-days-passed-subject', array('content')), $emailParams); $mailBody = strtr(wfMsgForContent('founderemails' . $wikiType . '-email-' . $activateDays . '-days-passed-body'), $emailParams); $mailCategory = FounderEmailsEvent::CATEGORY_DEFAULT; if ($activateDays == 3) { $mailCategory = FounderEmailsEvent::CATEGORY_3_DAY; } else { if ($activateDays == 10) { $mailCategory = FounderEmailsEvent::CATEGORY_10_DAY; } else { if ($activateDays == 0) { $mailCategory = FounderEmailsEvent::CATEGORY_0_DAY; } } } $mailCategory .= !empty($langCode) && $langCode == 'en' ? 'EN' : 'INT'; if (empty($wgEnableAnswers)) { $links = array('$WIKINAME' => $emailParams['$WIKIURL']); $emailParams_new = FounderEmails::addLink($emailParams, $links); $emailParams_new['$HDWIKINAME'] = str_replace('#2C85D5', '#fa5c1f', $emailParams_new['$WIKINAME']); // header color = #fa5c1f $mailBodyHTML = F::app()->renderView('FounderEmails', $event['data']['dayName'], array('language' => 'en')); $mailBodyHTML = strtr($mailBodyHTML, $emailParams_new); } else { $mailBodyHTML = $this->getLocalizedMsg('founderemails' . $wikiType . '-email-' . $activateDays . '-days-passed-body-HTML', $emailParams); } $founderEmailObj->notifyFounder($user, $this, $mailSubject, $mailBody, $mailBodyHTML, $wikiId, $mailCategory); } $dbw = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB); $dbw->delete('founder_emails_event', array('feev_id' => $event['id'])); } } // always return false to prevent deleting from FounderEmails::processEvent wfProfileOut(__METHOD__); return false; }