vendor/sylius/mailer-bundle/src/Bundle/DependencyInjection/SyliusMailerExtension.php line 76

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace Sylius\Bundle\MailerBundle\DependencyInjection;
  12. use Sylius\Bundle\MailerBundle\Renderer\Adapter\EmailTwigAdapter;
  13. use Sylius\Bundle\MailerBundle\Sender\Adapter\SwiftMailerAdapter;
  14. use Symfony\Component\Config\FileLocator;
  15. use Symfony\Component\DependencyInjection\ChildDefinition;
  16. use Symfony\Component\DependencyInjection\ContainerBuilder;
  17. use Symfony\Component\DependencyInjection\Extension\Extension;
  18. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  19. use Symfony\Component\DependencyInjection\Reference;
  20. final class SyliusMailerExtension extends Extension
  21. {
  22.     /**
  23.      * {@inheritdoc}
  24.      */
  25.     public function load(array $configsContainerBuilder $container): void
  26.     {
  27.         $config $this->processConfiguration($this->getConfiguration([], $container), $configs);
  28.         $loader = new XmlFileLoader($container, new FileLocator(__DIR__ '/../Resources/config'));
  29.         $configFiles = [
  30.             'services.xml',
  31.         ];
  32.         foreach ($configFiles as $configFile) {
  33.             $loader->load($configFile);
  34.         }
  35.         $this->configureSenderAdapter($container$config);
  36.         $this->configureRendererAdapter($container$config);
  37.         $container->setParameter('sylius.mailer.sender_name'$config['sender']['name']);
  38.         $container->setParameter('sylius.mailer.sender_address'$config['sender']['address']);
  39.         $templates $config['templates'] ?? ['Default' => '@SyliusMailer/default.html.twig'];
  40.         $container->setParameter('sylius.mailer.emails'$config['emails']);
  41.         $container->setParameter('sylius.mailer.templates'$templates);
  42.     }
  43.     /**
  44.      * {@inheritdoc}
  45.      */
  46.     public function getConfiguration(array $configContainerBuilder $container): Configuration
  47.     {
  48.         $configuration = new Configuration();
  49.         $container->addObjectResource($configuration);
  50.         return $configuration;
  51.     }
  52.     private function configureSenderAdapter(ContainerBuilder $container, array $config): void
  53.     {
  54.         $bundles $container->getParameter('kernel.bundles');
  55.         $defaultSenderAdapter 'sylius.email_sender.adapter.default';
  56.         if (array_key_exists('SwiftmailerBundle'$bundles)) {
  57.             $swiftmailerAdapter = new ChildDefinition('sylius.email_sender.adapter.abstract');
  58.             $swiftmailerAdapter->setClass(SwiftMailerAdapter::class);
  59.             $swiftmailerAdapter->setArguments([new Reference('mailer'), new Reference('event_dispatcher')]);
  60.             $swiftmailerAdapter->setPrivate(false);
  61.             $container->setDefinition('sylius.email_sender.adapter.swiftmailer'$swiftmailerAdapter);
  62.             $defaultSenderAdapter 'sylius.email_sender.adapter.swiftmailer';
  63.         }
  64.         $container->setAlias('sylius.email_sender.adapter'$config['sender_adapter'] ?? $defaultSenderAdapter);
  65.     }
  66.     private function configureRendererAdapter(ContainerBuilder $container, array $config): void
  67.     {
  68.         $bundles $container->getParameter('kernel.bundles');
  69.         $defaultRendererAdapter 'sylius.email_renderer.adapter.default';
  70.         if (array_key_exists('TwigBundle'$bundles)) {
  71.             $twigAdapter = new ChildDefinition('sylius.email_renderer.adapter.abstract');
  72.             $twigAdapter->setClass(EmailTwigAdapter::class);
  73.             $twigAdapter->setArguments([new Reference('twig'), new Reference('event_dispatcher')]);
  74.             $twigAdapter->setPrivate(false);
  75.             $container->setDefinition('sylius.email_renderer.adapter.twig'$twigAdapter);
  76.             $defaultRendererAdapter 'sylius.email_renderer.adapter.twig';
  77.         }
  78.         $container->setAlias('sylius.email_renderer.adapter'$config['renderer_adapter'] ?? $defaultRendererAdapter);
  79.     }
  80. }