/**
  * 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__);
 }
예제 #6
0
 /**
  * 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;
 }