/**
  * @param RecentChange|null $oRecentChange This is allowed to be null to stay compatible
  *                                         with FounderEmailsEvent::register()
  *
  * @return bool
  *
  * @throws Exception
  */
 public static function register($oRecentChange = null)
 {
     $currentUser = F::app()->wg->User;
     if (is_null($oRecentChange)) {
         throw new \Exception('Invalid $oRecentChange value.');
     }
     if (FounderEmails::getInstance()->getLastEventType() == 'register') {
         // special case: creating user page after user registration, ignore event
         return true;
     }
     $isRegisteredUser = false;
     $isRegisteredUserFirstEdit = false;
     if ($oRecentChange->getAttribute('rc_user')) {
         $editorId = $oRecentChange->getAttribute('rc_user');
         $editor = $currentUser->getId() == $editorId ? $currentUser : User::newFromID($editorId);
         $isRegisteredUser = true;
         // if first edit email was already sent this is an additional edit
         $wasNotificationSent = static::getFirstEmailSentFlag($editor->getName()) === '1';
         if (!$wasNotificationSent) {
             $userEditStatus = static::getUserEditsStatus($editor, true);
             /*
             					If there is at least one edit, flag that we should not send this email anymore;
             					either first email is sent out as a result of this request,
             					or there was more than 1 edit so we will never need to send it again
             */
             switch ($userEditStatus) {
                 case self::NO_EDITS:
                     return true;
                     break;
                 case self::FIRST_EDIT:
                     $isRegisteredUserFirstEdit = true;
                     static::setFirstEmailSentFlag($editor->getName());
                     break;
                 case self::MULTIPLE_EDITS:
                     static::setFirstEmailSentFlag($editor->getName());
             }
         }
     } else {
         // Anon user
         $editorName = $oRecentChange->getAttribute('rc_user_text');
         $editor = $currentUser->getName() == $editorName ? $currentUser : User::newFromName($editorName, false);
     }
     $config = FounderEmailsEvent::getConfig('edit');
     if (in_array('staff', $editor->getGroups()) || in_array($editor->getId(), $config['skipUsers'])) {
         // page edited by founder, staff member or excluded user, skipping..
         return true;
     }
     if ($editor->isAllowed('bot')) {
         // skip bots
         return true;
     }
     $eventData = static::getEventData($editor, $oRecentChange, $isRegisteredUser, $isRegisteredUserFirstEdit);
     FounderEmails::getInstance()->registerEvent(new FounderEmailsEditEvent($eventData));
     return true;
 }
