Completed
Push — master ( d27170...133b57 )
by Kamil
17:22
created

SyliusResourceExtension::prepend()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 11
rs 9.4285
cc 2
eloc 6
nc 2
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
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 Sylius\Bundle\ResourceBundle\DependencyInjection;
13
14
use Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\DriverProvider;
15
use Sylius\Component\Resource\Metadata\Metadata;
16
use Symfony\Component\Config\Definition\Processor;
17
use Symfony\Component\Config\FileLocator;
18
use Symfony\Component\DependencyInjection\ContainerBuilder;
19
use Symfony\Component\DependencyInjection\Extension\Extension;
20
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
21
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
22
23
/**
24
 * @author Paweł Jędrzejewski <[email protected]>
25
 * @author Gonzalo Vilaseca <[email protected]>
26
 */
27
class SyliusResourceExtension extends Extension
28
{
29
    /**
30
     * {@inheritdoc}
31
     */
32
    public function load(array $config, ContainerBuilder $container)
33
    {
34
        $processor = new Processor();
35
        $config = $processor->processConfiguration(new Configuration(), $config);
36
37
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
38
        $configFiles = [
39
            'services.xml',
40
            'controller.xml',
41
            'storage.xml',
42
            'routing.xml',
43
            'twig.xml',
44
        ];
45
46
        foreach ($configFiles as $configFile) {
47
            $loader->load($configFile);
48
        }
49
50
        $bundles = $container->getParameter('kernel.bundles');
51
        if (array_key_exists('SyliusGridBundle', $bundles)) {
52
            $loader->load('grid.xml');
53
        }
54
55
        if ($config['translation']['enabled']) {
56
            $loader->load('translation.xml');
57
58
            $container->setParameter('sylius.translation.default_locale', $config['translation']['default_locale']);
59
            $container->setAlias('sylius.translation.locale_provider', $config['translation']['locale_provider']);
60
        }
61
62
        foreach ($config['resources'] as $alias => $resourceConfig) {
63
            $metadata = Metadata::fromAliasAndConfiguration($alias, $resourceConfig);
64
65
            $resources = $container->hasParameter('sylius.resources') ? $container->getParameter('sylius.resources') : [];
66
            $resources = array_merge($resources, [$alias => $resourceConfig]);
67
            $container->setParameter('sylius.resources', $resources);
68
69
            DriverProvider::get($metadata)->load($container, $metadata);
70
71
            if ($metadata->hasParameter('translation')) {
72
                $alias = $alias.'_translation';
73
                $resourceConfig = array_merge(['driver' => $resourceConfig['driver']], $resourceConfig['translation']);
74
75
                $resources = $container->hasParameter('sylius.resources') ? $container->getParameter('sylius.resources') : [];
76
                $resources = array_merge($resources, [$alias => $resourceConfig]);
77
                $container->setParameter('sylius.resources', $resources);
78
79
                $metadata = Metadata::fromAliasAndConfiguration($alias, $resourceConfig);
80
81
                DriverProvider::get($metadata)->load($container, $metadata);
82
            }
83
        }
84
85
        $container->setParameter('sylius.resource.settings', $config['settings']);
86
        $container->setAlias('sylius.resource_controller.authorization_checker', $config['authorization_checker']);
87
    }
88
}
89