Completed
Push — master ( 0729b3...dbaae6 )
by Kamil
18:26
created

SyliusAssociationExtension   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 4
Bugs 1 Features 0
Metric Value
wmc 9
c 4
b 1
f 0
lcom 1
cbo 6
dl 0
loc 55
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 20 4
B resolveResources() 0 22 5
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\AssociationBundle\DependencyInjection;
13
14
use Sylius\Bundle\ResourceBundle\DependencyInjection\Extension\AbstractResourceExtension;
15
use Sylius\Bundle\ResourceBundle\SyliusResourceBundle;
16
use Symfony\Component\Config\FileLocator;
17
use Symfony\Component\DependencyInjection\ContainerBuilder;
18
use Symfony\Component\DependencyInjection\Definition;
19
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
20
use Symfony\Component\DependencyInjection\Reference;
21
22
/**
23
 * @author Łukasz Chruściel <[email protected]>
24
 */
25
class SyliusAssociationExtension extends AbstractResourceExtension
26
{
27
    /**
28
     * {@inheritdoc}
29
     */
30
    public function load(array $config, ContainerBuilder $container)
31
    {
32
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
33
34
        $loader->load('services.xml');
35
36
        $config = $this->processConfiguration(new Configuration(), $config);
37
        $this->registerResources('sylius', $config['driver'], $this->resolveResources($config['resources'], $container), $container);
38
39
        foreach ($config['resources'] as $subjectName => $subjectConfig) {
40
            foreach ($subjectConfig as $resourceName => $resourceConfig) {
41
                if (!is_array($resourceConfig)) {
42
                    continue;
43
                }
44
45
                $formDefinition = $container->getDefinition('sylius.form.type.' . $subjectName . '_' . $resourceName);
46
                $formDefinition->addArgument($subjectName);
47
            }
48
        }
49
    }
50
51
    /**
52
     * @param array $resources
53
     * @param ContainerBuilder $container
54
     *
55
     * @return array
56
     */
57
    private function resolveResources(array $resources, ContainerBuilder $container)
58
    {
59
        $subjects = [];
60
        $resolvedResources = [];
61
62
        foreach ($resources as $subject => $parameters) {
63
            $subjects[$subject] = $parameters;
64
        }
65
66
        $container->setParameter('sylius.association.subjects', $subjects);
67
68
        foreach ($resources as $subjectName => $subjectConfig) {
69
            foreach ($subjectConfig as $resourceName => $resourceConfig) {
70
                if (is_array($resourceConfig)) {
71
                    $resolvedResources[$subjectName.'_'.$resourceName] = $resourceConfig;
72
                    $resolvedResources[$subjectName.'_'.$resourceName]['subject'] = $subjectName;
73
                }
74
            }
75
        }
76
77
        return $resolvedResources;
78
    }
79
}
80