From 48733b927d3ebe6437f6f7cadf4acaea65a4909c Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 6 Jun 2011 14:38:20 +0200 Subject: [PATCH] [Swiftmailer] added the swiftmailer.plugin tag to automatically register Swiftmailer plugins --- .../Compiler/RegisterPluginsPass.php | 36 +++++++++++++++++++ .../SwiftmailerExtension.php | 10 +++--- .../Resources/config/swiftmailer.xml | 4 +-- .../SwiftmailerBundle/SwiftmailerBundle.php | 8 +++++ 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/Compiler/RegisterPluginsPass.php diff --git a/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/Compiler/RegisterPluginsPass.php b/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/Compiler/RegisterPluginsPass.php new file mode 100644 index 000000000000..63a12dc121f9 --- /dev/null +++ b/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/Compiler/RegisterPluginsPass.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\SwiftmailerBundle\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; + +/** + * RegisterPluginsPass registers Swiftmailer plugins. + * + * @author Fabien Potencier + */ +class RegisterPluginsPass implements CompilerPassInterface +{ + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition('swiftmailer.mailer')) { + return; + } + + $definition = $container->findDefinition('swiftmailer.transport'); + foreach ($container->findTaggedServiceIds('swiftmailer.plugin') as $id => $args) { + $definition->addMethodCall('registerPlugin', array(new Reference($id))); + } + } +} diff --git a/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/SwiftmailerExtension.php b/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/SwiftmailerExtension.php index 1c1512a346d1..293e5d6eab34 100644 --- a/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/SwiftmailerExtension.php +++ b/src/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/SwiftmailerExtension.php @@ -96,30 +96,30 @@ public function load(array $configs, ContainerBuilder $container) $container->setParameter('swiftmailer.plugin.antiflood.threshold', $config['antiflood']['threshold']); $container->setParameter('swiftmailer.plugin.antiflood.sleep', $config['antiflood']['sleep']); - $container->findDefinition('swiftmailer.transport')->addMethodCall('registerPlugin', array(new Reference('swiftmailer.plugin.antiflood'))); + $container->getDefinition('swiftmailer.plugin.antiflood')->addTag('swiftmailer.plugin'); } if ($config['logging']) { - $container->findDefinition('swiftmailer.transport')->addMethodCall('registerPlugin', array(new Reference('swiftmailer.plugin.messagelogger'))); + $container->getDefinition('swiftmailer.plugin.messagelogger')->addTag('swiftmailer.plugin'); $container->findDefinition('swiftmailer.data_collector')->addTag('data_collector', array('template' => 'SwiftmailerBundle:Collector:swiftmailer', 'id' => 'swiftmailer')); } if (isset($config['sender_address']) && $config['sender_address']) { $container->setParameter('swiftmailer.sender_address', $config['sender_address']); - $container->findDefinition('swiftmailer.transport')->addMethodCall('registerPlugin', array(new Reference('swiftmailer.plugin.impersonate'))); + $container->getDefinition('swiftmailer.plugin.impersonate')->addTag('swiftmailer.plugin'); } else { $container->setParameter('swiftmailer.sender_address', null); } if (isset($config['delivery_address']) && $config['delivery_address']) { $container->setParameter('swiftmailer.single_address', $config['delivery_address']); - $container->findDefinition('swiftmailer.transport')->addMethodCall('registerPlugin', array(new Reference('swiftmailer.plugin.redirecting'))); + $container->getDefinition('swiftmailer.plugin.redirecting')->addTag('swiftmailer.plugin'); } else { $container->setParameter('swiftmailer.single_address', null); } if (isset($config['disable_delivery']) && $config['disable_delivery']) { - $container->findDefinition('swiftmailer.transport')->addMethodCall('registerPlugin', array(new Reference('swiftmailer.plugin.blackhole'))); + $container->getDefinition('swiftmailer.plugin.blackhole')->addTag('swiftmailer.plugin'); } } diff --git a/src/Symfony/Bundle/SwiftmailerBundle/Resources/config/swiftmailer.xml b/src/Symfony/Bundle/SwiftmailerBundle/Resources/config/swiftmailer.xml index 3385ffbd9282..e3be16501d66 100644 --- a/src/Symfony/Bundle/SwiftmailerBundle/Resources/config/swiftmailer.xml +++ b/src/Symfony/Bundle/SwiftmailerBundle/Resources/config/swiftmailer.xml @@ -67,7 +67,7 @@ - + %swiftmailer.plugin.antiflood.threshold% %swiftmailer.plugin.antiflood.sleep% @@ -76,7 +76,7 @@ %swiftmailer.sender_address% - + diff --git a/src/Symfony/Bundle/SwiftmailerBundle/SwiftmailerBundle.php b/src/Symfony/Bundle/SwiftmailerBundle/SwiftmailerBundle.php index cbc2f18aa3fc..8456bbf59aa4 100644 --- a/src/Symfony/Bundle/SwiftmailerBundle/SwiftmailerBundle.php +++ b/src/Symfony/Bundle/SwiftmailerBundle/SwiftmailerBundle.php @@ -12,6 +12,8 @@ namespace Symfony\Bundle\SwiftmailerBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Bundle\SwiftmailerBundle\DependencyInjection\Compiler\RegisterPluginsPass; /** * Bundle. @@ -20,4 +22,10 @@ */ class SwiftmailerBundle extends Bundle { + public function build(ContainerBuilder $container) + { + parent::build($container); + + $container->addCompilerPass(new RegisterPluginsPass()); + } }