Completed
Pull Request — master (#1213)
by
unknown
01:34
created

LiipImagineExtension   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 8
dl 0
loc 120
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A addResolverFactory() 0 4 1
A addLoaderFactory() 0 4 1
A getConfiguration() 0 4 1
A load() 0 47 4
A loadResolvers() 0 4 1
A loadLoaders() 0 4 1
A createFactories() 0 6 2
1
<?php
2
3
/*
4
 * This file is part of the `liip/LiipImagineBundle` project.
5
 *
6
 * (c) https://github.com/liip/LiipImagineBundle/graphs/contributors
7
 *
8
 * For the full copyright and license information, please view the LICENSE.md
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Liip\ImagineBundle\DependencyInjection;
13
14
use Liip\ImagineBundle\DependencyInjection\Factory\Loader\LoaderFactoryInterface;
15
use Liip\ImagineBundle\DependencyInjection\Factory\Resolver\ResolverFactoryInterface;
16
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
17
use Liip\ImagineBundle\Imagine\Data\DataManager;
18
use Liip\ImagineBundle\Imagine\Filter\FilterManager;
19
use Symfony\Component\Config\FileLocator;
20
use Symfony\Component\DependencyInjection\Alias;
21
use Symfony\Component\DependencyInjection\ContainerBuilder;
22
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
23
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
24
25
class LiipImagineExtension extends Extension
26
{
27
    /**
28
     * @var ResolverFactoryInterface[]
29
     */
30
    private $resolversFactories = [];
31
32
    /**
33
     * @var LoaderFactoryInterface[]
34
     */
35
    private $loadersFactories = [];
36
37
    /**
38
     * @param ResolverFactoryInterface $resolverFactory
39
     */
40
    public function addResolverFactory(ResolverFactoryInterface $resolverFactory)
41
    {
42
        $this->resolversFactories[$resolverFactory->getName()] = $resolverFactory;
43
    }
44
45
    /**
46
     * @param LoaderFactoryInterface $loaderFactory
47
     */
48
    public function addLoaderFactory(LoaderFactoryInterface $loaderFactory)
49
    {
50
        $this->loadersFactories[$loaderFactory->getName()] = $loaderFactory;
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     */
56
    public function getConfiguration(array $config, ContainerBuilder $container)
57
    {
58
        return new Configuration($this->resolversFactories, $this->loadersFactories);
59
    }
60
61
    /**
62
     * @see \Symfony\Component\DependencyInjection\Extension.ExtensionInterface::load()
63
     *
64
     * @param array            $configs
65
     * @param ContainerBuilder $container
66
     */
67
    public function load(array $configs, ContainerBuilder $container)
68
    {
69
        $config = $this->processConfiguration(
70
            $this->getConfiguration($configs, $container),
0 ignored issues
show
Bug introduced by
It seems like $this->getConfiguration($configs, $container) can be null; however, processConfiguration() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
71
            $configs
72
        );
73
74
        $container->setParameter('liip_imagine.resolvers', $config['resolvers']);
75
        $container->setParameter('liip_imagine.loaders', $config['loaders']);
76
77
        $this->loadResolvers($config['resolvers'], $container);
78
        $this->loadLoaders($config['loaders'], $container);
79
80
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
81
        $loader->load('imagine.xml');
82
        $loader->load('commands.xml');
83
84
        if ($config['enqueue']) {
85
            $loader->load('enqueue.xml');
86
        }
87
88
        if ($config['templating']) {
89
            $loader->load('templating.xml');
90
        }
91
92
        $container->setParameter('liip_imagine.driver_service', 'liip_imagine.'.$config['driver']);
93
94
        $container->setAlias('liip_imagine', new Alias('liip_imagine.'.$config['driver']));
95
        $container->setAlias(CacheManager::class, new Alias('liip_imagine.cache.manager', false));
96
        $container->setAlias(DataManager::class, new Alias('liip_imagine.data.manager', false));
97
        $container->setAlias(FilterManager::class, new Alias('liip_imagine.filter.manager', false));
98
99
        $container->setParameter('liip_imagine.cache.resolver.default', $config['cache']);
100
101
        $container->setParameter('liip_imagine.default_image', $config['default_image']);
102
103
        $container->setParameter('liip_imagine.filter_sets', $config['filter_sets']);
104
        $container->setParameter('liip_imagine.binary.loader.default', $config['data_loader']);
105
106
        $container->setParameter('liip_imagine.controller.filter_action', $config['controller']['filter_action']);
107
        $container->setParameter('liip_imagine.controller.filter_runtime_action', $config['controller']['filter_runtime_action']);
108
109
        $container->setParameter('twig.form.resources', array_merge(
110
            $container->hasParameter('twig.form.resources') ? $container->getParameter('twig.form.resources') : [],
111
            ['@LiipImagine/Form/form_div_layout.html.twig']
112
        ));
113
    }
114
115
    /**
116
     * @param array            $config
117
     * @param ContainerBuilder $container
118
     */
119
    private function loadResolvers(array $config, ContainerBuilder $container)
120
    {
121
        $this->createFactories($this->resolversFactories, $config, $container);
122
    }
123
124
    /**
125
     * @param array            $config
126
     * @param ContainerBuilder $container
127
     */
128
    private function loadLoaders(array $config, ContainerBuilder $container)
129
    {
130
        $this->createFactories($this->loadersFactories, $config, $container);
131
    }
132
133
    /**
134
     * @param array            $factories
135
     * @param array            $configurations
136
     * @param ContainerBuilder $container
137
     */
138
    private function createFactories(array $factories, array $configurations, ContainerBuilder $container)
139
    {
140
        foreach ($configurations as $name => $conf) {
141
            $factories[key($conf)]->create($container, $name, $conf[key($conf)]);
142
        }
143
    }
144
}
145