Completed
Push — master ( b8cd4e...ae6a8d )
by Simonas
8s
created

ONGRSettingsExtension::setFilterManager()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
rs 9.4285
cc 1
eloc 6
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the ONGR package.
5
 *
6
 * (c) NFQ Technologies UAB <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace ONGR\SettingsBundle\DependencyInjection;
13
14
use Symfony\Component\Config\FileLocator;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\Definition;
17
use Symfony\Component\DependencyInjection\Loader;
18
use Symfony\Component\DependencyInjection\Reference;
19
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
20
21
/**
22
 * This is the class that loads and manages bundle configuration.
23
 */
24
class ONGRSettingsExtension extends Extension
25
{
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function load(array $configs, ContainerBuilder $container)
30
    {
31
        $configuration = new Configuration();
32
        $config = $this->processConfiguration($configuration, $configs);
33
34
        // Set connection settings.
35
        $container->setParameter('ongr_settings.connection.index_name', $config['connection']['index_name']);
36
        $container->setParameter('ongr_settings.connection.port', $config['connection']['port']);
37
        $container->setParameter('ongr_settings.connection.host', $config['connection']['host']);
38
        $container->setParameter('ongr_settings.connection.repository', $config['connection']['repository']);
39
40
        // Set profiles.
41
        $container->setParameter('ongr_settings.settings_container.profiles', $config['profiles']);
42
43
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
44
        $loader->load('services/sessionless_authentication.yml');
45
        $loader->load('services/flash_bag.yml');
46
        $loader->load('services/twig_extension.yml');
47
        $loader->load('services/personal_settings.yml');
48
        $loader->load('services/general_settings.yml');
49
50
        $loader->load('filter_container.yml');
51
52
        if (isset($config['admin_user'])) {
53
            $this->loadPersonalSettings($config['admin_user'], $container);
54
        }
55
56
        $this->injectPersonalSettings($container);
57
58
        $this->setFilterManager($container);
59
    }
60
61
    /**
62
     * Sets parameters for admin user.
63
     *
64
     * @param array            $config
65
     * @param ContainerBuilder $containerBuilder
66
     */
67
    protected function loadPersonalSettings($config, ContainerBuilder $containerBuilder)
68
    {
69
        $containerBuilder->setParameter('ongr_settings.settings.categories', $config['categories']);
70
        $containerBuilder->setParameter('ongr_settings.settings.settings', $config['settings']);
71
    }
72
73
    /**
74
     * Sets parameters for settings provider.
75
     *
76
     * @param array            $config
77
     * @param ContainerBuilder $containerBuilder
78
     */
79
    protected function loadSettingsProvider($config, ContainerBuilder $containerBuilder)
80
    {
81
        $containerBuilder->setParameter('ongr_settings.settings.categories', $config['categories']);
82
    }
83
84
    /**
85
     * Sets parameters for filter manager.
86
     *
87
     * @param ContainerBuilder $container
88
     */
89
    protected function setFilterManager(ContainerBuilder $container)
90
    {
91
        $definition = new Definition(
92
            'ONGR\FilterManagerBundle\Search\FilterManager',
93
            [
94
                new Reference('ongr_settings.filter_container'),
95
                new Reference($container->getParameter('ongr_settings.connection.repository')),
96
            ]
97
        );
98
        $container->setDefinition('ongr_settings.filter_manager', $definition);
99
    }
100
101
    /**
102
     * Injects additional General User settings to service container.
103
     *
104
     * @param ContainerBuilder $container
105
     */
106
    protected function injectPersonalSettings(ContainerBuilder $container)
107
    {
108
        // Add category for ONGR Settings settings.
109
        $categories = $container->getParameter('ongr_settings.settings.categories');
110
        $categories['ongr_settings_settings'] = [
111
            'name' => 'ONGR Settings',
112
            'description' => 'Special settings for ONGR Settings',
113
        ];
114
        $categories['ongr_settings_profiles'] = [
115
            'name' => 'ONGR Settings profiles',
116
            'description' => 'Profiles for profile settings',
117
        ];
118
        $container->setParameter('ongr_settings.settings.categories', $categories);
119
120
        // Inject custom General User settings.
121
        $settings = $container->getParameter('ongr_settings.settings.settings');
122
        $settings['ongr_settings_live_settings'] = [
123
            'name' => 'Show settings widget in frontend',
124
            'category' => 'ongr_settings_settings',
125
            'description' => 'Enables Edit button in shop frontend',
126
        ];
127
        $container->setParameter('ongr_settings.settings.settings', $settings);
128
    }
129
}
130