Skip to content

Commit

Permalink
Adding SwiftMailerLogger
Browse files Browse the repository at this point in the history
  • Loading branch information
loevgaard committed Sep 16, 2024
1 parent 75314e4 commit 22d3b73
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/DependencyInjection/SetonoSyliusMailerExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,12 @@ public function load(array $configs, ContainerBuilder $container): void

$loader->load('services.xml');

if (!ContainerBuilder::willBeAvailable('symfony/mailer', MailerInterface::class, ['symfony/framework-bundle'])) {
if (ContainerBuilder::willBeAvailable('symfony/mailer', MailerInterface::class, ['symfony/framework-bundle'])) {

Check failure on line 35 in src/DependencyInjection/SetonoSyliusMailerExtension.php

View workflow job for this annotation

GitHub Actions / Static Code Analysis (PHP8.2 | Deps: lowest | SF~5.4.0)

UndefinedClass

src/DependencyInjection/SetonoSyliusMailerExtension.php:35:65: UndefinedClass: Class, interface or enum named Symfony\Component\Mailer\MailerInterface does not exist (see https://psalm.dev/019)

Check failure on line 35 in src/DependencyInjection/SetonoSyliusMailerExtension.php

View workflow job for this annotation

GitHub Actions / Static Code Analysis (PHP8.2 | Deps: lowest | SF~5.4.0)

MixedArgument

src/DependencyInjection/SetonoSyliusMailerExtension.php:35:65: MixedArgument: Argument 2 of Symfony\Component\DependencyInjection\ContainerBuilder::willBeAvailable cannot be mixed, expecting string (see https://psalm.dev/030)
$loader->load('services/conditional/symfony_mailer.xml');
}

if (ContainerBuilder::willBeAvailable('swiftmailer/swiftmailer', \Swift_Mailer::class, ['symfony/swiftmailer-bundle'])) {
$loader->load('services/conditional/swiftmailer.xml');
}
}
}
57 changes: 57 additions & 0 deletions src/EventSubscriber/SwiftMailerLoggerSubscriber.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

declare(strict_types=1);

namespace Setono\SyliusMailerPlugin\EventSubscriber;

use Doctrine\Persistence\ManagerRegistry;
use Setono\Doctrine\ORMTrait;
use Setono\SyliusMailerPlugin\Model\SentEmailInterface;
use Sylius\Component\Resource\Factory\FactoryInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

final class SwiftMailerLoggerSubscriber implements EventSubscriberInterface
{
use ORMTrait;

public function __construct(
ManagerRegistry $managerRegistry,
private readonly FactoryInterface $emailFactory,
) {
$this->managerRegistry = $managerRegistry;
}

public static function getSubscribedEvents(): array
{
return [
'sendPerformed' => 'log',
];
}

public function log(\Swift_Events_SendEvent $event): void
{
$message = $event->getMessage();

/** @var SentEmailInterface $sentEmail */
$sentEmail = $this->emailFactory->createNew();

$sentEmail->setSubject($message->getSubject());
$sentEmail->setHtmlBody($message->getBody());

/** @psalm-suppress MixedArgumentTypeCoercion */
$sentEmail->setTo(array_keys($message->getTo()));

/** @psalm-suppress MixedArgumentTypeCoercion */
$sentEmail->setReplyTo(array_keys($message->getReplyTo()));

Check failure on line 45 in src/EventSubscriber/SwiftMailerLoggerSubscriber.php

View workflow job for this annotation

GitHub Actions / Static Code Analysis (PHP8.1 | Deps: highest | SF~5.4.0)

InvalidArgument

src/EventSubscriber/SwiftMailerLoggerSubscriber.php:45:43: InvalidArgument: Argument 1 of array_keys expects array<array-key, mixed>, but string provided (see https://psalm.dev/004)

Check failure on line 45 in src/EventSubscriber/SwiftMailerLoggerSubscriber.php

View workflow job for this annotation

GitHub Actions / Static Code Analysis (PHP8.2 | Deps: lowest | SF~5.4.0)

InvalidArgument

src/EventSubscriber/SwiftMailerLoggerSubscriber.php:45:43: InvalidArgument: Argument 1 of array_keys expects array<array-key, mixed>, but string provided (see https://psalm.dev/004)

Check failure on line 45 in src/EventSubscriber/SwiftMailerLoggerSubscriber.php

View workflow job for this annotation

GitHub Actions / Static Code Analysis (PHP8.2 | Deps: highest | SF~5.4.0)

InvalidArgument

src/EventSubscriber/SwiftMailerLoggerSubscriber.php:45:43: InvalidArgument: Argument 1 of array_keys expects array<array-key, mixed>, but string provided (see https://psalm.dev/004)

/** @psalm-suppress MixedArgumentTypeCoercion */
$sentEmail->setCc(array_keys($message->getCc()));

/** @psalm-suppress MixedArgumentTypeCoercion */
$sentEmail->setBcc(array_keys($message->getBcc()));

$manager = $this->getManager($sentEmail);
$manager->persist($sentEmail);
$manager->flush();
}
}
12 changes: 12 additions & 0 deletions src/Resources/config/services/conditional/swiftmailer.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="Setono\SyliusMailerPlugin\EventSubscriber\SwiftMailerLoggerSubscriber">
<argument type="service" id="doctrine"/>
<argument type="service" id="setono_sylius_mailer.factory.sent_email"/>

<tag name="kernel.event_subscriber"/>
</service>
</services>
</container>

0 comments on commit 22d3b73

Please sign in to comment.