Completed
Pull Request — master (#294)
by De Cramer
06:23
created

eXpansionAdminGroupsExtension::createConfigs()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 33
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 33
rs 8.5806
c 0
b 0
f 0
cc 4
eloc 23
nc 4
nop 3
1
<?php
2
3
namespace eXpansion\Framework\AdminGroups\DependencyInjection;
4
5
use eXpansion\Framework\Config\Services\ConfigManagerInterface;
6
use Symfony\Component\DependencyInjection\ChildDefinition;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\Reference;
9
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
10
use Symfony\Component\Config\FileLocator;
11
use Symfony\Component\DependencyInjection\Loader;
12
13
class eXpansionAdminGroupsExtension extends Extension
14
{
15
    /**
16
     * Loads a specific configuration.
17
     *
18
     * @param array $configs An array of configuration values
19
     * @param ContainerBuilder $container A ContainerBuilder instance
20
     *
21
     * @throws \InvalidArgumentException When provided tag is not defined in this extension
22
     */
23
    public function load(array $configs, ContainerBuilder $container)
24
    {
25
        $configuration = new Configuration();
26
        $config = $this->processConfiguration($configuration, $configs);
27
28
        /** @noinspection PhpUndefinedClassInspection */
29
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
30
        $loader->load('helpers.yml');
31
        $loader->load('services.yml');
32
        $loader->load('plugins.yml');
33
34
        $this->createConfigs($config['groups'], $config['permissions'], $container);
35
    }
36
37
    /**
38
     * Create the config services.
39
     *
40
     * @param $groups
41
     * @param ContainerBuilder $container
42
     */
43
    protected function createConfigs($groups, $permissions, ContainerBuilder $container)
44
    {
45
        $conifgManager = $container->getDefinition(ConfigManagerInterface::class);
46
47
        foreach ($groups as $groupCode => $group)
48
        {
49
            $pathPrefix = $container->getParameter('expansion.admin_groups.config.path') . "/$groupCode";
50
51
            $id = 'expansion.admin_groups.config.label.' . $groupCode;
52
            $container->setDefinition($id, new ChildDefinition('expansion.admin_groups.config.label.abstract'))
53
                ->setArgument('$path', "$pathPrefix/label")
54
                ->setArgument('$default', $group['label']);
55
            $conifgManager->addMethodCall('registerConfig', [new Reference($id), $id]);
56
57
            $id = 'expansion.admin_groups.config.logins.' . $groupCode;
58
            $container->setDefinition($id, new ChildDefinition('expansion.admin_groups.config.logins.abstract'))
59
                ->setArgument('$path', "$pathPrefix/logins")
60
                ->setArgument('$default', $group['logins']);
61
            $conifgManager->addMethodCall('registerConfig', [new Reference($id), $id]);
62
63
            if ($groupCode != "master_admin") {
64
                foreach ($permissions as $permission) {
65
                    $id = 'expansion.admin_groups.config.permissions.' . $groupCode . '.permission';
66
                    $container->setDefinition($id, new ChildDefinition('expansion.admin_groups.config.logins.abstract'))
67
                        ->setArgument('$path', "$pathPrefix/perm_perm")
68
                        ->setArgument('$default', $group['logins'])
69
                        ->setArgument('$name', "expansion_admingroups.permission.$permission.label")
70
                        ->setArgument('$description', "expansion_admingroups.permission.$permission.description");
71
                    $conifgManager->addMethodCall('registerConfig', [new Reference($id), $id]);
72
                }
73
            }
74
        }
75
    }
76
}
77