diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2265,6 +2265,8 @@ 'PhabricatorAuthDisableController' => 'applications/auth/controller/config/PhabricatorAuthDisableController.php', 'PhabricatorAuthDowngradeSessionController' => 'applications/auth/controller/PhabricatorAuthDowngradeSessionController.php', 'PhabricatorAuthEditController' => 'applications/auth/controller/config/PhabricatorAuthEditController.php', + 'PhabricatorAuthEmailLoginMessageType' => 'applications/auth/message/PhabricatorAuthEmailLoginMessageType.php', + 'PhabricatorAuthEmailSetPasswordMessageType' => 'applications/auth/message/PhabricatorAuthEmailSetPasswordMessageType.php', 'PhabricatorAuthFactor' => 'applications/auth/factor/PhabricatorAuthFactor.php', 'PhabricatorAuthFactorConfig' => 'applications/auth/storage/PhabricatorAuthFactorConfig.php', 'PhabricatorAuthFactorConfigQuery' => 'applications/auth/query/PhabricatorAuthFactorConfigQuery.php', @@ -8220,6 +8222,8 @@ 'PhabricatorAuthDisableController' => 'PhabricatorAuthProviderConfigController', 'PhabricatorAuthDowngradeSessionController' => 'PhabricatorAuthController', 'PhabricatorAuthEditController' => 'PhabricatorAuthProviderConfigController', + 'PhabricatorAuthEmailLoginMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthEmailSetPasswordMessageType' => 'PhabricatorAuthMessageType', 'PhabricatorAuthFactor' => 'Phobject', 'PhabricatorAuthFactorConfig' => array( 'PhabricatorAuthDAO', diff --git a/src/applications/auth/message/PhabricatorAuthEmailLoginMessageType.php b/src/applications/auth/message/PhabricatorAuthEmailLoginMessageType.php new file mode 100644 --- /dev/null +++ b/src/applications/auth/message/PhabricatorAuthEmailLoginMessageType.php @@ -0,0 +1,18 @@ +<?php + +final class PhabricatorAuthEmailLoginMessageType + extends PhabricatorAuthMessageType { + + const MESSAGEKEY = 'mail.login'; + + public function getDisplayName() { + return pht('Mail Body: Email Login'); + } + + public function getShortDescription() { + return pht( + 'Guidance in the message body when users request an email link '. + 'to access their account.'); + } + +} diff --git a/src/applications/auth/message/PhabricatorAuthEmailSetPasswordMessageType.php b/src/applications/auth/message/PhabricatorAuthEmailSetPasswordMessageType.php new file mode 100644 --- /dev/null +++ b/src/applications/auth/message/PhabricatorAuthEmailSetPasswordMessageType.php @@ -0,0 +1,18 @@ +<?php + +final class PhabricatorAuthEmailSetPasswordMessageType + extends PhabricatorAuthMessageType { + + const MESSAGEKEY = 'mail.set-password'; + + public function getDisplayName() { + return pht('Mail Body: Set Password'); + } + + public function getShortDescription() { + return pht( + 'Guidance in the message body when users set a password on an account '. + 'which did not previously have a password.'); + } + +} diff --git a/src/applications/auth/message/PhabricatorAuthMessageType.php b/src/applications/auth/message/PhabricatorAuthMessageType.php --- a/src/applications/auth/message/PhabricatorAuthMessageType.php +++ b/src/applications/auth/message/PhabricatorAuthMessageType.php @@ -28,5 +28,6 @@ } abstract public function getDisplayName(); + abstract public function getShortDescription(); } diff --git a/src/applications/auth/message/PhabricatorAuthWelcomeMailMessageType.php b/src/applications/auth/message/PhabricatorAuthWelcomeMailMessageType.php --- a/src/applications/auth/message/PhabricatorAuthWelcomeMailMessageType.php +++ b/src/applications/auth/message/PhabricatorAuthWelcomeMailMessageType.php @@ -6,7 +6,7 @@ const MESSAGEKEY = 'mail.welcome'; public function getDisplayName() { - return pht('Welcome Email Body'); + return pht('Mail Body: Welcome'); } public function getShortDescription() { diff --git a/src/applications/auth/storage/PhabricatorAuthMessage.php b/src/applications/auth/storage/PhabricatorAuthMessage.php --- a/src/applications/auth/storage/PhabricatorAuthMessage.php +++ b/src/applications/auth/storage/PhabricatorAuthMessage.php @@ -45,7 +45,7 @@ } public function getURI() { - return urisprintf('/auth/message/%s', $this->getID()); + return urisprintf('/auth/message/%s/', $this->getID()); } public function attachMessageType(PhabricatorAuthMessageType $type) { diff --git a/src/applications/people/mail/PhabricatorPeopleEmailLoginMailEngine.php b/src/applications/people/mail/PhabricatorPeopleEmailLoginMailEngine.php --- a/src/applications/people/mail/PhabricatorPeopleEmailLoginMailEngine.php +++ b/src/applications/people/mail/PhabricatorPeopleEmailLoginMailEngine.php @@ -43,19 +43,34 @@ $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); $have_passwords = $this->isPasswordAuthEnabled(); + $body = array(); + + if ($is_set_password) { + $message_key = PhabricatorAuthEmailSetPasswordMessageType::MESSAGEKEY; + } else { + $message_key = PhabricatorAuthEmailLoginMessageType::MESSAGEKEY; + } + + $message_body = PhabricatorAuthMessage::loadMessageText( + $recipient, + $message_key); + if (strlen($message_body)) { + $body[] = $this->newRemarkupText($message_body); + } + if ($have_passwords) { if ($is_set_password) { - $body = pht( + $body[] = pht( 'You can use this link to set a password on your account:'. "\n\n %s\n", $login_uri); } else if ($is_serious) { - $body = pht( + $body[] = pht( "You can use this link to reset your Phabricator password:". "\n\n %s\n", $login_uri); } else { - $body = pht( + $body[] = pht( "Condolences on forgetting your password. You can use this ". "link to reset it:\n\n". " %s\n\n". @@ -68,7 +83,7 @@ } } else { - $body = pht( + $body[] = pht( "You can use this login link to regain access to your Phabricator ". "account:". "\n\n". @@ -76,6 +91,8 @@ $login_uri); } + $body = implode("\n\n", $body); + return id(new PhabricatorMetaMTAMail()) ->setSubject($subject) ->setBody($body);