mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-10-31 17:28:23 +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:
		| @@ -12,9 +12,11 @@ declare(strict_types=1); | ||||
| namespace Chill\MainBundle\Service\Mailer; | ||||
|  | ||||
| use Psr\Log\LoggerInterface; | ||||
| use Symfony\Bridge\Twig\Mime\TemplatedEmail; | ||||
| use Symfony\Component\Mailer\Envelope; | ||||
| use Symfony\Component\Mailer\MailerInterface; | ||||
| use Symfony\Component\Mime\Address; | ||||
| use Symfony\Component\Mime\BodyRendererInterface; | ||||
| use Symfony\Component\Mime\Email; | ||||
| use Symfony\Component\Mime\RawMessage; | ||||
|  | ||||
| @@ -22,7 +24,7 @@ class ChillMailer implements MailerInterface | ||||
| { | ||||
|     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 | ||||
|     { | ||||
| @@ -30,6 +32,10 @@ class ChillMailer implements MailerInterface | ||||
|             $message->subject($this->prefix.$message->getSubject()); | ||||
|         } | ||||
|  | ||||
|         if ($message instanceof TemplatedEmail) { | ||||
|             $this->bodyRenderer->render($message); | ||||
|         } | ||||
|  | ||||
|         $this->chillLogger->info('chill email sent', [ | ||||
|             'to' => array_map(static fn (Address $address) => $address->getAddress(), $message->getTo()), | ||||
|             'subject' => $message->getSubject(), | ||||
|   | ||||
| @@ -14,6 +14,8 @@ namespace Chill\MainBundle\Tests\Workflow\Messenger; | ||||
| use Chill\MainBundle\Entity\User; | ||||
| use Chill\MainBundle\Entity\Workflow\EntityWorkflow; | ||||
| 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\PostSendExternalMessageHandler; | ||||
| use Chill\MainBundle\Workflow\WorkflowTransitionContextDTO; | ||||
| @@ -25,6 +27,7 @@ use Symfony\Bridge\Twig\Mime\TemplatedEmail; | ||||
| use Symfony\Component\Mailer\MailerInterface; | ||||
| use Symfony\Component\Mime\Address; | ||||
| use Symfony\Component\Mime\BodyRendererInterface; | ||||
| use Symfony\Component\Workflow\Registry; | ||||
|  | ||||
| /** | ||||
|  * @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('external@example.com')))->shouldBeCalledOnce(); | ||||
|  | ||||
|         $bodyRenderer = $this->prophesize(BodyRendererInterface::class); | ||||
|         $bodyRenderer->render(Argument::type(TemplatedEmail::class))->shouldBeCalledTimes(2); | ||||
|         $workflowHandler = $this->prophesize(EntityWorkflowHandlerInterface::class); | ||||
|         $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')); | ||||
|  | ||||
|   | ||||
| @@ -25,7 +25,6 @@ final readonly class PostSendExternalMessageHandler implements MessageHandlerInt | ||||
|     public function __construct( | ||||
|         private EntityWorkflowRepository $entityWorkflowRepository, | ||||
|         private MailerInterface $mailer, | ||||
|         private BodyRendererInterface $bodyRenderer, | ||||
|         private EntityWorkflowManager $workflowManager, | ||||
|     ) {} | ||||
|  | ||||
| @@ -56,7 +55,6 @@ final readonly class PostSendExternalMessageHandler implements MessageHandlerInt | ||||
|                 'lang' => $message->lang, | ||||
|             ]); | ||||
|  | ||||
|         $this->bodyRenderer->render($email); | ||||
|         $this->mailer->send($email); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user