From a19426147a9985ba773dfaceae8bff9c4c7c9178 Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Wed, 28 Aug 2024 14:04:36 +0200 Subject: [PATCH] added event to send email to user (#5034) --- src/Event/EmailEvent.php | 2 +- src/Event/UserEmailEvent.php | 11 ++++++++--- src/EventSubscriber/EmailSubscriber.php | 7 +++++++ src/Mail/KimaiMailer.php | 20 +++++++++++++++++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/Event/EmailEvent.php b/src/Event/EmailEvent.php index 1bf9fac5..b68f2fe7 100644 --- a/src/Event/EmailEvent.php +++ b/src/Event/EmailEvent.php @@ -14,7 +14,7 @@ use Symfony\Contracts\EventDispatcher\Event; class EmailEvent extends Event { - public function __construct(private Email $email) + public function __construct(private readonly Email $email) { } diff --git a/src/Event/UserEmailEvent.php b/src/Event/UserEmailEvent.php index 509973d2..2685683b 100644 --- a/src/Event/UserEmailEvent.php +++ b/src/Event/UserEmailEvent.php @@ -11,12 +11,17 @@ namespace App\Event; use App\Entity\User; use Symfony\Component\Mime\Email; +use Symfony\Contracts\EventDispatcher\Event; -class UserEmailEvent extends EmailEvent +class UserEmailEvent extends Event { - public function __construct(private User $user, Email $email) + public function __construct(private readonly User $user, private readonly Email $email) { - parent::__construct($email); + } + + public function getEmail(): Email + { + return $this->email; } public function getUser(): User diff --git a/src/EventSubscriber/EmailSubscriber.php b/src/EventSubscriber/EmailSubscriber.php index d6b815d0..61ecd4e2 100644 --- a/src/EventSubscriber/EmailSubscriber.php +++ b/src/EventSubscriber/EmailSubscriber.php @@ -10,6 +10,7 @@ namespace App\EventSubscriber; use App\Event\EmailEvent; +use App\Event\UserEmailEvent; use App\Mail\KimaiMailer; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -26,6 +27,7 @@ final class EmailSubscriber implements EventSubscriberInterface { return [ EmailEvent::class => ['onMailEvent', 100], + UserEmailEvent::class => ['onUserMailEvent', 100], ]; } @@ -33,4 +35,9 @@ final class EmailSubscriber implements EventSubscriberInterface { $this->mailer->send($event->getEmail()); } + + public function onUserMailEvent(UserEmailEvent $event): void + { + $this->mailer->sendToUser($event->getUser(), $event->getEmail()); + } } diff --git a/src/Mail/KimaiMailer.php b/src/Mail/KimaiMailer.php index 0298acaa..1cc4e28c 100644 --- a/src/Mail/KimaiMailer.php +++ b/src/Mail/KimaiMailer.php @@ -10,6 +10,7 @@ namespace App\Mail; use App\Configuration\MailConfiguration; +use App\Entity\User; use Symfony\Component\Mailer\Envelope; use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mime\Email; @@ -23,10 +24,27 @@ final class KimaiMailer implements MailerInterface public function send(RawMessage $message, Envelope $envelope = null): void { - if ($message instanceof Email && \count($message->getFrom()) === 0) { + if (!$message instanceof Email) { + $email = new Email(); + $email->text($message->toString()); + $message = $email; + } + + if (\count($message->getFrom()) === 0) { $message->from($this->configuration->getFromAddress()); } $this->mailer->send($message); } + + public function sendToUser(User $user, Email $message, Envelope $envelope = null): void + { + if (!$user->isEnabled() || $user->getEmail() === null) { + return; + } + + $message->to($user->getEmail()); + + $this->send($message, $envelope); + } }