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