/** * Generate a new e-mail confirmation token and send a confirmation/invalidation * mail to the user's given address. * * @param $type String: message to send, either "created", "changed" or "set" * @return Status object */ public function sendConfirmationMail($type = 'created', $mailtype = "ConfirmationMail", $mailmsg = '', $ip_arg = true, $emailTextTemplate = '', $langCode = null) { global $wgLang; $expiration = null; // gets passed-by-ref and defined in next line. $token = $this->confirmationToken($expiration); $url = $this->confirmationTokenUrl($token); $invalidateURL = $this->invalidationTokenUrl($token); $this->saveSettings(); if ($type == 'created' || $type === false) { $message = 'confirmemail_body'; } elseif ($type === true) { $message = 'confirmemail_body_changed'; } else { $message = 'confirmemail_body_' . $type; } /* Wikia change begin */ $subject = 'confirmemail_subject'; if (!empty($mailmsg)) { $message = $mailmsg . '_body'; $subject = $mailmsg . '_subject'; } $manualURL = SpecialPage::getTitleFor('ConfirmEmail/manual')->getFullURL(); $IP = $this->getRequest()->getIP(); $name = $this->getName(); $expDate = $wgLang->timeanddate($expiration, false); if (!$ip_arg) { $args = array($name, $url, $expDate, $invalidateURL, $manualURL, $token); } else { $args = array($IP, $name, $url, $expDate, $invalidateURL, $manualURL, $token); } $priority = 0; wfRunHooks('UserSendConfirmationMail', array(&$this, &$args, &$priority, &$url, $token, $ip_arg, $type)); $emailController = $this->getEmailController($mailtype); if (!empty($emailController)) { return $this->sendUsingEmailExtension($emailController, $url); } /* Wikia change begin - @author: Marooned */ /* HTML e-mails functionality */ global $wgEnableRichEmails; if (empty($wgEnableRichEmails)) { return $this->sendMail(wfMsg($subject), wfMsg($message, $this->getRequest()->getIP(), $this->getName(), $url, $wgLang->timeanddate($expiration, false), $invalidateURL, $wgLang->date($expiration, false), $wgLang->time($expiration, false)), null, null, $mailtype, null, $priority); } else { $wantHTML = $this->isAnon() || $this->getGlobalPreference('htmlemails'); if (empty($langCode)) { $langCode = $this->getGlobalPreference('language'); } list($body, $bodyHTML) = wfMsgHTMLwithLanguage($message, $langCode, array(), $args, $wantHTML); if (!empty($emailTextTemplate) && $wantHTML) { $emailParams = array('$USERNAME' => $name, '$CONFIRMURL' => $url); $bodyHTML = strtr($emailTextTemplate, $emailParams); } return $this->sendMail(wfMsg($subject), $body, null, null, $mailtype, $bodyHTML, $priority); } /* Wikia change end */ }
/** * @param $u User object * @param $throttle Boolean * @param $emailTitle String: message name of email title * @param $emailText String: message name of email text * @param $emailTextTemplate String: template of email text * @return Mixed: true on success, WikiError on failure * @private * @return Status object */ function mailPasswordInternal($u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext', $emailTextTemplate = '') { global $wgServer, $wgScript, $wgNewPasswordExpiry, $wgNoReplyAddress, $wgEnableRichEmails; if ($u->getEmail() == '') { return Status::newFatal('noemail', $u->getName()); } $ip = $this->getRequest()->getIP(); if (!$ip) { return Status::newFatal('badipaddress'); } $currentUser = $this->getUser(); wfRunHooks('User::mailPasswordInternal', array(&$currentUser, &$ip, &$u)); $np = $u->randomPassword(); $u->setNewpassword($np, $throttle); $u->saveSettings(); /* Wikia change begin - @author: Uberfuzzy */ /* use noReply address (if available) */ $nr = null; if (!empty($wgNoReplyAddress)) { $nr = new MailAddress($wgNoReplyAddress, 'No Reply'); } /* Wikia change begin - @author: Marooned */ /* HTML e-mails functionality */ $userLanguage = $u->getGlobalPreference('language'); $priority = 2; // Password emails are higher than default priority of 0 and confirmation emails priority of 1 if (empty($wgEnableRichEmails)) { $m = $this->msg($emailText, $ip, $u->getName(), $np, $wgServer . $wgScript, round($wgNewPasswordExpiry / 86400))->inLanguage($userLanguage)->text(); $result = $u->sendMail($this->msg($emailTitle)->inLanguage($userLanguage)->text(), $m, null, $nr, 'TemporaryPassword', $priority); } else { $wantHTML = $u->isAnon() || $u->getGlobalPreference('htmlemails'); list($m, $mHTML) = wfMsgHTMLwithLanguage($emailText, $u->getGlobalPreference('language'), array('parsemag'), array($ip, $u->getName(), $np, $wgServer . $wgScript, round($wgNewPasswordExpiry / 86400)), $wantHTML); if (!empty($emailTextTemplate) && $wantHTML) { $emailParams = array('$USERNAME' => $u->getName(), '$NEWPASSWORD' => $np); $mHTML = strtr($emailTextTemplate, $emailParams); } $result = $u->sendMail($this->msg($emailTitle)->inLanguage($userLanguage)->text(), $m, null, $nr, 'TemporaryPassword', $mHTML, $priority); } return $result; }
/** * Get more accurate message in plain and HTML versions using language as priority * * @author Marooned * @return array */ function wfMsgHTMLwithLanguageAndAlternative($key, $keyAlternative, $lang, $options = array(), $params = array(), $wantHTML = true) { // inserted here for external i18n add-on, adjust params if needed wfRunHooks('MsgHTMLwithLanguageAndAlternativeBefore'); list($msgPlainMain, $msgRichMain, $msgPlainMainFallback, $msgRichMainFallback) = wfMsgHTMLwithLanguage($key, $lang, $options, $params, $wantHTML); list($msgPlainAlter, $msgRichAlter, $msgPlainAlterFallback, $msgRichAlterFallback) = wfMsgHTMLwithLanguage($keyAlternative, $lang, $options, $params, $wantHTML); $msgPlain = $msgPlainMainFallback > $msgPlainAlterFallback || wfEmptyMsg($key, $msgPlainMain) ? $msgPlainAlter : $msgPlainMain; $msgRich = $msgRichMainFallback > $msgRichAlterFallback || wfEmptyMsg($key . '-HTML', $msgRichMain) ? $msgRichAlter : $msgRichMain; return array($msgPlain, $msgRich); }
/** * sendWelcomeMail * * sensd welcome email to founder (if founder has set email address) * * @author eloy@wikia-inc.com * @author adi@wikia-inc.com * @author moli@wikia-inc.com * @access private * * @return boolean status */ private function sendWelcomeMail() { global $wgUser, $wgPasswordSender, $wgWikiaEnableFounderEmailsExt; if (!empty($wgWikiaEnableFounderEmailsExt)) { // skip this step when FounderEmails extension is enabled Wikia::log(__METHOD__, "mail", "FounderEmails extension is enabled. Welcome email is not sent"); return true; } $oReceiver = $this->mFounder; $sServer = $this->mParams->url; /** * set apropriate staff member */ $oStaffUser = Wikia::staffForLang($this->mParams->language); $oStaffUser = $oStaffUser instanceof User ? $oStaffUser : User::newFromName(CreateWiki::DEFAULT_STAFF); $sFrom = new MailAddress($wgPasswordSender, "The Wikia Community Team"); $sTo = $oReceiver->getEmail(); $aBodyParams = array($sServer, $oReceiver->getName(), $oStaffUser->getRealName(), htmlspecialchars($oStaffUser->getTitleKey()), htmlspecialchars($oReceiver->getTalkPage()->getFullURL())); $sBody = $sBodyHTML = $sSubject = null; $language = @empty($this->mParams->language) ? 'en' : $this->mParams->language; list($sBody, $sBodyHTML) = wfMsgHTMLwithLanguage('autocreatewiki-welcomebody', $language, array(), $aBodyParams); $sSubject = wfMsgExt('autocreatewiki-welcomesubject', array('language' => $language), array($this->mParams->sitename)); if (!empty($sTo)) { $status = $oReceiver->sendMail($sSubject, $sBody, $sFrom, null, 'AutoCreateWiki', $sBodyHTML); if ($status) { Wikia::log(__METHOD__, "mail", "Mail to founder {$sTo} sent."); } } else { Wikia::log(__METHOD__, "mail", "Founder email is not set. Welcome email is not sent"); } }