Configuration   A
last analyzed

Complexity

Total Complexity 26

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 62
c 1
b 0
f 0
dl 0
loc 112
rs 10
wmc 26

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getRootNode() 0 7 2
D getProvidersNode() 0 67 23
A getConfigTreeBuilder() 0 26 1
1
<?php
2
3
namespace DH\AuditorBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
6
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
7
use Symfony\Component\Config\Definition\ConfigurationInterface;
8
9
class Configuration implements ConfigurationInterface
10
{
11
    /**
12
     * Generates the configuration tree builder.
13
     */
14
    public function getConfigTreeBuilder(): TreeBuilder
15
    {
16
        $treeBuilder = new TreeBuilder('dh_auditor');
17
18
        $this->getRootNode($treeBuilder, 'dh_auditor')
19
            ->children()
20
                ->booleanNode('enabled')
21
                    ->defaultTrue()
22
                ->end()
23
                ->scalarNode('timezone')
24
                    ->defaultValue('UTC')
25
                ->end()
26
                ->scalarNode('user_provider')
27
                    ->defaultValue('dh_auditor.user_provider')
28
                ->end()
29
                ->scalarNode('security_provider')
30
                    ->defaultValue('dh_auditor.security_provider')
31
                ->end()
32
                ->scalarNode('role_checker')
33
                    ->defaultValue('dh_auditor.role_checker')
34
                ->end()
35
                ->append($this->getProvidersNode())
36
            ->end()
37
        ;
38
39
        return $treeBuilder;
40
    }
41
42
    /**
43
     * Proxy to get root node for Symfony < 4.2.
44
     */
45
    protected function getRootNode(TreeBuilder $treeBuilder, string $name): ArrayNodeDefinition
46
    {
47
        if (method_exists($treeBuilder, 'getRootNode')) {
48
            return $treeBuilder->getRootNode();
49
        }
50
51
        return $treeBuilder->root($name);
52
    }
53
54
    private function getProvidersNode(): ArrayNodeDefinition
55
    {
56
        $treeBuilder = new TreeBuilder('providers');
57
58
        return $this->getRootNode($treeBuilder, 'providers')
59
            ->requiresAtLeastOneElement()
60
            ->useAttributeAsKey('name')
61
            ->variablePrototype()
62
                ->validate()
63
                    ->ifEmpty()
64
                    ->thenInvalid('Invalid provider configuration %s')
65
                ->end()
66
            ->end()
67
68
            ->validate()
69
                ->always()
70
                ->then(static function ($v) {
71
                    if (!\array_key_exists('doctrine', $v)) {
72
                        $v['doctrine'] = [];
73
                    }
74
75
                    // "table_prefix" is empty by default.
76
                    if (!\array_key_exists('table_prefix', $v['doctrine']) || !\is_string($v['doctrine']['table_prefix'])) {
77
                        $v['doctrine']['table_prefix'] = '';
78
                    }
79
80
                    // "table_suffix" is "_audit" by default.
81
                    if (!\array_key_exists('table_suffix', $v['doctrine']) || !\is_string($v['doctrine']['table_suffix'])) {
82
                        $v['doctrine']['table_suffix'] = '_audit';
83
                    }
84
85
                    // "entities" are "enabled" by default.
86
                    if (\array_key_exists('entities', $v['doctrine']) && \is_array($v['doctrine']['entities'])) {
87
                        foreach ($v['doctrine']['entities'] as $entity => $options) {
88
                            if (null === $options || !\array_key_exists('enabled', $options)) {
89
                                $v['doctrine']['entities'][$entity]['enabled'] = true;
90
                            }
91
                        }
92
                    }
93
94
                    // "doctrine.orm.default_entity_manager" is the default "storage_services"
95
                    if (\array_key_exists('storage_services', $v['doctrine']) && \is_string($v['doctrine']['storage_services'])) {
96
                        $v['doctrine']['storage_services'] = [$v['doctrine']['storage_services']];
97
                    } elseif (!\array_key_exists('storage_services', $v['doctrine']) || !\is_array($v['doctrine']['storage_services'])) {
98
                        $v['doctrine']['storage_services'] = ['doctrine.orm.default_entity_manager'];
99
                    }
100
101
                    // "doctrine.orm.default_entity_manager" is the default "auditing_services"
102
                    if (\array_key_exists('auditing_services', $v['doctrine']) && \is_string($v['doctrine']['auditing_services'])) {
103
                        $v['doctrine']['auditing_services'] = [$v['doctrine']['auditing_services']];
104
                    } elseif (!\array_key_exists('auditing_services', $v['doctrine']) || !\is_array($v['doctrine']['auditing_services'])) {
105
                        $v['doctrine']['auditing_services'] = ['doctrine.orm.default_entity_manager'];
106
                    }
107
108
                    // "viewer" is disabled by default
109
                    if (!\array_key_exists('viewer', $v['doctrine']) || !\is_bool($v['doctrine']['viewer'])) {
110
                        $v['doctrine']['viewer'] = false;
111
                    }
112
113
                    // "storage_mapper" is null by default
114
                    if (!\array_key_exists('storage_mapper', $v['doctrine']) || !\is_string($v['doctrine']['storage_mapper'])) {
115
                        $v['doctrine']['storage_mapper'] = null;
116
                    }
117
118
                    return $v;
119
                })
120
            ->end()
121
        ;
122
    }
123
}
124