Completed
Push — master ( 06c1ce...67d37c )
by Jeroen
06:20
created

DependencyInjection/KunstmaanAdminExtension.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\AdminBundle\DependencyInjection;
4
5
use FOS\UserBundle\Form\Type\ResettingFormType;
6
use InvalidArgumentException;
7
use Kunstmaan\AdminBundle\Helper\Menu\MenuAdaptorInterface;
8
use Symfony\Component\Config\FileLocator;
9
use Symfony\Component\DependencyInjection\ContainerBuilder;
10
use Symfony\Component\DependencyInjection\Definition;
11
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
12
use Symfony\Component\DependencyInjection\Loader;
13
use Symfony\Component\DependencyInjection\Reference;
14
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
15
16
/**
17
 * This is the class that loads and manages your bundle configuration
18
 *
19
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
20
 */
21
class KunstmaanAdminExtension extends Extension implements PrependExtensionInterface
22
{
23
    /**
24
     * Loads a specific configuration.
25
     *
26
     * @param array            $configs   An array of configuration values
27
     * @param ContainerBuilder $container A ContainerBuilder instance
28
     *
29
     * @throws InvalidArgumentException When provided tag is not defined in this extension
30
     */
31 14
    public function load(array $configs, ContainerBuilder $container)
32
    {
33 14
        $container->setParameter('version_checker.url', 'https://cms.kunstmaan.be/version-check');
34 14
        $container->setParameter('version_checker.timeframe', 60 * 60 * 24);
35 14
        $container->setParameter('version_checker.enabled', true);
36
37 14
        $configuration = new Configuration();
38 14
        $config = $this->processConfiguration($configuration, $configs);
39
40 14
        if (\array_key_exists('dashboard_route', $config)) {
41 1
            $container->setParameter('kunstmaan_admin.dashboard_route', $config['dashboard_route']);
42
        }
43 14
        if (\array_key_exists('admin_password', $config)) {
44 1
            $container->setParameter('kunstmaan_admin.admin_password', $config['admin_password']);
45
        }
46 14
        $container->setParameter('kunstmaan_admin.admin_locales', $config['admin_locales']);
47 14
        $container->setParameter('kunstmaan_admin.default_admin_locale', $config['default_admin_locale']);
48
49 14
        $container->setParameter('kunstmaan_admin.session_security.ip_check', $config['session_security']['ip_check']);
50 14
        $container->setParameter('kunstmaan_admin.session_security.user_agent_check', $config['session_security']['user_agent_check']);
51
52 14
        $container->setParameter('kunstmaan_admin.admin_prefix', $this->normalizeUrlSlice($config['admin_prefix']));
53
54 14
        $container->setParameter('kunstmaan_admin.admin_exception_excludes', $config['admin_exception_excludes']);
55
56 14
        $container->setParameter('kunstmaan_admin.google_signin.enabled', $config['google_signin']['enabled']);
57 14
        $container->setParameter('kunstmaan_admin.google_signin.client_id', $config['google_signin']['client_id']);
58 14
        $container->setParameter('kunstmaan_admin.google_signin.client_secret', $config['google_signin']['client_secret']);
59 14
        $container->setParameter('kunstmaan_admin.google_signin.hosted_domains', $config['google_signin']['hosted_domains']);
60
61 14
        $container->setParameter('kunstmaan_admin.password_restrictions.min_digits', $config['password_restrictions']['min_digits']);
62 14
        $container->setParameter('kunstmaan_admin.password_restrictions.min_uppercase', $config['password_restrictions']['min_uppercase']);
63 14
        $container->setParameter('kunstmaan_admin.password_restrictions.min_special_characters', $config['password_restrictions']['min_special_characters']);
64 14
        $container->setParameter('kunstmaan_admin.password_restrictions.min_length', $config['password_restrictions']['min_length']);
65 14
        $container->setParameter('kunstmaan_admin.password_restrictions.max_length', $config['password_restrictions']['max_length']);
66 14
        $container->setParameter('kunstmaan_admin.enable_toolbar_helper', $config['enable_toolbar_helper']);
67 14
        $container->setParameter('kunstmaan_admin.toolbar_firewall_names', !empty($config['provider_keys']) ? $config['provider_keys'] : $config['toolbar_firewall_names']);
68 14
        $container->setParameter('kunstmaan_admin.admin_firewall_name', $config['admin_firewall_name']);
69
70 14
        $container->registerForAutoconfiguration(MenuAdaptorInterface::class)
71 14
            ->addTag('kunstmaan_admin.menu.adaptor');
72
73 14
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
74 14
        $loader->load('services.yml');
75 14
        $loader->load('commands.yml');
76
77 14
        if (!empty($config['enable_console_exception_listener']) && $config['enable_console_exception_listener']) {
78 14
            $loader->load('console_listener.yml');
79
        }
80
81 14
        if (0 !== \count($config['menu_items'])) {
82 1
            $this->addSimpleMenuAdaptor($container, $config['menu_items']);
83
        }
84
85 14
        $this->addWebsiteTitleParameter($container, $config);
86 14
        $this->addMultiLanguageParameter($container, $config);
87 14
        $this->addRequiredLocalesParameter($container, $config);
88 14
        $this->addDefaultLocaleParameter($container, $config);
89 14
    }
90
91 14
    public function prepend(ContainerBuilder $container)
92
    {
93 14
        $knpMenuConfig['twig'] = true; // set to false to disable the Twig extension and the TwigRenderer
94 14
        $knpMenuConfig['templating'] = false; // if true, enables the helper for PHP templates
95 14
        $knpMenuConfig['default_renderer'] = 'twig'; // The renderer to use, list is also available by default
96 14
        $container->prependExtensionConfig('knp_menu', $knpMenuConfig);
97
98 14
        $fosUserOriginalConfig = $container->getExtensionConfig('fos_user');
99 14
        if (!isset($fosUserOriginalConfig[0]['db_driver'])) {
100 14
            $fosUserConfig['db_driver'] = 'orm'; // other valid values are 'mongodb', 'couchdb'
101
        }
102 14
        $fosUserConfig['from_email']['address'] = '[email protected]';
103 14
        $fosUserConfig['from_email']['sender_name'] = 'KunstmaanCMS';
104 14
        $fosUserConfig['firewall_name'] = 'main';
105 14
        $fosUserConfig['user_class'] = 'Kunstmaan\AdminBundle\Entity\User';
106 14
        $fosUserConfig['group']['group_class'] = 'Kunstmaan\AdminBundle\Entity\Group';
107 14
        $fosUserConfig['resetting']['token_ttl'] = 86400;
108
        // Use this node only if you don't want the global email address for the resetting email
109 14
        $fosUserConfig['resetting']['email']['from_email']['address'] = '[email protected]';
110 14
        $fosUserConfig['resetting']['email']['from_email']['sender_name'] = 'KunstmaanCMS';
111 14
        $fosUserConfig['resetting']['email']['template'] = '@FOSUser/Resetting/email.txt.twig';
112 14
        $fosUserConfig['resetting']['form']['type'] = ResettingFormType::class;
113 14
        $fosUserConfig['resetting']['form']['name'] = 'fos_user_resetting_form';
114 14
        $fosUserConfig['resetting']['form']['validation_groups'] = ['ResetPassword'];
115
116 14
        $fosUserConfig['service']['mailer'] = 'fos_user.mailer.twig_swift';
117 14
        $container->prependExtensionConfig('fos_user', $fosUserConfig);
118
119 14
        $twigConfig['paths'][] = ['value' => \dirname(__DIR__).'/Resources/views', 'namespace' => 'FOSUser'];
120 14
        $container->prependExtensionConfig('twig', $twigConfig);
121
122
        // NEXT_MAJOR: Remove templating dependency
123 14
        $frameworkConfig['templating']['engines'] = ['twig'];
124 14
        $container->prependExtensionConfig('framework', $frameworkConfig);
125
126 14
        $configs = $container->getExtensionConfig($this->getAlias());
127 14
        $this->processConfiguration(new Configuration(), $configs);
128 14
    }
129
130
    /**
131
     * {@inheritdoc}
132
     */
133 15
    public function getNamespace()
134
    {
135 15
        return 'http://bundles.kunstmaan.be/schema/dic/admin';
136
    }
137
138
    /**
139
     * {@inheritdoc}
140
     */
141
    public function getXsdValidationBasePath()
142
    {
143
        return __DIR__.'/../Resources/config/schema';
144
    }
145
146 1
    private function addSimpleMenuAdaptor(ContainerBuilder $container, array $menuItems)
147
    {
148 1
        $definition = new Definition('Kunstmaan\AdminBundle\Helper\Menu\SimpleMenuAdaptor', [
149 1
            new Reference('security.authorization_checker'),
150 1
            $menuItems,
151
        ]);
152 1
        $definition->addTag('kunstmaan_admin.menu.adaptor');
153
154 1
        $container->setDefinition('kunstmaan_admin.menu.adaptor.simple', $definition);
155 1
    }
156
157
    /**
158
     * @param string $urlSlice
159
     *
160
     * @return string
161
     */
162 14
    protected function normalizeUrlSlice($urlSlice)
163
    {
164
        /* Get rid of exotic characters that would break the url */
165 14
        $urlSlice = filter_var($urlSlice, FILTER_SANITIZE_URL);
166
167
        /* Remove leading and trailing slashes */
168 14
        $urlSlice = trim($urlSlice, '/');
169
170
        /* Make sure our $urlSlice is literally used in our regex */
171 14
        $urlSlice = preg_quote($urlSlice);
172
173 14
        return $urlSlice;
174
    }
175
176 14 View Code Duplication
    private function addWebsiteTitleParameter(ContainerBuilder $container, array $config)
177
    {
178 14
        $websiteTitle = $config['website_title'];
179 14
        if (null === $config['website_title']) {
180 2
            @trigger_error('Not providing a value for the "kunstmaan_admin.website_title" config is deprecated since KunstmaanAdminBundle 5.2, this config value will be required in KunstmaanAdminBundle 6.0.', E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
181
182 2
            $websiteTitle = $container->hasParameter('websitetitle') ? $container->getParameter('websitetitle') : '';
183
        }
184
185 14
        $container->setParameter('kunstmaan_admin.website_title', $websiteTitle);
186 14
    }
187
188 14 View Code Duplication
    private function addMultiLanguageParameter(ContainerBuilder $container, array $config)
189
    {
190 14
        $multilanguage = $config['multi_language'];
191 14
        if (null === $multilanguage) {
192 2
            @trigger_error('Not providing a value for the "kunstmaan_admin.multi_language" config is deprecated since KunstmaanAdminBundle 5.2, this config value will be required in KunstmaanAdminBundle 6.0.', E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
193
194 2
            $multilanguage = $container->hasParameter('multilanguage') ? $container->getParameter('multilanguage') : '';
195
        }
196
197 14
        $container->setParameter('kunstmaan_admin.multi_language', $multilanguage);
198 14
    }
199
200 14 View Code Duplication
    private function addRequiredLocalesParameter(ContainerBuilder $container, array $config)
201
    {
202 14
        $requiredLocales = $config['required_locales'];
203 14
        if (null === $config['required_locales']) {
204 2
            @trigger_error('Not providing a value for the "kunstmaan_admin.required_locales" config is deprecated since KunstmaanAdminBundle 5.2, this config value will be required in KunstmaanAdminBundle 6.0.', E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
205
206 2
            $requiredLocales = $container->hasParameter('requiredlocales') ? $container->getParameter('requiredlocales') : '';
207
        }
208
209 14
        $container->setParameter('kunstmaan_admin.required_locales', $requiredLocales);
210 14
        $container->setParameter('requiredlocales', $requiredLocales); //Keep old parameter for to keep BC with routing config
211 14
    }
212
213 14 View Code Duplication
    private function addDefaultLocaleParameter(ContainerBuilder $container, array $config)
214
    {
215 14
        $defaultLocale = $config['default_locale'];
216 14
        if (null === $config['default_locale']) {
217 2
            @trigger_error('Not providing a value for the "kunstmaan_admin.default_locale" config is deprecated since KunstmaanAdminBundle 5.2, this config value will be required in KunstmaanAdminBundle 6.0.', E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
218
219 2
            $defaultLocale = $container->hasParameter('defaultlocale') ? $container->getParameter('defaultlocale') : '';
220
        }
221
222 14
        $container->setParameter('kunstmaan_admin.default_locale', $defaultLocale);
223 14
    }
224
}
225