Completed
Pull Request — master (#1217)
by
unknown
01:30
created

LiipImagineExtension::addResolverFactory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
nc 1
nop 1
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\Definition;
23
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
24
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
25
use Symfony\Component\Mime\MimeTypeGuesserInterface;
26
use Symfony\Component\Mime\MimeTypes;
27
28
class LiipImagineExtension extends Extension
29
{
30
    /**
31
     * @var ResolverFactoryInterface[]
32
     */
33
    private $resolversFactories = [];
34
35
    /**
36
     * @var LoaderFactoryInterface[]
37
     */
38
    private $loadersFactories = [];
39
40
    /**
41
     * @param ResolverFactoryInterface $resolverFactory
42
     */
43
    public function addResolverFactory(ResolverFactoryInterface $resolverFactory)
44
    {
45
        $this->resolversFactories[$resolverFactory->getName()] = $resolverFactory;
46
    }
47
48
    /**
49
     * @param LoaderFactoryInterface $loaderFactory
50
     */
51
    public function addLoaderFactory(LoaderFactoryInterface $loaderFactory)
52
    {
53
        $this->loadersFactories[$loaderFactory->getName()] = $loaderFactory;
54
    }
55
56
    /**
57
     * {@inheritdoc}
58
     */
59
    public function getConfiguration(array $config, ContainerBuilder $container)
60
    {
61
        return new Configuration($this->resolversFactories, $this->loadersFactories);
62
    }
63
64
    /**
65
     * @see \Symfony\Component\DependencyInjection\Extension.ExtensionInterface::load()
66
     *
67
     * @param array            $configs
68
     * @param ContainerBuilder $container
69
     */
70
    public function load(array $configs, ContainerBuilder $container)
71
    {
72
        $config = $this->processConfiguration(
73
            $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...
74
            $configs
75
        );
76
77
        if (interface_exists(MimeTypeGuesserInterface::class)) {
78
            $mimeTypes = new Definition(MimeTypes::class);
79
            $mimeTypes->setFactory([MimeTypes::class, 'getDefault']);
80
81
            $container->setDefinition('liip_imagine.mime_types', $mimeTypes);
82
        }
83
84
        $container->setParameter('liip_imagine.resolvers', $config['resolvers']);
85
        $container->setParameter('liip_imagine.loaders', $config['loaders']);
86
87
        $this->loadResolvers($config['resolvers'], $container);
88
        $this->loadLoaders($config['loaders'], $container);
89
90
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
91
        $loader->load('imagine.xml');
92
        $loader->load('commands.xml');
93
94
        if ($config['enqueue']) {
95
            $loader->load('enqueue.xml');
96
        }
97
98
        $container->setParameter('liip_imagine.driver_service', 'liip_imagine.'.$config['driver']);
99
100
        $container->setAlias('liip_imagine', new Alias('liip_imagine.'.$config['driver']));
101
        $container->setAlias(CacheManager::class, new Alias('liip_imagine.cache.manager', false));
102
        $container->setAlias(DataManager::class, new Alias('liip_imagine.data.manager', false));
103
        $container->setAlias(FilterManager::class, new Alias('liip_imagine.filter.manager', false));
104
105
        $container->setParameter('liip_imagine.cache.resolver.default', $config['cache']);
106
107
        $container->setParameter('liip_imagine.default_image', $config['default_image']);
108
109
        $container->setParameter('liip_imagine.filter_sets', $config['filter_sets']);
110
        $container->setParameter('liip_imagine.binary.loader.default', $config['data_loader']);
111
112
        $container->setParameter('liip_imagine.controller.filter_action', $config['controller']['filter_action']);
113
        $container->setParameter('liip_imagine.controller.filter_runtime_action', $config['controller']['filter_runtime_action']);
114
115
        $container->setParameter('twig.form.resources', array_merge(
116
            $container->hasParameter('twig.form.resources') ? $container->getParameter('twig.form.resources') : [],
117
            ['@LiipImagine/Form/form_div_layout.html.twig']
118
        ));
119
120
        if ($container->hasDefinition('liip_imagine.mime_types')) {
121
            $mimeTypes = $container->getDefinition('liip_imagine.mime_types');
122
            $container->getDefinition('liip_imagine.binary.mime_type_guesser')
123
                ->replaceArgument(0, $mimeTypes);
124
125
            $container->getDefinition('liip_imagine.data.manager')
126
                ->replaceArgument(1, $mimeTypes);
127
        }
128
    }
129
130
    /**
131
     * @param array            $config
132
     * @param ContainerBuilder $container
133
     */
134
    private function loadResolvers(array $config, ContainerBuilder $container)
135
    {
136
        $this->createFactories($this->resolversFactories, $config, $container);
137
    }
138
139
    /**
140
     * @param array            $config
141
     * @param ContainerBuilder $container
142
     */
143
    private function loadLoaders(array $config, ContainerBuilder $container)
144
    {
145
        $this->createFactories($this->loadersFactories, $config, $container);
146
    }
147
148
    /**
149
     * @param array            $factories
150
     * @param array            $configurations
151
     * @param ContainerBuilder $container
152
     */
153
    private function createFactories(array $factories, array $configurations, ContainerBuilder $container)
154
    {
155
        foreach ($configurations as $name => $conf) {
156
            $factories[key($conf)]->create($container, $name, $conf[key($conf)]);
157
        }
158
    }
159
}
160