Completed
Push — master ( ae5e03...0447ee )
by Jeroen
10:35 queued 04:37
created

DependencyInjection/KunstmaanAdminExtension.php (2 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
        // Manually register the KunstmaanAdminBundle folder as a FosUser override for symfony 4.
120 14
        if ($container->hasParameter('kernel.project_dir') && file_exists($container->getParameter('kernel.project_dir').'/templates/bundles/KunstmaanAdminBundle')) {
121
            $twigConfig['paths'][] = ['value' => '%kernel.project_dir%/templates/bundles/KunstmaanAdminBundle', 'namespace' => 'FOSUser'];
0 ignored issues
show
Coding Style Comprehensibility introduced by Jeroen Thora
$twigConfig was never initialized. Although not strictly required by PHP, it is generally a good practice to add $twigConfig = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
122
        }
123 14
        $twigConfig['paths'][] = ['value' => \dirname(__DIR__).'/Resources/views', 'namespace' => 'FOSUser'];
0 ignored issues
show
The variable $twigConfig does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
124 14
        $container->prependExtensionConfig('twig', $twigConfig);
125
126
        // NEXT_MAJOR: Remove templating dependency
127 14
        $frameworkConfig['templating']['engines'] = ['twig'];
128 14
        $container->prependExtensionConfig('framework', $frameworkConfig);
129
130 14
        $configs = $container->getExtensionConfig($this->getAlias());
131 14
        $this->processConfiguration(new Configuration(), $configs);
132 14
    }
133
134
    /**
135
     * {@inheritdoc}
136
     */
137 15
    public function getNamespace()
138
    {
139 15
        return 'http://bundles.kunstmaan.be/schema/dic/admin';
140
    }
141
142
    /**
143
     * {@inheritdoc}
144
     */
145
    public function getXsdValidationBasePath()
146
    {
147
        return __DIR__.'/../Resources/config/schema';
148
    }
149
150 1
    private function addSimpleMenuAdaptor(ContainerBuilder $container, array $menuItems)
151
    {
152 1
        $definition = new Definition('Kunstmaan\AdminBundle\Helper\Menu\SimpleMenuAdaptor', [
153 1
            new Reference('security.authorization_checker'),
154 1
            $menuItems,
155
        ]);
156 1
        $definition->addTag('kunstmaan_admin.menu.adaptor');
157
158 1
        $container->setDefinition('kunstmaan_admin.menu.adaptor.simple', $definition);
159 1
    }
160
161
    /**
162
     * @param string $urlSlice
163
     *
164
     * @return string
165
     */
166 14
    protected function normalizeUrlSlice($urlSlice)
167
    {
168
        /* Get rid of exotic characters that would break the url */
169 14
        $urlSlice = filter_var($urlSlice, FILTER_SANITIZE_URL);
170
171
        /* Remove leading and trailing slashes */
172 14
        $urlSlice = trim($urlSlice, '/');
173
174
        /* Make sure our $urlSlice is literally used in our regex */
175 14
        $urlSlice = preg_quote($urlSlice);
176
177 14
        return $urlSlice;
178
    }
179
180 14 View Code Duplication
    private function addWebsiteTitleParameter(ContainerBuilder $container, array $config)
181
    {
182 14
        $websiteTitle = $config['website_title'];
183 14
        if (null === $config['website_title']) {
184 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);
185
186 2
            $websiteTitle = $container->hasParameter('websitetitle') ? $container->getParameter('websitetitle') : '';
187
        }
188
189 14
        $container->setParameter('kunstmaan_admin.website_title', $websiteTitle);
190 14
    }
191
192 14 View Code Duplication
    private function addMultiLanguageParameter(ContainerBuilder $container, array $config)
193
    {
194 14
        $multilanguage = $config['multi_language'];
195 14
        if (null === $multilanguage) {
196 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);
197
198 2
            $multilanguage = $container->hasParameter('multilanguage') ? $container->getParameter('multilanguage') : '';
199
        }
200
201 14
        $container->setParameter('kunstmaan_admin.multi_language', $multilanguage);
202 14
    }
203
204 14 View Code Duplication
    private function addRequiredLocalesParameter(ContainerBuilder $container, array $config)
205
    {
206 14
        $requiredLocales = $config['required_locales'];
207 14
        if (null === $config['required_locales']) {
208 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);
209
210 2
            $requiredLocales = $container->hasParameter('requiredlocales') ? $container->getParameter('requiredlocales') : '';
211
        }
212
213 14
        $container->setParameter('kunstmaan_admin.required_locales', $requiredLocales);
214 14
        $container->setParameter('requiredlocales', $requiredLocales); //Keep old parameter for to keep BC with routing config
215 14
    }
216
217 14 View Code Duplication
    private function addDefaultLocaleParameter(ContainerBuilder $container, array $config)
218
    {
219 14
        $defaultLocale = $config['default_locale'];
220 14
        if (null === $config['default_locale']) {
221 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);
222
223 2
            $defaultLocale = $container->hasParameter('defaultlocale') ? $container->getParameter('defaultlocale') : '';
224
        }
225
226 14
        $container->setParameter('kunstmaan_admin.default_locale', $defaultLocale);
227 14
    }
228
}
229