/** * * @param array $aResponsibleEditorIds * @param User $oUser * @param array $aTitles * @param string $sAction */ public static function notifyResponsibleEditors($aResponsibleEditorIds, $oUser, $aTitles, $sAction) { if (empty($aResponsibleEditorIds)) { return true; } foreach ($aResponsibleEditorIds as $iUserId) { $oREUser = User::newFromId($iUserId); if ($iUserId == $oUser->getId()) { continue; } if (BsConfig::getVarForUser("MW::ResponsibleEditors::E" . ucfirst($sAction), $oREUser) === false) { continue; } $sUserRealName = BsCore::getInstance()->getUserDisplayName($oUser); $sUsername = $oUser->getName(); $sArticleName = $aTitles[0]->getText(); $sArticleLink = $aTitles[0]->getFullURL(); $sLanguageCode = $oREUser->getOption('language'); switch ($sAction) { case 'change': $sSubject = wfMessage('bs-responsibleeditors-mail-subject-re-article-changed', $sArticleName, $sUsername, $sUserRealName)->inLanguage($sLanguageCode)->text(); $sMessage = wfMessage('bs-responsibleeditors-mail-text-re-article-changed', $sArticleName, $sUsername, $sUserRealName, $sArticleLink)->inLanguage($sLanguageCode)->text(); break; case 'delete': $sSubject = wfMessage('bs-responsibleeditors-mail-subject-re-article-deleted', $sArticleName, $sUsername, $sUserRealName)->inLanguage($sLanguageCode)->text(); $sMessage = wfMessage('bs-responsibleeditors-mail-text-re-article-deleted', $sArticleName, $sUsername, $sUserRealName, $sArticleLink)->inLanguage($sLanguageCode)->text(); break; case 'move': $sSubject = wfMessage('bs-responsibleeditors-mail-subject-re-article-moved', $sArticleName, $sUsername, $sUserRealName)->inLanguage($sLanguageCode)->text(); $sMessage = wfMessage('bs-responsibleeditors-mail-text-re-article-moved', $sArticleName, $aTitles[1]->getPrefixedText(), $sUsername, $sUserRealName, $sArticleLink)->inLanguage($sLanguageCode)->text(); break; default: wfDebugLog('BS::ResponsibleEditors::notifyResponsibleEditors', 'Action "' . $sAction . '" is unknown. No mails sent.'); return; } BsMailer::getInstance('MW')->send($oREUser, $sSubject, $sMessage); } }
/** * Notifies all Users specified in the array via Echo extension if it's turned on * @param String $sAction * @param array $aUsers * @param int $iArticleId * @param int $iUserId */ public static function notifyUser($sAction, $aUsers, $iArticleId, $iUserId) { if (class_exists('EchoEvent')) { $oCurrentUser = RequestContext::getMain()->getUser(); foreach ($aUsers as $oUser) { #if you're mentioning yourself don't send notification if ($oUser->getId() === $iUserId) { continue; } EchoEvent::create(array('type' => 'bs-shoutbox-' . $sAction, 'title' => Article::newFromID($iArticleId)->getTitle(), 'agent' => User::newFromId($iUserId), 'extra' => array('summary' => "", 'titlelink' => true, 'difflink' => array('diffparams' => array()), 'agentlink' => true, 'mentioned-user-id' => $oUser->getId(), 'realname' => BsCore::getUserDisplayName($oCurrentUser), 'title' => Article::newFromID($iArticleId)->getTitle()->getText()))); } } else { //PW(23.04.2015): TODO - get rid of BsMailer | Echo is required $sSubject = wfMessage('bs-shoutbox-notifications-title-message-subject')->plain(); $oUser = User::newFromId($iUserId); $sMessage = wfMessage('bs-shoutbox-notifications-title-message-text', $oUser, BsCore::getUserDisplayName($oUser), Linker::link(Article::newFromID($iArticleId)->getTitle()), Linker::link($oUser))->plain(); BsMailer::getInstance('MW')->send($aUsers, $sSubject, $sMessage); } }
/** * Send email notification to next user(s) on review list. * @param BsReviewProcess $oReviewProcess Review process users should be notified for. * @return Status */ public function emailNotifyNextUsers($oReviewProcess) { $aNextUsers = $oReviewProcess->getNextUsers(); // Identify owner $oOwner = User::newFromId($oReviewProcess->getOwner()); $sOwnerRealName = BsCore::getUserDisplayName($oOwner); $oTitle = Title::newFromID($oReviewProcess->pid); $sTitleText = $oTitle->getPrefixedText(); $sLink = BsLinkProvider::makeLink($oTitle, $oTitle->getFullURL()); foreach ($aNextUsers as $aReviewer) { // dirty workaround, sometimes id comes as username if (is_numeric($aReviewer['id'])) { $oReviewer = User::newFromId($aReviewer['id']); } else { $oReviewer = User::newFromName($aReviewer['id']); } if (!BsConfig::getVarForUser('MW::Review::EmailNotifyReviewer', $oReviewer->getName())) { continue; } // Identify reviewer //PW(10.03.2015): Echo notifications $sReviewerMail = $oReviewer->getEmail(); if (!$sReviewerMail) { continue; } $sReviewerLang = $oReviewer->getOption('language'); $sSubject = wfMessage('bs-review-mail-invite-header', $sTitleText)->inLanguage($sReviewerLang)->text(); $sMsg = wfMessage('bs-review-mail-invite-body', $sOwnerRealName, $oOwner->getName(), $sTitleText)->inLanguage($sReviewerLang)->text(); $sMsg .= "\n\n" . $sLink; if ($aReviewer['comment']) { $sMsg .= "\n" . wfMessage('bs-review-mail-comment', $aReviewer['comment'])->inLanguage($sReviewerLang)->text(); } //Send mail to next user in queue BsMailer::getInstance('MW')->send($oReviewer, $sSubject, $sMsg); } }
/** * * @global User $wgUser * @param array $aNewEditorIds * @param array $aRemovedEditorIds * @param array $aUntouchedEditorIds * @param int $iArticleId * @return void */ public static function notifyAffectedUsers($aNewEditorIds, $aRemovedEditorIds, $aUntouchedEditorIds, $iArticleId) { global $wgUser; if (BsConfig::get('MW::ResponsibleEditors::EMailNotificationOnResponsibilityChange') != true) { return; } $oCore = BsCore::getInstance(); $oArticleTitle = Title::newFromID($iArticleId); $sArticleName = $oArticleTitle->getPrefixedText(); $sArticleLink = $oArticleTitle->getFullURL(); $sChangingUserName = $oCore->getUserDisplayName($wgUser); $sUsername = $wgUser->getName(); //Notify new editors $aNewEditors = array(); foreach ($aNewEditorIds as $iUserId) { if ($wgUser->getId() == $iUserId) { continue; } //Skip notification if user changes responsibility himself $oUser = User::newFromId($iUserId); $aNewEditors[] = $oUser; } $sSubject = wfMessage('bs-responsibleeditors-mail-subject-new-editor', $sArticleName)->text(); $sMessage = wfMessage('bs-responsibleeditors-mail-text-new-editor', $sUsername, $sChangingUserName, $sArticleName, $sArticleLink)->text(); BsMailer::getInstance('MW')->send($aNewEditors, $sSubject, $sMessage); //Notify untouched editors $aUntouchedEditors = array(); foreach ($aUntouchedEditorIds as $iUserId) { if ($wgUser->getId() == $iUserId) { continue; } //Skip notification if user changes responsibility himself $aUntouchedEditors[] = User::newFromId($iUserId); } //Notify removed editors $aRemovedEditors = array(); if (empty($aRemovedEditorIds)) { return; } foreach ($aRemovedEditorIds as $iUserId) { if ($wgUser->getId() == $iUserId) { continue; } //Skip notification if user changes responsibility himself $oUser = User::newFromId($iUserId); $aRemovedEditors[] = $oUser; } $aCurrentRespEdNames = array(); $aCurrentRespEdIds = $aUntouchedEditorIds + $aNewEditorIds; foreach ($aCurrentRespEdIds as $oCurrentRespEdUserId) { $aCurrentRespEdNames[] = $oCore->getUserDisplayName(User::newFromId($oCurrentRespEdUserId)); } $sSubject = wfMessage('bs-responsibleeditors-mail-subject-former-editor', $sArticleName)->plain(); $sMessage = wfMessage('bs-responsibleeditors-mail-text-former-editor', $sUsername, $sChangingUserName, $sArticleName, implode(', ', $aCurrentRespEdNames), count($aCurrentRespEdNames), $sArticleLink)->text(); BsMailer::getInstance('MW')->send($aRemovedEditors, $sSubject, $sMessage); }