Skip to content

Commit

Permalink
feat: use components for email templating
Browse files Browse the repository at this point in the history
  • Loading branch information
SychO9 committed Nov 1, 2024
1 parent 535dbb4 commit 5dbfad0
Show file tree
Hide file tree
Showing 27 changed files with 194 additions and 178 deletions.
24 changes: 12 additions & 12 deletions extensions/mentions/views/emails/html/groupMentioned.blade.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
@extends('flarum.forum::email.html.notification.base')
<x-mail::html.notification>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-mentions.email.group_mentioned.html.body', [
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number])
])) !!}
</x-slot::body>

@section('notificationContent')
{!! $formatter->convert($translator->trans('flarum-mentions.email.group_mentioned.html.body', [
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number])
])) !!}
@endsection

@section('contentPreview')
{!! $blueprint->post->formatContent() !!}
@endsection
<x-slot::preview>
{!! $blueprint->post->formatContent() !!}
</x-slot::preview>
</x-mail::html.notification>
26 changes: 13 additions & 13 deletions extensions/mentions/views/emails/html/postMentioned.blade.php
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
@extends('flarum.forum::email.html.notification.base')
<x-mail::html.notification>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-mentions.email.post_mentioned.html.body', [
'{replier_display_name}' => $blueprint->reply->user->display_name,
'{post_number}' => $blueprint->post->number,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->reply->discussion_id, 'near' => $blueprint->reply->number])
])) !!}
</x-slot::body>

@section('notificationContent')
{!! $formatter->convert($translator->trans('flarum-mentions.email.post_mentioned.html.body', [
'{replier_display_name}' => $blueprint->reply->user->display_name,
'{post_number}' => $blueprint->post->number,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->reply->discussion_id, 'near' => $blueprint->reply->number])
])) !!}
@endsection

@section('contentPreview')
{!! $blueprint->reply->formatContent() !!}
@endsection
<x-slot::preview>
{!! $blueprint->reply->formatContent() !!}
</x-slot::preview>
</x-mail::html.notification>
24 changes: 12 additions & 12 deletions extensions/mentions/views/emails/html/userMentioned.blade.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
@extends('flarum.forum::email.html.notification.base')
<x-mail::html.notification>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-mentions.email.user_mentioned.html.body', [
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number])
])) !!}
</x-slot::body>

@section('notificationContent')
{!! $formatter->convert($translator->trans('flarum-mentions.email.user_mentioned.html.body', [
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number])
])) !!}
@endsection

@section('contentPreview')
{!! $blueprint->post->formatContent() !!}
@endsection
<x-slot::preview>
{!! $blueprint->post->formatContent() !!}
</x-slot::preview>
</x-mail::html.notification>
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
@extends('flarum.forum::email.plain.notification.base')

