Test Failed
Push — release/3.x ( 447600...4272fa )
by
unknown
02:22 queued 10s
created

ZichtUrlExtension   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 91
rs 10
c 0
b 0
f 0
wmc 19

2 Methods

Rating   Name   Duplication   Size   Complexity  
A loadAliasingConfig() 0 16 4
F load() 0 56 15
1
<?php
2
/**
3
 * @author Gerard van Helden <[email protected]>
4
 * @copyright Zicht Online <http://zicht.nl>
5
 */
6
7
namespace Zicht\Bundle\UrlBundle\DependencyInjection;
8
9
use Symfony\Component\DependencyInjection\Alias;
10
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
11
use Symfony\Component\DependencyInjection\ContainerBuilder;
12
use Symfony\Component\Config\FileLocator;
13
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
14
use Symfony\Component\DependencyInjection\Reference;
15
16
/**
17
 * DI Extension for the URL services.
18
 */
19
class ZichtUrlExtension extends Extension
20
{
21
    /**
22
     * Responds to the twig configuration parameter.
23
     *
24
     * @param array            $configs
25
     * @param ContainerBuilder $container
26
     * @return void
27
     */
28
    public function load(array $configs, ContainerBuilder $container)
29
    {
30
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
31
        $loader->load('services.xml');
32
33
        $config = $this->processConfiguration(new Configuration(), $configs);
34
35
        if (!empty($config['unalias_subscriber'])) {
36
            // deprecation, remove in next major
37
            trigger_error("unalias_subscriber is no longer used. This has moved to form transformers.", E_USER_DEPRECATED);
38
        }
39
40
41
        if (isset($config['static_ref'])) {
42
            $container->getDefinition('zicht_url.static_refs')->addMethodCall('addAll', array($config['static_ref']));
43
        }
44
        if (!empty($config['aliasing']) && $config['aliasing']['enabled'] === true) {
45
            $this->loadAliasingConfig($container, $config['aliasing'], $loader);
46
            $container->setAlias('zicht_url.sitemap_provider', new Alias('zicht_url.alias_sitemap_provider'));
47
        } else {
48
            $container->setAlias('zicht_url.sitemap_provider', new Alias('zicht_url.provider'));
49
        }
50
        if (!empty($config['logging'])) {
51
            $loader->load('logging.xml');
52
        }
53
        if (!empty($config['admin'])) {
54
            $loader->load('admin.xml');
55
        }
56
        if (!empty($aliasingConfig) && $config['caching']['enabled'] === true) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $aliasingConfig seems to never exist and therefore empty should always be true.
Loading history...
57
            $loader->load('cache.xml');
58
            $subscriberDefinition = $container->getDefinition('zicht_url.cache_subscriber');
59
            $subscriberDefinition->replaceArgument(1, $config['caching']['entities']);
60
        }
61
        if (!empty($config['db_static_ref']) && $config['db_static_ref']['enabled'] === true) {
62
            $loader->load('db.xml');
63
        }
64
65
        if ($container->hasDefinition('zicht_url.aliasing')) {
66
            $container->getDefinition('zicht_url.twig_extension')->addArgument(new Reference('zicht_url.aliasing'));
67
        }
68
69
        if ($container->hasDefinition('zicht_url.mapper.html')) {
70
            $container->getDefinition('zicht_url.mapper.html')->addMethodCall('addAttributes', [$config['html_attributes']]);
71
        }
72
73
        if ($container->hasDefinition('zicht_url.listener.strict_public_url')) {
74
            $container->getDefinition('zicht_url.listener.strict_public_url')->replaceArgument(0, $config['strict_public_url']);
75
        }
76
77
        if ($container->hasDefinition('zicht_url.validator.contains_url_alias')) {
78
            $container->getDefinition('zicht_url.validator.contains_url_alias')->replaceArgument(1, $config['strict_public_url']);
79
        }
80
81
        $formResources = $container->getParameter('twig.form.resources');
82
        $formResources[]= 'ZichtUrlBundle::form_theme.html.twig';
83
        $container->setParameter('twig.form.resources', $formResources);
84
    }
85
86
    /**
87
     * Load the aliasing config.
88
     *
89
     * @param ContainerBuilder $container
90
     * @param array $aliasingConfig
91
     * @param XmlFileLoader $loader
92
     * @return void
93
     */
94
    protected function loadAliasingConfig(ContainerBuilder $container, $aliasingConfig, $loader)
95
    {
96
        $loader->load('aliasing.xml');
97
98
        $listenerDefinition = $container->getDefinition('zicht_url.aliasing_listener');
99
        if ($aliasingConfig['exclude_patterns']) {
100
            $listenerDefinition->addMethodCall('setExcludePatterns', array($aliasingConfig['exclude_patterns']));
101
        }
102
103
        $listenerDefinition->addMethodCall('setIsParamsEnabled', array($aliasingConfig['enable_params']));
104
105
        if ($aliasingConfig['automatic_entities']) {
106
            $automaticAliasDoctrineDefinition = $container->getDefinition('zicht_url.aliasing.doctrine.subscriber');
107
108
            foreach ($aliasingConfig['automatic_entities'] as $entityClass) {
109
                $automaticAliasDoctrineDefinition->addMethodCall('addEntityClass', array($entityClass));
110
            }
111
        }
112
    }
113
}
114