/**
  * 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 process(array $events)
 {
     global $wgEnableAnswers, $wgCityId;
     wfProfileIn(__METHOD__);
     if ($this->isThresholdMet(count($events))) {
         // get just one event when we have more... for now, just randomly
         $eventData = $events[rand(0, count($events) - 1)];
         $founderEmailObj = FounderEmails::getInstance();
         $wikiService = F::build('WikiService');
         $user_ids = $wikiService->getWikiAdminIds();
         $foundingWiki = WikiFactory::getWikiById($wgCityId);
         $emailParams = array('$EDITORNAME' => $eventData['data']['userName'], '$EDITORPAGEURL' => $eventData['data']['userPageUrl'], '$EDITORTALKPAGEURL' => $eventData['data']['userTalkPageUrl'], '$WIKINAME' => $foundingWiki->city_title, '$WIKIURL' => $foundingWiki->city_url);
         $wikiType = !empty($wgEnableAnswers) ? '-answers' : '';
         foreach ($user_ids as $user_id) {
             $user = User::newFromId($user_id);
             // skip if not enable
             if (!$this->enabled($wgCityId, $user)) {
                 continue;
             }
             self::addParamsUser($wgCityId, $user->getName(), $emailParams);
             $langCode = $user->getOption('language');
             $mailSubject = strtr(wfMsgExt('founderemails' . $wikiType . '-email-user-registered-subject', array('content')), $emailParams);
             $mailBody = strtr(wfMsgExt('founderemails' . $wikiType . '-email-user-registered-body', array('content')), $emailParams);
             if (empty($wgEnableAnswers)) {
                 // FounderEmailv2.1
                 $links = array('$EDITORNAME' => $emailParams['$EDITORPAGEURL'], '$WIKINAME' => $emailParams['$WIKIURL']);
                 $mailBodyHTML = F::app()->renderView("FounderEmails", "GeneralUpdate", array_merge($emailParams, array('language' => 'en', 'type' => 'user-registered')));
                 $mailBodyHTML = strtr($mailBodyHTML, FounderEmails::addLink($emailParams, $links));
             } else {
                 $mailBodyHTML = $this->getLocalizedMsg('founderemails' . $wikiType . '-email-user-registered-body-HTML', $emailParams);
             }
             $mailCategory = FounderEmailsEvent::CATEGORY_REGISTERED . (!empty($langCode) && $langCode == 'en' ? 'EN' : 'INT');
             wfProfileOut(__METHOD__);
             $founderEmailObj->notifyFounder($user, $this, $mailSubject, $mailBody, $mailBodyHTML, $wgCityId, $mailCategory);
         }
         return true;
     }
     wfProfileOut(__METHOD__);
     return false;
 }
 /**
  * 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 = F::build('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($cityID, $user)) {
                 continue;
             }
             self::addParamsUser($cityID, $user->getName(), $emailParams);
             $langCode = $user->getOption('language');
             // Only send digest emails for English users until translation is done
             if ($langCode == 'en') {
                 $links = array('$WIKINAME' => $emailParams['$WIKIURL']);
                 $mailSubject = strtr(wfMsgExt('founderemails-email-complete-digest-subject', array('content')), $emailParams);
                 $mailBody = strtr(wfMsgExt('founderemails-email-complete-digest-body', array('content', 'parsemag'), $emailParams['$UNIQUEVIEWS'], $emailParams['$USEREDITS'], $emailParams['$USERJOINS']), $emailParams);
                 $mailBodyHTML = F::app()->renderView("FounderEmails", "GeneralUpdate", array_merge($emailParams, array('language' => 'en', 'type' => 'complete-digest')));
                 $mailBodyHTML = strtr($mailBodyHTML, FounderEmails::addLink($emailParams, $links));
                 $mailCategory = FounderEmailsEvent::CATEGORY_COMPLETE_DIGEST . (!empty($langCode) && $langCode == 'en' ? 'EN' : 'INT');
                 // Only send email if there is some kind of activity to report
                 if ($emailParams['$UNIQUEVIEWS'] > 0 || $emailParams['$USERJOINS'] > 0 || $emailParams['$USEREDITS'] > 0) {
                     $founderEmailObj->notifyFounder($user, $this, $mailSubject, $mailBody, $mailBodyHTML, $cityID, $mailCategory);
                 }
             }
         }
     }
     wfProfileOut(__METHOD__);
 }
 public function process(array $events)
 {
     global $wgExternalSharedDB, $wgEnableAnswers, $wgTitle, $wgContLang;
     wfProfileIn(__METHOD__);
     $wgTitle = Title::newMainPage();
     $founderEmailObj = FounderEmails::getInstance();
     $wikiService = F::build('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($wikiId, $user)) {
                     continue;
                 }
                 self::addParamsUser($wikiId, $user->getName(), $emailParams);
                 $emailParams['$USERPAGEEDITURL'] = $user->getUserPage()->getFullUrl(array('action' => 'edit'));
                 $langCode = $user->getOption('language');
                 // force loading messages for given languege, to make maintenance script works properly
                 $wgContLang = wfGetLangObj($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;
 }
Example #5
0
     case 'DayTen':
         $msg_key_subj = 'founderemails' . $wikiType . '-email-10-days-passed-subject';
         $msg_key_body = 'founderemails' . $wikiType . '-email-10-days-passed-body';
         $msg_key_body_html = 'founderemails' . $wikiType . '-email-10-days-passed-body-HTML';
         $html_template = 'DayTen';
         break;
 }
 $mailBody = $mailBodyHTML = '';
 // send email
 $subject = "Founder Email Test for {$params['type']} ({$params['language']}/{$content_type}): ";
 $subject .= strtr(wfMsgExt($msg_key_subj, array('content')), $emailParams);
 if ($content_type == 'html') {
     if ($params['language'] == 'en' && empty($wgEnableAnswers) || empty($msg_key_body_html)) {
         // FounderEmailv2.1
         $links = array('$WIKINAME' => $emailParams['$WIKIURL'], '$EDITORNAME' => $emailParams['$EDITORURL'], '$PAGETITLE' => $emailParams['$PAGEURL']);
         $emailParams_new = FounderEmails::addLink($emailParams, $links);
         $emailParams_new['$HDWIKINAME'] = str_replace('#2C85D5', '#fa5c1f', $emailParams_new['$WIKINAME']);
         // header color = #fa5c1f
         $mailBodyHTML = F::app()->renderView("FounderEmails", $html_template, array_merge($emailParams_new, $params));
         $mailBodyHTML = strtr($mailBodyHTML, $emailParams_new);
     } else {
         // old emails
         $mailBodyHTML = strtr(wfMsgExt($msg_key_body_html, array('content', 'parseinline')), $emailParams);
     }
 } else {
     if ($params['type'] == 'views-digest') {
         $mailBody = strtr(wfMsgExt($msg_key_body, array('content', 'parsemag'), $emailParams['$UNIQUEVIEWS']), $emailParams);
     } else {
         if ($params['type'] == 'complete-digest') {
             $mailBody = strtr(wfMsgExt($msg_key_body, array('content', 'parsemag'), $emailParams['$UNIQUEVIEWS'], $emailParams['$USEREDITS'], $emailParams['$USERJOINS']), $emailParams);
         } else {
 public function process(array $events)
 {
     global $wgCityId, $wgEnableAnswers, $wgMemc;
     wfProfileIn(__METHOD__);
     if ($this->isThresholdMet(count($events))) {
         // get just one event when we have more... for now, just randomly
         $eventData = $events[rand(0, count($events) - 1)];
         // quit if this particular user has generated an edit email in the last hour
         $memcKey = wfMemcKey("FounderEmail", "EditEvent", $eventData['data']['editorName']);
         if ($wgMemc->get($memcKey) == "1") {
             return true;
         }
         $foundingWiki = WikiFactory::getWikiById($wgCityId);
         $founderEmailObj = FounderEmails::getInstance();
         $wikiService = F::build('WikiService');
         $user_ids = $wikiService->getWikiAdminIds();
         $emailParams = array('$EDITORNAME' => $eventData['data']['editorName'], '$EDITORPAGEURL' => $eventData['data']['editorPageUrl'], '$EDITORTALKPAGEURL' => $eventData['data']['editorTalkPageUrl'], '$MYHOMEURL' => $eventData['data']['myHomeUrl'], '$WIKINAME' => $foundingWiki->city_title, '$PAGETITLE' => $eventData['data']['titleText'], '$PAGEURL' => $eventData['data']['titleUrl'], '$WIKIURL' => $foundingWiki->city_url);
         $msgKeys = array();
         $today = date('Y-m-d');
         $wikiType = !empty($wgEnableAnswers) ? '-answers' : '';
         foreach ($user_ids as $user_id) {
             $user = User::newFromId($user_id);
             // skip if not enable
             if (!$this->enabled($wgCityId, $user)) {
                 continue;
             }
             // skip if reciever is the editor
             if ($user->getName() == $eventData['data']['editorName']) {
                 continue;
             }
             // BugID: 1961 Quit if the founder email is not confirmed
             if (!$user->isEmailConfirmed()) {
                 return true;
             }
             $aAllCounter = unserialize($user->getOption('founderemails-counter'));
             if (empty($aAllCounter)) {
                 $aAllCounter = array();
             }
             // quit if the Founder has recieved enough emails today
             $aWikiCounter = empty($aAllCounter[$wgCityId]) ? array() : $aAllCounter[$wgCityId];
             if (!empty($aWikiCounter[0]) && $aWikiCounter[0] == $today && $aWikiCounter[1] === 'full') {
                 return true;
             }
             // initialize or reset counter for today
             if (empty($aWikiCounter[0]) || $aWikiCounter[0] !== $today) {
                 $aWikiCounter[0] = $today;
                 $aWikiCounter[1] = 0;
             }
             self::addParamsUser($wgCityId, $user->getName(), $emailParams);
             $mailCategory = FounderEmailsEvent::CATEGORY_DEFAULT;
             // @FIXME magic number, move to config
             if ($aWikiCounter[1] === 15) {
                 $msgKeys['subject'] = 'founderemails-lot-happening-subject';
                 $msgKeys['body'] = 'founderemails-lot-happening-body';
                 $msgKeys['body-html'] = 'founderemails-lot-happening-body-HTML';
                 $mailCategory = FounderEmailsEvent::CATEGORY_EDIT_HIGH_ACTIVITY;
                 $mailKey = 'lot-happening';
             } elseif ($eventData['data']['registeredUserFirstEdit']) {
                 $msgKeys['subject'] = 'founderemails' . $wikiType . '-email-page-edited-reg-user-first-edit-subject';
                 $msgKeys['body'] = 'founderemails' . $wikiType . '-email-page-edited-reg-user-first-edit-body';
                 $msgKeys['body-html'] = 'founderemails' . $wikiType . '-email-page-edited-reg-user-first-edit-body-HTML';
                 $mailCategory = FounderEmailsEvent::CATEGORY_FIRST_EDIT_USER;
                 $mailKey = 'first-edit';
             } elseif ($eventData['data']['registeredUser']) {
                 $msgKeys['subject'] = 'founderemails' . $wikiType . '-email-page-edited-reg-user-subject';
                 $msgKeys['body'] = 'founderemails' . $wikiType . '-email-page-edited-reg-user-body';
                 $msgKeys['body-html'] = 'founderemails' . $wikiType . '-email-page-edited-reg-user-body-HTML';
                 $mailCategory = FounderEmailsEvent::CATEGORY_EDIT_USER;
                 $mailKey = 'general-edit';
             } else {
                 $msgKeys['subject'] = 'founderemails' . $wikiType . '-email-page-edited-anon-subject';
                 $msgKeys['body'] = 'founderemails' . $wikiType . '-email-page-edited-anon-body';
                 $msgKeys['body-html'] = 'founderemails' . $wikiType . '-email-page-edited-anon-body-HTML';
                 $mailCategory = FounderEmailsEvent::CATEGORY_EDIT_ANON;
                 $mailKey = 'anon-edit';
             }
             // Set flag so this user won't generate edit notifications for 1 hour
             $wgMemc->set($memcKey, "1", 3600);
             // Increment counter for daily notification limit
             $aWikiCounter[1] = $aWikiCounter[1] === 15 ? 'full' : $aWikiCounter[1] + 1;
             $aAllCounter[$wgCityId] = $aWikiCounter;
             $user->setOption('founderemails-counter', serialize($aAllCounter));
             $user->saveSettings();
             $langCode = $user->getOption('language');
             $mailCategory .= !empty($langCode) && $langCode == 'en' ? 'EN' : 'INT';
             $mailSubject = strtr(wfMsgExt($msgKeys['subject'], array('content')), $emailParams);
             $mailBody = strtr(wfMsgExt($msgKeys['body'], array('content')), $emailParams);
             if (empty($wgEnableAnswers)) {
                 // FounderEmailv2.1
                 $links = array('$EDITORNAME' => $emailParams['$EDITORPAGEURL'], '$PAGETITLE' => $emailParams['$PAGEURL'], '$WIKINAME' => $emailParams['$WIKIURL']);
                 $mailBodyHTML = F::app()->renderView("FounderEmails", "GeneralUpdate", array_merge($emailParams, array('language' => 'en', 'type' => $mailKey)));
                 $mailBodyHTML = strtr($mailBodyHTML, FounderEmails::addLink($emailParams, $links));
             } else {
                 // old emails
                 $mailBodyHTML = $this->getLocalizedMsg($msgKeys['body-html'], $emailParams);
             }
             wfProfileOut(__METHOD__);
             $founderEmailObj->notifyFounder($user, $this, $mailSubject, $mailBody, $mailBodyHTML, $wgCityId, $mailCategory);
         }
         return true;
     }
     wfProfileOut(__METHOD__);
     return false;
 }