@section('content')
<x-mail::plain.notification>
<x-slot::body>
{!! $translator->trans('flarum-mentions.email.group_mentioned.plain.body', [
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{content}' => $blueprint->post->content
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.notification>
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
@extends('flarum.forum::email.plain.notification.base')

@section('content')
<x-mail::plain.notification>
<x-slot::body>
{!! $translator->trans('flarum-mentions.email.post_mentioned.plain.body', [
'{replier_display_name}' => $blueprint->reply->user->display_name,
'{post_number}' => $blueprint->post->number,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->reply->discussion_id, 'near' => $blueprint->reply->number]),
'{content}' => $blueprint->reply->content
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.notification>
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
@extends('flarum.forum::email.plain.notification.base')

@section('content')
<x-mail::plain.notification>
<x-slot::body>
{!! $translator->trans('flarum-mentions.email.user_mentioned.plain.body', [
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{content}' => $blueprint->post->content
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.notification>
22 changes: 11 additions & 11 deletions extensions/messages/views/emails/html/messageReceived.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
/** @var \Flarum\Messages\Notification\MessageReceivedBlueprint $blueprint */
@endphp

@extends('flarum.forum::email.html.notification.base')
<x-mail::html.notification>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-messages.email.message_received.html.body', [
'{user_display_name}' => $blueprint->message->user->display_name,
'{url}' => $url->to('forum')->route('messages.dialog', ['id' => $blueprint->message->dialog_id, 'near' => $blueprint->message->id])
])) !!}
</x-slot::body>

@section('notificationContent')
{!! $formatter->convert($translator->trans('flarum-messages.email.message_received.html.body', [
'{user_display_name}' => $blueprint->message->user->display_name,
'{url}' => $url->to('forum')->route('messages.dialog', ['id' => $blueprint->message->dialog_id, 'near' => $blueprint->message->id])
])) !!}
@endsection

@section('contentPreview')
{!! $blueprint->message->formatContent() !!}
@endsection
<x-slot::preview>
{!! $blueprint->message->formatContent() !!}
</x-slot::preview>
</x-mail::html.notification>
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
/** @var \Flarum\Messages\Notification\MessageReceivedBlueprint $blueprint */
@endphp

@extends('flarum.forum::email.plain.notification.base')

@section('content')
<x-mail::plain.notification>
<x-slot::body>
{!! $translator->trans('flarum-messages.email.message_received.plain.body', [
'{user_display_name}' => $blueprint->message->user->display_name,
'{url}' => $url->to('forum')->route('messages.dialog', ['id' => $blueprint->message->dialog_id, 'near' => $blueprint->message->id]),
'{content}' => $blueprint->message->content
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.notification>
24 changes: 12 additions & 12 deletions extensions/subscriptions/views/emails/html/newPost.blade.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
@extends('flarum.forum::email.html.notification.base')
<x-mail::html.notification>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-subscriptions.email.new_post.html.body', [
'{poster_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number])
])) !!}
</x-slot::body>

@section('notificationContent')
{!! $formatter->convert($translator->trans('flarum-subscriptions.email.new_post.html.body', [
'{poster_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number])
])) !!}
@endsection

@section('contentPreview')
{!! $blueprint->post->formatContent() !!}
@endsection
<x-slot::preview>
{!! $blueprint->post->formatContent() !!}
</x-slot::preview>
</x-mail::html.notification>
8 changes: 4 additions & 4 deletions extensions/subscriptions/views/emails/plain/newPost.blade.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
@extends('flarum.forum::email.plain.notification.base')

@section('content')
<x-mail::plain.notification>
<x-slot::body>
{!! $translator->trans('flarum-subscriptions.email.new_post.plain.body', [
'{poster_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{content}' => $blueprint->post->content
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.notification>
20 changes: 10 additions & 10 deletions extensions/suspend/views/emails/html/suspended.blade.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
@extends('flarum.forum::email.html.information.base')
<x-mail::html.information>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-suspend.email.suspended.html.body', [
'{forumTitle}' => $settings->get('forum_title')
])) !!}
</x-slot::body>

@section('informationContent')
{!! $formatter->convert($translator->trans('flarum-suspend.email.suspended.html.body', [
'{forumTitle}' => $settings->get('forum_title')
])) !!}
@endsection

@section('contentPreview')
{!! $formatter->convert($blueprint->user->suspend_message ?? $translator->trans('flarum-suspend.email.no_reason_given')) !!}
@endsection
<x-slot::preview>
{!! $formatter->convert($blueprint->user->suspend_message ?? $translator->trans('flarum-suspend.email.no_reason_given')) !!}
</x-slot::preview>
</x-mail::html.information>
16 changes: 8 additions & 8 deletions extensions/suspend/views/emails/html/unsuspended.blade.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
@extends('flarum.forum::email.html.information.base')

@section('content')
{!! $formatter->convert($translator->trans('flarum-suspend.email.unsuspended.html.body', [
'{forumTitle}' => $settings->get('forum_title'),
'{forum_url}' => $url->to('forum')->base(),
])) !!}
@endsection
<x-mail::html.information>
<x-slot::body>
{!! $formatter->convert($translator->trans('flarum-suspend.email.unsuspended.html.body', [
'{forumTitle}' => $settings->get('forum_title'),
'{forum_url}' => $url->to('forum')->base(),
])) !!}
</x-slot::body>
</x-mail::html.information>
8 changes: 4 additions & 4 deletions extensions/suspend/views/emails/plain/suspended.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@extends('flarum.forum::email.plain.information.base')

@section('content')
<x-mail::plain.information>
<x-slot::body>
{!! $translator->trans('flarum-suspend.email.suspended.plain.body', [
'{suspension_message}' => $blueprint->user->suspend_message ?? $translator->trans('flarum-suspend.email.no_reason_given'),
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.information>
8 changes: 4 additions & 4 deletions extensions/suspend/views/emails/plain/unsuspended.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@extends('flarum.forum::email.plain.information.base')

@section('content')
<x-mail::plain.information>
<x-slot::body>
{!! $translator->trans('flarum-suspend.email.unsuspended.plain.body', [
'{forum_url}' => $url->to('forum')->base(),
]) !!}
@endsection
</x-slot::body>
</x-mail::plain.information>
11 changes: 7 additions & 4 deletions framework/core/src/Mail/Job/SendInformationalEmailJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

use Flarum\Queue\AbstractJob;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Contracts\View\Factory;
use Illuminate\Mail\Message;

class SendInformationalEmailJob extends AbstractJob
Expand All @@ -23,23 +24,25 @@ public function __construct(
private readonly string $forumTitle,
private readonly ?string $bodyTitle = null,
protected array $views = [
'text' => 'flarum.forum::email.plain.information.base',
'html' => 'flarum.forum::email.html.information.base'
'text' => 'mail::plain.information.generic',
'html' => 'mail::html.information.generic'
]
) {
}

public function handle(Mailer $mailer): void
public function handle(Mailer $mailer, Factory $view): void
{
$forumTitle = $this->forumTitle;
$infoContent = $this->body;
$userEmail = $this->email;
$title = $this->bodyTitle;
$username = $this->displayName;

$view->share(compact('forumTitle', 'userEmail', 'title', 'username'));

$mailer->send(
$this->views,
compact('forumTitle', 'infoContent', 'userEmail', 'title', 'username'),
compact('infoContent'),
function (Message $message) {
$message->to($this->email);
$message->subject($this->subject);
Expand Down
5 changes: 5 additions & 0 deletions framework/core/src/Mail/MailServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use Illuminate\Contracts\Validation\Factory;
use Illuminate\Mail\Events\MessageSending;
use Illuminate\Support\Arr;
use Illuminate\View\Compilers\BladeCompiler;
use Symfony\Component\Mailer\Transport\TransportInterface;

class MailServiceProvider extends AbstractServiceProvider
Expand Down Expand Up @@ -83,6 +84,10 @@ public function register(): void
});

$this->container->alias('mailer', MailerContract::class);

$this->container->afterResolving(\Illuminate\Contracts\View\Factory::class, function (\Illuminate\Contracts\View\Factory $blade) {
$blade->addNamespace('mail', __DIR__.'/../../views/email');
});
}

public function boot(Dispatcher $events): void
Expand Down
10 changes: 8 additions & 2 deletions framework/core/src/Notification/NotificationMailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\User;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Contracts\View\Factory;
use Illuminate\Mail\Message;
use Illuminate\Support\Arr;

Expand All @@ -24,7 +25,8 @@ public function __construct(
protected Mailer $mailer,
protected TranslatorInterface $translator,
protected SettingsRepositoryInterface $settings,
protected UrlGenerator $url
protected UrlGenerator $url,
protected Factory $view,
) {
}

Expand All @@ -44,9 +46,13 @@ public function send(MailableInterface&BlueprintInterface $blueprint, User $user
$username = $user->display_name;
$userEmail = $user->email;

$data = compact('unsubscribeLink', 'settingsLink', 'type', 'forumTitle', 'username', 'userEmail');

$this->view->share($data);

$this->mailer->send(
$this->getEmailViews($blueprint),
compact('blueprint', 'user', 'unsubscribeLink', 'settingsLink', 'type', 'forumTitle', 'username', 'userEmail'),
$data,
function (Message $message) use ($blueprint, $user) {
$message->to($user->email, $user->display_name)
->subject($blueprint->getEmailSubject($this->translator));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
@endif
</a>
</div>
@yield('header')
{{ $header ?? '' }}
</div>

<div class="content">
Expand All @@ -67,7 +67,7 @@
</div>
@endif
<div class="main-content">
@yield('content')
{{ $content ?? '' }}
</div>
@if(!isset($signoff) || $signoff !== false)
<div class="signoff">
Expand All @@ -77,7 +77,7 @@
</div>

<div class="footer">
@yield('footer')
{{ $footer ?? '' }}
</div>

</body>
Expand Down
Loading

0 comments on commit 5dbfad0

Please sign in to comment.