Skip to content

Commit 409f26b

Browse files
authored
[1.x] fix: Reset password, email confirm, activation not locale aware (flarum#4255)
* fix: Reset password, email confirm, activation not locale aware * fix: phpstan, undo removal of UserRepository * fix: wrong import * fix: phpstan
1 parent 9e80f5e commit 409f26b

File tree

4 files changed

+53
-0
lines changed

4 files changed

+53
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/*
4+
* This file is part of Flarum.
5+
*
6+
* For detailed copyright and license information, please view the
7+
* LICENSE file that was distributed with this source code.
8+
*/
9+
10+
namespace Flarum\Mail;
11+
12+
use Flarum\Locale\Translator;
13+
use Flarum\Settings\SettingsRepositoryInterface;
14+
use Flarum\User\UserRepository;
15+
use Symfony\Contracts\Translation\TranslatorInterface;
16+
17+
trait SetTranslatorLocaleForEmailTrait
18+
{
19+
/**
20+
* Set the translator locale based on the user's preference for the given email.
21+
* Falls back to forum default if user not found or has no preference.
22+
*/
23+
protected function setTranslatorLocaleForEmail(
24+
TranslatorInterface $translator,
25+
SettingsRepositoryInterface $settings,
26+
string $email
27+
): void {
28+
$users = resolve(UserRepository::class);
29+
$user = $users->findByEmail($email);
30+
31+
$locale = $user
32+
? ($user->getPreference('locale') ?? $settings->get('default_locale'))
33+
: $settings->get('default_locale');
34+
35+
/** @var TranslatorInterface&Translator $translator */
36+
$translator->setLocale($locale);
37+
}
38+
}

framework/core/src/User/AccountActivationMailer.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace Flarum\User;
1111

1212
use Flarum\Http\UrlGenerator;
13+
use Flarum\Mail\SetTranslatorLocaleForEmailTrait;
1314
use Flarum\Settings\SettingsRepositoryInterface;
1415
use Flarum\User\Event\Registered;
1516
use Illuminate\Contracts\Queue\Queue;
@@ -18,6 +19,7 @@
1819
class AccountActivationMailer
1920
{
2021
use AccountActivationMailerTrait;
22+
use SetTranslatorLocaleForEmailTrait;
2123

2224
/**
2325
* @var SettingsRepositoryInterface
@@ -61,6 +63,8 @@ public function handle(Registered $event)
6163
return;
6264
}
6365

66+
$this->setTranslatorLocaleForEmail($this->translator, $this->settings, $user->email);
67+
6468
$token = $this->generateToken($user, $user->email);
6569
$data = $this->getEmailData($user, $token);
6670

framework/core/src/User/EmailConfirmationMailer.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111

1212
use Flarum\Http\UrlGenerator;
1313
use Flarum\Mail\Job\SendRawEmailJob;
14+
use Flarum\Mail\SetTranslatorLocaleForEmailTrait;
1415
use Flarum\Settings\SettingsRepositoryInterface;
1516
use Flarum\User\Event\EmailChangeRequested;
1617
use Illuminate\Contracts\Queue\Queue;
1718
use Symfony\Contracts\Translation\TranslatorInterface;
1819

1920
class EmailConfirmationMailer
2021
{
22+
use SetTranslatorLocaleForEmailTrait;
23+
2124
/**
2225
* @var SettingsRepositoryInterface
2326
*/
@@ -49,6 +52,9 @@ public function __construct(SettingsRepositoryInterface $settings, Queue $queue,
4952
public function handle(EmailChangeRequested $event)
5053
{
5154
$email = $event->email;
55+
56+
$this->setTranslatorLocaleForEmail($this->translator, $this->settings, $email);
57+
5258
$data = $this->getEmailData($event->user, $email);
5359

5460
$body = $this->translator->trans('core.email.confirm_email.body', $data);

framework/core/src/User/Job/RequestPasswordResetJob.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
use Flarum\Http\UrlGenerator;
1313
use Flarum\Mail\Job\SendRawEmailJob;
14+
use Flarum\Mail\SetTranslatorLocaleForEmailTrait;
1415
use Flarum\Queue\AbstractJob;
1516
use Flarum\Settings\SettingsRepositoryInterface;
1617
use Flarum\User\PasswordToken;
@@ -20,6 +21,8 @@
2021

2122
class RequestPasswordResetJob extends AbstractJob
2223
{
24+
use SetTranslatorLocaleForEmailTrait;
25+
2326
/**
2427
* @var string
2528
*/
@@ -39,6 +42,8 @@ public function handle(
3942
UserRepository $users,
4043
Queue $queue
4144
) {
45+
$this->setTranslatorLocaleForEmail($translator, $settings, $this->email);
46+
4247
$user = $users->findByEmail($this->email);
4348

4449
if (! $user) {

0 commit comments

Comments
 (0)