Completed
Push — master ( 770316...74fc07 )
by Jeroen
09:08 queued 02:44
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://bundles.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'] = 'FOSUserBundle: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 14
        $container->prependExtensionConfig('fos_user', $fosUserConfig);
116
117 14
        $monologConfig['handlers']['main']['type'] = 'rotating_file';
118 14
        $monologConfig['handlers']['main']['path'] = sprintf('%s/%s', $container->getParameter('kernel.logs_dir'), $container->getParameter('kernel.environment'));
119 14
        $monologConfig['handlers']['main']['level'] = 'debug';
120 14
        $container->prependExtensionConfig('monolog', $monologConfig);
121
122 14
        $twigConfig['paths'][] = ['value' => dirname(__DIR__).'/Resources/views', 'namespace' => 'FOSUser'];
123 14
        $container->prependExtensionConfig('twig', $twigConfig);
124
125 14
        $frameworkConfig['templating']['engines'] = ['twig'];
126 14
        $container->prependExtensionConfig('framework', $frameworkConfig);
127
128 14
        $configs = $container->getExtensionConfig($this->getAlias());
129 14
        $this->processConfiguration(new Configuration(), $configs);
130 14
    }
131
132
    /**
133
     * {@inheritdoc}
134
     */
135 15
    public function getNamespace()
136
    {
137 15
        return 'http://bundles.kunstmaan.be/schema/dic/admin';
138
    }
139
140
    /**
141
     * {@inheritdoc}
142
     */
143
    public function getXsdValidationBasePath()
144
    {
145
        return __DIR__.'/../Resources/config/schema';
146
    }
147
148 1
    private function addSimpleMenuAdaptor(ContainerBuilder $container, array $menuItems)
149
    {
150 1
        $definition = new Definition('Kunstmaan\AdminBundle\Helper\Menu\SimpleMenuAdaptor', [
151 1
            new Reference('security.authorization_checker'),
152 1
            $menuItems,
153
        ]);
154 1
        $definition->addTag('kunstmaan_admin.menu.adaptor');
155
156 1
        $container->setDefinition('kunstmaan_admin.menu.adaptor.simple', $definition);
157 1
    }
158
159
    /**
160
     * @param string $urlSlice
161
     *
162
     * @return string
163
     */
164 14
    protected function normalizeUrlSlice($urlSlice)
165
    {
166
        /* Get rid of exotic characters that would break the url */
167 14
        $urlSlice = filter_var($urlSlice, FILTER_SANITIZE_URL);
168
169
        /* Remove leading and trailing slashes */
170 14
        $urlSlice = trim($urlSlice, '/');
171
172
        /* Make sure our $urlSlice is literally used in our regex */
173 14
        $urlSlice = preg_quote($urlSlice);
174
175 14
        return $urlSlice;
176
    }
177
178 14 View Code Duplication
    private function addWebsiteTitleParameter(ContainerBuilder $container, array $config)
179
    {
180 14
        $websiteTitle = $config['website_title'];
181 14
        if (null === $config['website_title']) {
182 13
            @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...
183
184 13
            $websiteTitle = $container->hasParameter('websitetitle') ? $container->getParameter('websitetitle') : '';
185
        }
186
187 14
        $container->setParameter('kunstmaan_admin.website_title', $websiteTitle);
188 14
    }
189
190 14 View Code Duplication
    private function addMultiLanguageParameter(ContainerBuilder $container, array $config)
191
    {
192 14
        $multilanguage = $config['multi_language'];
193 14
        if (null === $multilanguage) {
194 12
            @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...
195
196 12
            $multilanguage = $container->hasParameter('multilanguage') ? $container->getParameter('multilanguage') : '';
197
        }
198
199 14
        $container->setParameter('kunstmaan_admin.multi_language', $multilanguage);
200 14
    }
201
202 14 View Code Duplication
    private function addRequiredLocalesParameter(ContainerBuilder $container, array $config)
203
    {
204 14
        $requiredLocales = $config['required_locales'];
205 14
        if (null === $config['required_locales']) {
206 13
            @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...
207
208 13
            $requiredLocales = $container->hasParameter('requiredlocales') ? $container->getParameter('requiredlocales') : '';
209
        }
210
211 14
        $container->setParameter('kunstmaan_admin.required_locales', $requiredLocales);
212 14
        $container->setParameter('requiredlocales', $requiredLocales); //Keep old parameter for to keep BC with routing config
213 14
    }
214
215 14 View Code Duplication
    private function addDefaultLocaleParameter(ContainerBuilder $container, array $config)
216
    {
217 14
        $defaultLocale = $config['default_locale'];
218 14
        if (null === $config['default_locale']) {
219 13
            @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...
220
221 13
            $defaultLocale = $container->hasParameter('defaultlocale') ? $container->getParameter('defaultlocale') : '';
222
        }
223
224 14
        $container->setParameter('kunstmaan_admin.default_locale', $defaultLocale);
225 14
    }
226
}
227