/** * 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; }
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; }