mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Automatically execute body renderer when posting an email in Chill
+ adaptation of services which already uses body renderer
This commit is contained in:
parent
3d53e7da65
commit
1313b6f138
@ -12,9 +12,11 @@ declare(strict_types=1);
|
|||||||
namespace Chill\MainBundle\Service\Mailer;
|
namespace Chill\MainBundle\Service\Mailer;
|
||||||
|
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
|
||||||
use Symfony\Component\Mailer\Envelope;
|
use Symfony\Component\Mailer\Envelope;
|
||||||
use Symfony\Component\Mailer\MailerInterface;
|
use Symfony\Component\Mailer\MailerInterface;
|
||||||
use Symfony\Component\Mime\Address;
|
use Symfony\Component\Mime\Address;
|
||||||
|
use Symfony\Component\Mime\BodyRendererInterface;
|
||||||
use Symfony\Component\Mime\Email;
|
use Symfony\Component\Mime\Email;
|
||||||
use Symfony\Component\Mime\RawMessage;
|
use Symfony\Component\Mime\RawMessage;
|
||||||
|
|
||||||
@ -22,7 +24,7 @@ class ChillMailer implements MailerInterface
|
|||||||
{
|
{
|
||||||
private string $prefix = '[Chill] ';
|
private string $prefix = '[Chill] ';
|
||||||
|
|
||||||
public function __construct(private readonly MailerInterface $initial, private readonly LoggerInterface $chillLogger) {}
|
public function __construct(private readonly MailerInterface $initial, private readonly LoggerInterface $chillLogger, private readonly BodyRendererInterface $bodyRenderer) {}
|
||||||
|
|
||||||
public function send(RawMessage $message, ?Envelope $envelope = null): void
|
public function send(RawMessage $message, ?Envelope $envelope = null): void
|
||||||
{
|
{
|
||||||
@ -30,6 +32,10 @@ class ChillMailer implements MailerInterface
|
|||||||
$message->subject($this->prefix.$message->getSubject());
|
$message->subject($this->prefix.$message->getSubject());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($message instanceof TemplatedEmail) {
|
||||||
|
$this->bodyRenderer->render($message);
|
||||||
|
}
|
||||||
|
|
||||||
$this->chillLogger->info('chill email sent', [
|
$this->chillLogger->info('chill email sent', [
|
||||||
'to' => array_map(static fn (Address $address) => $address->getAddress(), $message->getTo()),
|
'to' => array_map(static fn (Address $address) => $address->getAddress(), $message->getTo()),
|
||||||
'subject' => $message->getSubject(),
|
'subject' => $message->getSubject(),
|
||||||
|
@ -14,6 +14,8 @@ namespace Chill\MainBundle\Tests\Workflow\Messenger;
|
|||||||
use Chill\MainBundle\Entity\User;
|
use Chill\MainBundle\Entity\User;
|
||||||
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
||||||
use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository;
|
use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository;
|
||||||
|
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
||||||
|
use Chill\MainBundle\Workflow\EntityWorkflowManager;
|
||||||
use Chill\MainBundle\Workflow\Messenger\PostSendExternalMessage;
|
use Chill\MainBundle\Workflow\Messenger\PostSendExternalMessage;
|
||||||
use Chill\MainBundle\Workflow\Messenger\PostSendExternalMessageHandler;
|
use Chill\MainBundle\Workflow\Messenger\PostSendExternalMessageHandler;
|
||||||
use Chill\MainBundle\Workflow\WorkflowTransitionContextDTO;
|
use Chill\MainBundle\Workflow\WorkflowTransitionContextDTO;
|
||||||
@ -25,6 +27,7 @@ use Symfony\Bridge\Twig\Mime\TemplatedEmail;
|
|||||||
use Symfony\Component\Mailer\MailerInterface;
|
use Symfony\Component\Mailer\MailerInterface;
|
||||||
use Symfony\Component\Mime\Address;
|
use Symfony\Component\Mime\Address;
|
||||||
use Symfony\Component\Mime\BodyRendererInterface;
|
use Symfony\Component\Mime\BodyRendererInterface;
|
||||||
|
use Symfony\Component\Workflow\Registry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -50,10 +53,12 @@ class PostSendExternalMessageHandlerTest extends TestCase
|
|||||||
$mailer->send(Argument::that($this->buildCheckAddressCallback('3party@example.com')))->shouldBeCalledOnce();
|
$mailer->send(Argument::that($this->buildCheckAddressCallback('3party@example.com')))->shouldBeCalledOnce();
|
||||||
$mailer->send(Argument::that($this->buildCheckAddressCallback('external@example.com')))->shouldBeCalledOnce();
|
$mailer->send(Argument::that($this->buildCheckAddressCallback('external@example.com')))->shouldBeCalledOnce();
|
||||||
|
|
||||||
$bodyRenderer = $this->prophesize(BodyRendererInterface::class);
|
$workflowHandler = $this->prophesize(EntityWorkflowHandlerInterface::class);
|
||||||
$bodyRenderer->render(Argument::type(TemplatedEmail::class))->shouldBeCalledTimes(2);
|
$workflowHandler->getEntityTitle($entityWorkflow, Argument::any())->willReturn('title');
|
||||||
|
$workflowManager = $this->prophesize(EntityWorkflowManager::class);
|
||||||
|
$workflowManager->getHandler($entityWorkflow)->willReturn($workflowHandler->reveal());
|
||||||
|
|
||||||
$handler = new PostSendExternalMessageHandler($repository->reveal(), $mailer->reveal(), $bodyRenderer->reveal());
|
$handler = new PostSendExternalMessageHandler($repository->reveal(), $mailer->reveal(), $workflowManager->reveal());
|
||||||
|
|
||||||
$handler(new PostSendExternalMessage(1, 'fr'));
|
$handler(new PostSendExternalMessage(1, 'fr'));
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ final readonly class PostSendExternalMessageHandler implements MessageHandlerInt
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private EntityWorkflowRepository $entityWorkflowRepository,
|
private EntityWorkflowRepository $entityWorkflowRepository,
|
||||||
private MailerInterface $mailer,
|
private MailerInterface $mailer,
|
||||||
private BodyRendererInterface $bodyRenderer,
|
|
||||||
private EntityWorkflowManager $workflowManager,
|
private EntityWorkflowManager $workflowManager,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@ -56,7 +55,6 @@ final readonly class PostSendExternalMessageHandler implements MessageHandlerInt
|
|||||||
'lang' => $message->lang,
|
'lang' => $message->lang,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->bodyRenderer->render($email);
|
|
||||||
$this->mailer->send($email);
|
$this->mailer->send($email);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user