Exemplo n.º 2
0
 public static function onGetPreferences($user, &$defaultPreferences)
 {
     global $wgUser, $wgCityId, $wgSitename, $wgEnableUserPreferencesV2Ext;
     wfProfileIn(__METHOD__);
     $wikiService = new WikiService();
     if (!FounderEmailsEvent::isAnswersWiki() && in_array($wgUser->getId(), $wikiService->getWikiAdminIds())) {
         if (empty($wgEnableUserPreferencesV2Ext)) {
             $section = 'personal/wikiemail';
             $prefVersion = '';
         } else {
             $section = 'emailv2/wikiemail';
             $prefVersion = '-v2';
         }
         // If we are in digest mode, grey out the individual email options
         $disableEmailPrefs = $wgUser->getLocalPreference('founderemails-complete-digest', $wgCityId);
         /*  This is the old preference, no longer used
         			 *  TODO: Write conversion script from old to new
         			$defaultPreferences['founderemailsenabled'] = array(
         				'type' => 'toggle',
         				'label-message' => 'tog-founderemailsenabled',
         				'section' => 'personal/email',
         			);
         			 */
         $defaultPreferences["adoptionmails-label-{$wgCityId}"] = array('type' => 'info', 'label' => '', 'help' => wfMsg('wikiadoption-pref-label', $wgSitename), 'section' => $section);
         $defaultPreferences["founderemails-joins-{$wgCityId}"] = array('type' => 'toggle', 'label-message' => array('founderemails-pref-joins' . $prefVersion, $wgSitename), 'section' => $section, 'disabled' => $disableEmailPrefs);
         $defaultPreferences["founderemails-edits-{$wgCityId}"] = array('type' => 'toggle', 'label-message' => array('founderemails-pref-edits' . $prefVersion, $wgSitename), 'section' => $section, 'disabled' => $disableEmailPrefs);
         $defaultPreferences["founderemails-views-digest-{$wgCityId}"] = array('type' => 'toggle', 'label-message' => array('founderemails-pref-views-digest' . $prefVersion, $wgSitename), 'section' => $section, 'disabled' => $disableEmailPrefs);
         $defaultPreferences["founderemails-complete-digest-{$wgCityId}"] = array('type' => 'toggle', 'label-message' => array('founderemails-pref-complete-digest' . $prefVersion, $wgSitename), 'section' => $section);
     }
     wfProfileOut(__METHOD__);
     return true;
 }
 public function __construct(array $data = array())
 {
     parent::__construct('register');
     $this->setData($data);
 }
 public function __construct(array $data = array())
 {
     parent::__construct('daysPassed');
     $this->setData($data);
 }
 public function __construct(array $data = array())
 {
     parent::__construct('completeDigest');
     $this->setData($data);
 }
 public function __construct(array $eventData = [])
 {
     parent::__construct('register');
     $this->setData($eventData);
 }
 public static function register($oRecentChange)
 {
     global $wgUser, $wgCityId;
     wfProfileIn(__METHOD__);
     if (FounderEmails::getInstance()->getLastEventType() == 'register') {
         // special case: creating userpage after user registration, ignore event
         wfProfileOut(__METHOD__);
         return true;
     }
     $isRegisteredUser = false;
     $isRegisteredUserFirstEdit = false;
     if ($oRecentChange->getAttribute('rc_user')) {
         $editor = $wgUser->getId() == $oRecentChange->getAttribute('rc_user') ? $wgUser : User::newFromID($oRecentChange->getAttribute('rc_user'));
         $isRegisteredUser = true;
         if (class_exists('Masthead')) {
             $userStats = Masthead::getUserStatsData($editor->getName(), true);
             if ($userStats['editCount'] == 1) {
                 $isRegisteredUserFirstEdit = true;
             }
         }
     } else {
         // Anon user
         $editor = $wgUser->getName() == $oRecentChange->getAttribute('rc_user_text') ? $wgUser : User::newFromName($oRecentChange->getAttribute('rc_user_text'), false);
     }
     $config = FounderEmailsEvent::getConfig('edit');
     if (in_array('staff', $editor->getGroups()) || in_array($editor->getId(), $config['skipUsers'])) {
         // page edited by founder, staff member or excluded user, skipping..
         wfProfileOut(__METHOD__);
         return true;
     }
     if ($editor->isAllowed('bot')) {
         // skip bots
         wfProfileOut(__METHOD__);
         return true;
     }
     $oTitle = Title::makeTitle($oRecentChange->getAttribute('rc_namespace'), $oRecentChange->getAttribute('rc_title'));
     $eventData = array('titleText' => $oTitle->getText(), 'titleUrl' => $oTitle->getFullUrl(), 'editorName' => $editor->getName(), 'editorPageUrl' => $editor->getUserPage()->getFullUrl(), 'editorTalkPageUrl' => $editor->getTalkPage()->getFullUrl(), 'registeredUser' => $isRegisteredUser, 'registeredUserFirstEdit' => $isRegisteredUserFirstEdit, 'myHomeUrl' => Title::newFromText('WikiActivity', NS_SPECIAL)->getFullUrl());
     FounderEmails::getInstance()->registerEvent(new FounderEmailsEditEvent($eventData));
     wfProfileOut(__METHOD__);
     return true;
 }