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