vendor/symfony/swiftmailer-bundle/DependencyInjection/Configuration.php line 92

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Bundle\SwiftmailerBundle\DependencyInjection;
  11. use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
  12. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  13. use Symfony\Component\Config\Definition\ConfigurationInterface;
  14. /**
  15.  * This class contains the configuration information for the bundle.
  16.  *
  17.  * This information is solely responsible for how the different configuration
  18.  * sections are normalized, and merged.
  19.  *
  20.  * @author Christophe Coevoet <stof@notk.org>
  21.  */
  22. class Configuration implements ConfigurationInterface
  23. {
  24.     private $debug;
  25.     /**
  26.      * @param bool $debug The kernel.debug value
  27.      */
  28.     public function __construct($debug)
  29.     {
  30.         $this->debug = (Boolean) $debug;
  31.     }
  32.     /**
  33.      * {@inheritdoc}
  34.      */
  35.     public function getConfigTreeBuilder()
  36.     {
  37.         $treeBuilder = new TreeBuilder();
  38.         $rootNode $treeBuilder->root('swiftmailer');
  39.         $rootNode
  40.             ->beforeNormalization()
  41.                 ->ifTrue(function ($v) { return is_array($v) && !array_key_exists('mailers'$v) && !array_key_exists('mailer'$v); })
  42.                 ->then(function ($v) {
  43.                     $mailer = array();
  44.                     foreach ($v as $key => $value) {
  45.                         if ('default_mailer' == $key) {
  46.                             continue;
  47.                         }
  48.                         $mailer[$key] = $v[$key];
  49.                         unset($v[$key]);
  50.                     }
  51.                     $v['default_mailer'] = isset($v['default_mailer']) ? (string) $v['default_mailer'] : 'default';
  52.                     $v['mailers'] = array($v['default_mailer'] => $mailer);
  53.                     return $v;
  54.                 })
  55.             ->end()
  56.             ->children()
  57.                 ->scalarNode('default_mailer')->end()
  58.                 ->append($this->getMailersNode())
  59.             ->end()
  60.             ->fixXmlConfig('mailer')
  61.         ;
  62.         return $treeBuilder;
  63.     }
  64.     /**
  65.      * @return ArrayNodeDefinition
  66.      */
  67.     private function getMailersNode()
  68.     {
  69.         $treeBuilder = new TreeBuilder();
  70.         $node $treeBuilder->root('mailers');
  71.         $node
  72.             ->requiresAtLeastOneElement()
  73.             ->useAttributeAsKey('name')
  74.                 ->prototype('array')
  75.             // BC layer for "delivery_address: null" (the case of a string goes through the XML normalization too)
  76.             ->beforeNormalization()
  77.                 ->ifTrue(function ($v) {
  78.                     return is_array($v) && array_key_exists('delivery_address'$v) && null === $v['delivery_address'];
  79.                 })
  80.                 ->then(function ($v) {
  81.                     @trigger_error('The swiftmailer.delivery_address configuration key is deprecated since version 2.3.10 and will be removed in 3.0. Use the swiftmailer.delivery_addresses configuration key instead (or remove the empty setting)'E_USER_DEPRECATED);
  82.                     unset($v['delivery_address']);
  83.                     if (!isset($v['delivery_addresses'])) {
  84.                         $v['delivery_addresses'] = array();
  85.                     }
  86.                     return $v;
  87.                 })
  88.             ->end()
  89.             ->children()
  90.                 ->scalarNode('url')->defaultNull()->end()
  91.                 ->scalarNode('transport')->defaultValue('smtp')->end()
  92.                 ->scalarNode('username')->defaultNull()->end()
  93.                 ->scalarNode('password')->defaultNull()->end()
  94.                 ->scalarNode('host')->defaultValue('localhost')->end()
  95.                 ->scalarNode('port')->defaultNull()->end()
  96.                 ->scalarNode('timeout')->defaultValue(30)->end()
  97.                 ->scalarNode('source_ip')->defaultNull()->end()
  98.                 ->scalarNode('local_domain')->defaultNull()->end()
  99.                 ->arrayNode('stream_options')
  100.                     ->ignoreExtraKeys(false)
  101.                     ->normalizeKeys(false)
  102.                     ->beforeNormalization()
  103.                         ->ifTrue(function ($v) { return isset($v['stream-option']); })
  104.                         ->then(function ($v) {
  105.                              $recurse = function ($array) use (&$recurse) {
  106.                                 if (isset($array['name'])) {
  107.                                     $array = array($array);
  108.                                 }
  109.                                 $n = array();
  110.                                 foreach ($array as $v) {
  111.                                     $k $v['name'];
  112.                                     if (isset($v['value'])) {
  113.                                         $n[$k] = $v['value'];
  114.                                     } elseif (isset($v['stream-option'])) {
  115.                                         $n[$k] = $recurse($v['stream-option']);
  116.                                     }
  117.                                 }
  118.                                 return $n;
  119.                             };
  120.                             return $recurse($v['stream-option']);
  121.                         })
  122.                     ->end()
  123.                     ->validate()
  124.                         ->ifTrue(function ($v) { return !method_exists('Swift_Transport_EsmtpTransport''setStreamOptions'); })
  125.                         ->thenInvalid('stream_options is only available in Swiftmailer 5.4.2 or later.')
  126.                     ->end()
  127.                 ->end()
  128.                 ->scalarNode('encryption')
  129.                     ->defaultNull()
  130.                     ->validate()
  131.                         ->ifNotInArray(array('tls''ssl'null))
  132.                         ->thenInvalid('The %s encryption is not supported')
  133.                     ->end()
  134.                 ->end()
  135.                 ->scalarNode('auth_mode')
  136.                     ->defaultNull()
  137.                     ->validate()
  138.                         ->ifNotInArray(array('plain''login''cram-md5'null))
  139.                         ->thenInvalid('The %s authentication mode is not supported')
  140.                     ->end()
  141.                 ->end()
  142.                 ->scalarNode('sender_address')->end()
  143.                 ->arrayNode('delivery_addresses')
  144.                     ->performNoDeepMerging()
  145.                     ->beforeNormalization()
  146.                         ->ifArray()
  147.                         ->then(function ($v) { return array_values($v); })
  148.                     ->end()
  149.                     ->prototype('scalar')
  150.                     ->end()
  151.                 ->end()
  152.                 ->arrayNode('antiflood')
  153.                     ->children()
  154.                         ->scalarNode('threshold')->defaultValue(99)->end()
  155.                         ->scalarNode('sleep')->defaultValue(0)->end()
  156.                     ->end()
  157.                 ->end()
  158.                 ->booleanNode('logging')->defaultValue($this->debug)->end()
  159.                 ->arrayNode('spool')
  160.                     ->children()
  161.                         ->scalarNode('type')->defaultValue('file')->end()
  162.                         ->scalarNode('path')->defaultValue('%kernel.cache_dir%/swiftmailer/spool')->end()
  163.                         ->scalarNode('id')->defaultNull()->info('Used by "service" type')->end()
  164.                     ->end()
  165.                     ->validate()
  166.                         ->ifTrue(function ($v) { return 'service' === $v['type'] && empty($v['id']); })
  167.                         ->thenInvalid('You have to configure the service id')
  168.                     ->end()
  169.                 ->end()
  170.             ->end()
  171.             ->fixXmlConfig('delivery_whitelist_pattern''delivery_whitelist')
  172.             ->fixXmlConfig('delivery_address''delivery_addresses')
  173.             ->children()
  174.                 ->arrayNode('delivery_whitelist')
  175.                     ->prototype('scalar')
  176.                     ->end()
  177.                 ->end()
  178.                 ->booleanNode('disable_delivery')->end()
  179.             ->end()
  180.         ;
  181.         return $node;
  182.     }
  183. }