Configuration   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 94
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 61
dl 0
loc 94
ccs 0
cts 60
cp 0
rs 10
c 0
b 0
f 0
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A addMessageComposersNode() 0 28 1
A getConfigTreeBuilder() 0 8 1
A getEmailNode() 0 23 2
A getParticipantsNode() 0 15 1
A getRootNode() 0 8 2
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