ZichtUrlExtension   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Test Coverage

Coverage 84.09%

Importance

Changes 8
Bugs 1 Features 1
Metric Value
eloc 43
c 8
b 1
f 1
dl 0
loc 91
ccs 37
cts 44
cp 0.8409
rs 10
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 9
    public function load(array $configs, ContainerBuilder $container)
29
    {
30 9
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
31 9
        $loader->load('services.xml');
32
33 9
        $config = $this->processConfiguration(new Configuration(), $configs);
34
35 9
        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 9
        if (isset($config['static_ref'])) {
42 9
            $container->getDefinition('zicht_url.static_refs')->addMethodCall('addAll', array($config['static_ref']));
43
        }
44 9
        if (!empty($config['aliasing']) && $config['aliasing']['enabled'] === true) {
45 1
            $this->loadAliasingConfig($container, $config['aliasing'], $loader);
46 1
            $container->setAlias('zicht_url.sitemap_provider', new Alias('zicht_url.alias_sitemap_provider'));
47
        } else {
48 8
            $container->setAlias('zicht_url.sitemap_provider', new Alias('zicht_url.provider'));
49
        }
50 9
        if (!empty($config['logging'])) {
51 1
            $loader->load('logging.xml');
52
        }
53 9
        if (!empty($config['admin'])) {
54 1
            $loader->load('admin.xml');
55
        }
56 9
        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 9
        if (!empty($config['db_static_ref']) && $config['db_static_ref']['enabled'] === true) {
62 1
            $loader->load('db.xml');
63
        }
64
65 9
        if ($container->hasDefinition('zicht_url.aliasing')) {
66 1
            $container->getDefinition('zicht_url.twig_extension')->addArgument(new Reference('zicht_url.aliasing'));
67
        }
68
69 9
        if ($container->hasDefinition('zicht_url.mapper.html')) {
70 1
            $container->getDefinition('zicht_url.mapper.html')->addMethodCall('addAttributes', [$config['html_attributes']]);
71
        }
72
73 9
        if ($container->hasDefinition('zicht_url.listener.strict_public_url')) {
74 9
            $container->getDefinition('zicht_url.listener.strict_public_url')->replaceArgument(0, $config['strict_public_url']);
75
        }
76
77 9
        if ($container->hasDefinition('zicht_url.validator.contains_url_alias')) {
78 9
            $container->getDefinition('zicht_url.validator.contains_url_alias')->replaceArgument(1, $config['strict_public_url']);
79
        }
80
81 9
        $formResources = $container->getParameter('twig.form.resources');
82 9
        $formResources[]= 'ZichtUrlBundle::form_theme.html.twig';
83 9
        $container->setParameter('twig.form.resources', $formResources);
84 9
    }
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 1
    protected function loadAliasingConfig(ContainerBuilder $container, $aliasingConfig, $loader)
95
    {
96 1
        $loader->load('aliasing.xml');
97
98 1
        $listenerDefinition = $container->getDefinition('zicht_url.aliasing_listener');
99 1
        if ($aliasingConfig['exclude_patterns']) {
100 1
            $listenerDefinition->addMethodCall('setExcludePatterns', array($aliasingConfig['exclude_patterns']));
101
        }
102
103 1
        $listenerDefinition->addMethodCall('setIsParamsEnabled', array($aliasingConfig['enable_params']));
104
105 1
        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 1
    }
113
}
114