From 0b94b84dc7539f28097a15ae030e34c56807365d Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Tue, 4 Feb 2020 21:04:08 +0100 Subject: [PATCH] simplify mail creation --- mod/lostpass.php | 8 ++++---- mod/removeme.php | 4 ++-- src/Core/Update.php | 8 ++++---- src/Model/User.php | 8 ++++---- src/Module/Admin/Users.php | 4 ++-- src/Util/EMailer/MailBuilder.php | 11 ++++++++--- src/Util/Emailer.php | 12 +++++++----- tests/src/Util/Emailer/MailBuilderTest.php | 2 +- 8 files changed, 32 insertions(+), 25 deletions(-) diff --git a/mod/lostpass.php b/mod/lostpass.php index 34daeffd7d..51aee56df7 100644 --- a/mod/lostpass.php +++ b/mod/lostpass.php @@ -65,9 +65,9 @@ function lostpass_post(App $a) Login Name: %3$s', $resetlink, DI::baseUrl(), $user['nickname'])); $email = DI::emailer() - ->newSystemMail((!empty($user['language'])) ? DI::l10n()->withLang($user['language']) : DI::l10n()) + ->newSystemMail() ->withMessage(DI::l10n()->t('Password reset requested at %s', $sitename), $preamble, $body) - ->forUser($user['uid'] ?? 0) + ->forUser($user) ->withRecipient($user['email']) ->build(); @@ -157,9 +157,9 @@ function lostpass_generate_password($user) ', DI::baseUrl(), $user['nickname'], $new_password)); $email = DI::emailer() - ->newSystemMail((!empty($user['language'])) ? DI::l10n()->withLang($user['language']) : DI::l10n()) + ->newSystemMail() ->withMessage(DI::l10n()->t('Your password has been changed at %s', $sitename), $preamble, $body) - ->forUser($user['uid'] ?? 0) + ->forUser($user) ->withRecipient($user['email']) ->build(); DI::emailer()->send($email); diff --git a/mod/removeme.php b/mod/removeme.php index d6b24eb0cc..e8615feb7c 100644 --- a/mod/removeme.php +++ b/mod/removeme.php @@ -42,12 +42,12 @@ function removeme_post(App $a) } $email = DI::emailer() - ->newSystemMail((!empty($admin['language'])) ? DI::l10n()->withLang($admin['language']) : DI::l10n()->withLang('en')) + ->newSystemMail() ->withMessage( DI::l10n()->t('[Friendica System Notify]') . ' ' . DI::l10n()->t('User deleted their account'), DI::l10n()->t('On your Friendica node an user deleted their account. Please ensure that their data is removed from the backups.'), DI::l10n()->t('The user id is %d', local_user())) - ->forUser($admin['uid'] ?? 0) + ->forUser($admin) ->withRecipient($admin['email']) ->build(); DI::emailer()->send($email); diff --git a/src/Core/Update.php b/src/Core/Update.php index 620519a236..4db32ecfbb 100644 --- a/src/Core/Update.php +++ b/src/Core/Update.php @@ -264,9 +264,9 @@ class Update $body = $l10n->t("The error message is\n[pre]%s[/pre]", $error_message); $email = DI::emailer() - ->newSystemMail($l10n) + ->newSystemMail() ->withMessage($l10n->t('[Friendica Notify] Database update'), $preamble, $body) - ->forUser($admin['uid'] ?? 0) + ->forUser($admin) ->withRecipient($admin['email']) ->build(); DI::emailer()->send($email); @@ -300,9 +300,9 @@ class Update $from_build, $to_build)); $email = DI::emailer() - ->newSystemMail($l10n) + ->newSystemMail() ->withMessage($l10n->t('[Friendica Notify] Database update'), $preamble) - ->forUser($admin['uid'] ?? 0) + ->forUser($admin) ->withRecipient($admin['email']) ->build(); DI::emailer()->send($email); diff --git a/src/Model/User.php b/src/Model/User.php index 6deb1c6aee..7e2d37c408 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -898,9 +898,9 @@ class User )); $email = DI::emailer() - ->newSystemMail(DI::l10n()) + ->newSystemMail() ->withMessage(DI::l10n()->t('Registration at %s', $sitename), $body) - ->forUser($user['uid'] ?? 0) + ->forUser($user) ->withRecipient($user['email']) ->build(); return DI::emailer()->send($email); @@ -966,9 +966,9 @@ class User )); $email = DI::emailer() - ->newSystemMail($l10n) + ->newSystemMail() ->withMessage(DI::l10n()->t('Registration details for %s', $sitename), $preamble, $body) - ->forUser($user['uid'] ?? 0) + ->forUser($user) ->withRecipient($user['email']) ->build(); return DI::emailer()->send($email); diff --git a/src/Module/Admin/Users.php b/src/Module/Admin/Users.php index cbb2fa7ac6..f52d7b36f8 100644 --- a/src/Module/Admin/Users.php +++ b/src/Module/Admin/Users.php @@ -77,9 +77,9 @@ class Users extends BaseAdmin $body = sprintf($body, DI::baseUrl()->get(), $user['nickname'], $result['password'], DI::config()->get('config', 'sitename')); $email = DI::emailer() - ->newSystemMail((!empty($user['language'])) ? DI::l10n()->withLang($user['language']) : DI::l10n()) + ->newSystemMail() ->withMessage(DI::l10n()->t('Registration details for %s', DI::config()->get('config', 'sitename')), $preamble, $body) - ->forUser($user['uid'] ?? 0) + ->forUser($user) ->withRecipient($user['email']) ->build(); return DI::emailer()->send($email); diff --git a/src/Util/EMailer/MailBuilder.php b/src/Util/EMailer/MailBuilder.php index 2f8c199a50..074e29d3f2 100644 --- a/src/Util/EMailer/MailBuilder.php +++ b/src/Util/EMailer/MailBuilder.php @@ -86,13 +86,18 @@ abstract class MailBuilder /** * Adds the User ID to the email in case the mail sending needs additional properties of this user * - * @param int $uid The User ID + * @todo Once the user array is replaced with a user entity, replace this array parameter as well + * @param array $user The user entity/array, for which the email should be sent * * @return static */ - public function forUser(int $uid) + public function forUser(array $user) { - $this->recipientUid = $uid; + $this->recipientUid = $user['uid'] ?? 0; + try { + $this->l10n = $user['language'] ? $this->l10n->withLang($user['language']) : $this->l10n; + } catch (Exception $e) { + } return $this; } diff --git a/src/Util/Emailer.php b/src/Util/Emailer.php index 485857b9d7..d5d5f2cb41 100644 --- a/src/Util/Emailer.php +++ b/src/Util/Emailer.php @@ -28,18 +28,22 @@ class Emailer private $logger; /** @var App\BaseURL */ private $baseUrl; + /** @var L10n */ + private $l10n; /** @var string */ private $siteEmailAddress; /** @var string */ private $siteEmailName; - public function __construct(IConfig $config, IPConfig $pConfig, App\BaseURL $baseURL, LoggerInterface $logger) + public function __construct(IConfig $config, IPConfig $pConfig, App\BaseURL $baseURL, LoggerInterface $logger, + L10n $defaultLang) { $this->config = $config; $this->pConfig = $pConfig; $this->logger = $logger; $this->baseUrl = $baseURL; + $this->l10n = $defaultLang; $this->siteEmailAddress = $this->config->get('config', 'sender_email'); if (empty($sysEmailAddress)) { @@ -77,13 +81,11 @@ class Emailer /** * Creates a new system email * - * @param L10n $l10n The chosen language for the new email - * * @return SystemMailBuilder */ - public function newSystemMail(L10n $l10n) + public function newSystemMail() { - return new SystemMailBuilder($l10n, $this->baseUrl, $this->config, + return new SystemMailBuilder($this->l10n, $this->baseUrl, $this->config, $this->getSiteEmailAddress(), $this->getSiteEmailName()); } diff --git a/tests/src/Util/Emailer/MailBuilderTest.php b/tests/src/Util/Emailer/MailBuilderTest.php index 564e79f803..37b8f2784c 100644 --- a/tests/src/Util/Emailer/MailBuilderTest.php +++ b/tests/src/Util/Emailer/MailBuilderTest.php @@ -88,7 +88,7 @@ class MailBuilderTest extends MockedTest ->withMessage('Subject', 'Html', 'text') ->withRecipient('recipient@friendica.local') ->withSender('Sender', 'sender@friendica.local', 'no-reply@friendica.local') - ->forUser(100) + ->forUser(['uid' => 100]) ->build(true); $this->assertEmail($testEmail, [