Completed
Pull Request — master (#91)
by Piotr
02:36
created

FSIAdminSecurityExtension   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 0
loc 104
c 0
b 0
f 0
wmc 9
lcom 1
cbo 5
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 17 1
A prepend() 0 8 1
A setTemplateParameters() 0 12 3
A setModelParameters() 0 4 1
A setActivationParameters() 0 16 1
A setPasswordResetParameters() 0 20 1
A setChangePasswordParameters() 0 11 1
1
<?php
2
3
/**
4
 * (c) FSi sp. z o.o. <[email protected]>
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
namespace FSi\Bundle\AdminSecurityBundle\DependencyInjection;
11
12
use Symfony\Component\Config\FileLocator;
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
15
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
16
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
17
18
/**
19
 * @author Norbert Orzechowicz <[email protected]>
20
 */
21
class FSIAdminSecurityExtension extends Extension implements PrependExtensionInterface
22
{
23
    /**
24
     * {@inheritdoc}
25
     */
26
    public function load(array $configs, ContainerBuilder $container)
27
    {
28
        $configuration = new Configuration();
29
        $config = $this->processConfiguration($configuration, $configs);
30
31
        $container->setParameter('admin_security.storage', $config['storage']);
32
        $container->setParameter('admin_security.firewall_name', $config['firewall_name']);
33
        $this->setTemplateParameters($container, 'admin_security.templates', $config['templates']);
34
        $this->setModelParameters($container, $config['model']);
35
        $this->setActivationParameters($container, $config['activation']);
36
        $this->setPasswordResetParameters($container, $config['password_reset']);
37
        $this->setChangePasswordParameters($container, $config['change_password']);
38
39
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
40
        $loader->load('services.xml');
41
        $loader->load(sprintf('%s.xml', $config['storage']));
42
    }
43
44
    public function prepend(ContainerBuilder $container)
45
    {
46
        $container->prependExtensionConfig('fsi_admin', [
47
            'templates' => [
48
                'datagrid_theme' => '@FSiAdminSecurity/Admin/datagrid.html.twig'
49
            ]
50
        ]);
51
    }
52
53
    /**
54
     * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
55
     * @param array $config
56
     */
57
    protected function setTemplateParameters(ContainerBuilder $container, $prefix, $config = [])
58
    {
59
        foreach ($config as $key => $value) {
60
            $parameterName = join('.', [$prefix, $key]);
61
            if (is_array($value)) {
62
                $this->setTemplateParameters($container, $parameterName, $value);
63
                continue;
64
            }
65
66
            $container->setParameter($parameterName, $value);
67
        }
68
    }
69
70
    protected function setModelParameters(ContainerBuilder $container, $model)
71
    {
72
        $container->setParameter('admin_security.model.user', $model['user']);
73
    }
74
75
    private function setActivationParameters(ContainerBuilder $container, $model)
76
    {
77
        $container->setParameter('admin_security.activation.token_ttl', $model['token_ttl']);
78
        $container->setParameter('admin_security.activation.token_length', $model['token_length']);
79
        $container->setParameter('admin_security.activation.mailer.template', $model['mailer']['template']);
80
        $container->setParameter('admin_security.activation.mailer.from', $model['mailer']['from']);
81
        $container->setParameter('admin_security.activation.mailer.reply_to', $model['mailer']['reply_to']);
82
        $container->setParameter(
83
            'admin_security.activation.change_password_form.type',
84
            $model['change_password_form']['type']
85
        );
86
        $container->setParameter(
87
            'admin_security.activation.change_password_form.validation_groups',
88
            $model['change_password_form']['validation_groups']
89
        );
90
    }
91
92
    private function setPasswordResetParameters(ContainerBuilder $container, $model)
93
    {
94
        $container->setParameter('admin_security.password_reset.token_ttl', $model['token_ttl']);
95
        $container->setParameter('admin_security.password_reset.token_length', $model['token_length']);
96
        $container->setParameter('admin_security.password_reset.mailer.template', $model['mailer']['template']);
97
        $container->setParameter('admin_security.password_reset.mailer.from', $model['mailer']['from']);
98
        $container->setParameter('admin_security.password_reset.mailer.reply_to', $model['mailer']['reply_to']);
99
        $container->setParameter(
100
            'admin_security.password_reset.request_form.type',
101
            $model['request_form']['type']
102
        );
103
        $container->setParameter(
104
            'admin_security.password_reset.change_password_form.type',
105
            $model['change_password_form']['type']
106
        );
107
        $container->setParameter(
108
            'admin_security.password_reset.change_password_form.validation_groups',
109
            $model['change_password_form']['validation_groups']
110
        );
111
    }
112
113
    private function setChangePasswordParameters(ContainerBuilder $container, $model)
114
    {
115
        $container->setParameter(
116
            'admin_security.change_password.form.type',
117
            $model['form']['type']
118
        );
119
        $container->setParameter(
120
            'admin_security.change_password.form.validation_groups',
121
            $model['form']['validation_groups']
122
        );
123
    }
124
}
125