Configuration::addMessageComposersNode()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 25
nc 1
nop 1
dl 0
loc 28
ccs 0
cts 25
cp 0
crap 2
rs 9.52
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace FH\Bundle\MailerBundle\DependencyInjection;
6
7
use FH\Bundle\MailerBundle\Composer\ComposerIdentifiers;
8
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
9
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
10
use Symfony\Component\Config\Definition\ConfigurationInterface;
11
12
final class Configuration implements ConfigurationInterface
13
{
14
    public const CONFIG_ID = 'fh_mailer';
15
16
    public function getConfigTreeBuilder(): TreeBuilder
17
    {
18
        $treeBuilder = new TreeBuilder(self::CONFIG_ID);
19
        $rootNode = $this->getRootNode(self::CONFIG_ID, $treeBuilder);
20
21
        $this->addMessageComposersNode($rootNode);
22
23
        return $treeBuilder;
24
    }
25
26
    private function addMessageComposersNode(ArrayNodeDefinition $node): void
27
    {
28
        /* @phpstan-ignore-next-line */
29
        $node
30
            ->children()
31
                ->arrayNode(ComposerIdentifiers::TEMPLATED_EMAIL)
32
                    ->useAttributeAsKey('identifier')
33
                        ->prototype('array')
34
                            ->children()
35
                                ->scalarNode('subject')->defaultNull()->end()
36
                                ->scalarNode('html_template')->defaultNull()->end()
37
                                ->scalarNode('text_template')->defaultNull()->end()
38
                                ->append($this->getParticipantsNode())
39
                            ->end()
40
                        ->end()
41
                    ->end()
42
                ->end()
43
            ->children()
44
                ->arrayNode(ComposerIdentifiers::EMAIL)
45
                    ->useAttributeAsKey('identifier')
46
                        ->prototype('array')
47
                            ->children()
48
                                ->scalarNode('subject')->defaultNull()->end()
49
                                ->append($this->getParticipantsNode())
50
                            ->end()
51
                        ->end()
52
                    ->end()
53
                ->end();
54
    }
55
56
    private function getParticipantsNode(): ArrayNodeDefinition
57
    {
58
        $node = $this->getRootNode('participants');
59
60
        $node
61
            ->children()
62
                ->append($this->getEmailNode('sender'))
63
                ->append($this->getEmailNode('from', true))
64
                ->append($this->getEmailNode('reply_to', true))
65
                ->append($this->getEmailNode('to', true))
66
                ->append($this->getEmailNode('cc', true))
67
                ->append($this->getEmailNode('bcc', true))
68
            ->end();
69
70
        return $node;
71
    }
72
73
    private function getEmailNode(string $rootName, bool $multiple = false): ArrayNodeDefinition
74
    {
75
        $node = $this->getRootNode($rootName);
76
77
        if ($multiple) {
78
            /* @phpstan-ignore-next-line */
79
            $node
80
                ->prototype('array')
81
                    ->children()
82
                        ->scalarNode('address')->isRequired()->end()
83
                        ->scalarNode('name')->cannotBeEmpty()->end()
84
                    ->end()
85
                ->end();
86
        } else {
87
            /* @phpstan-ignore-next-line */
88
            $node
89
                ->children()
90
                    ->scalarNode('address')->isRequired()->end()
91
                    ->scalarNode('name')->cannotBeEmpty()->end()
92
                ->end();
93
        }
94
95
        return $node;
96
    }
97
98
    private function getRootNode(string $rootNodeName, TreeBuilder $treeBuilder = null): ArrayNodeDefinition
99
    {
100
        if (!$treeBuilder instanceof TreeBuilder) {
101
            $treeBuilder = new TreeBuilder($rootNodeName);
102
        }
103
104
        /* @phpstan-ignore-next-line */
105
        return $treeBuilder->getRootNode();
106
    }
107
}
108