Passed
Pull Request — master (#300)
by Arnaud
14:15 queued 08:05
created

ConfigurationListener   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 37
c 0
b 0
f 0
dl 0
loc 65
rs 10
wmc 13

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getDefaultConfiguration() 0 16 2
A __construct() 0 3 1
B __invoke() 0 22 7
A getDefaultTemplate() 0 13 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LAG\AdminBundle\Event\Listener\Admin\Configuration;
6
7
use LAG\AdminBundle\Admin\Configuration\ApplicationConfiguration;
8
use LAG\AdminBundle\Event\Events\Configuration\AdminConfigurationEvent;
9
10
class ConfigurationListener
11
{
12
    private ApplicationConfiguration $applicationConfiguration;
13
14
    public function __construct(ApplicationConfiguration $applicationConfiguration)
15
    {
16
        $this->applicationConfiguration = $applicationConfiguration;
17
    }
18
19
    public function __invoke(AdminConfigurationEvent $event): void
20
    {
21
        $configuration = $event->getConfiguration();
22
23
        if (empty($configuration['name'])) {
24
            $configuration['name'] = $event->getAdminName();
25
        }
26
        $configuration = array_merge($this->getDefaultConfiguration(), $configuration);
27
28
        if (!empty($configuration['actions']) && is_iterable($configuration['actions'])) {
29
            foreach ($configuration['actions'] as $actionName => $actionConfiguration) {
30
                if (empty($actionConfiguration['admin_name'])) {
31
                    $configuration['actions'][$actionName]['admin_name'] = $event->getAdminName();
32
                }
33
34
                if (empty($actionConfiguration['template'])) {
35
                    $template = $this->getDefaultTemplate($actionName, $configuration);
36
                    $configuration['actions'][$actionName]['template'] = $template;
37
                }
38
            }
39
        }
40
        $event->setConfiguration($configuration);
41
    }
42
43
    private function getDefaultConfiguration(): array
44
    {
45
        return [
46
            'admin_class' => $this->applicationConfiguration->getAdminClass(),
47
            'routes_pattern' => $this->applicationConfiguration->getRoutesPattern(),
48
            'max_per_page' => $this->applicationConfiguration->getMaxPerPage(),
49
            'pager' => $this->applicationConfiguration->isTranslationEnabled()
50
                ? $this->applicationConfiguration->getPager()
51
                : false,
52
            'permissions' => $this->applicationConfiguration->getPermissions(),
53
            'date_format' => $this->applicationConfiguration->getDateFormat(),
54
            'page_parameter' => $this->applicationConfiguration->getPageParameter(),
55
            'list_template' => $this->applicationConfiguration->getListTemplate(),
56
            'edit_template' => $this->applicationConfiguration->getEditTemplate(),
57
            'create_template' => $this->applicationConfiguration->getCreateTemplate(),
58
            'delete_template' => $this->applicationConfiguration->getDeleteTemplate(),
59
        ];
60
    }
61
62
    private function getDefaultTemplate(string $actionName, array $adminConfiguration): string
63
    {
64
        if (!empty($adminConfiguration[$actionName.'_template'])) {
65
            return $adminConfiguration[$actionName.'_template'];
66
        }
67
        $map = [
68
            'list_template' => $this->applicationConfiguration->getListTemplate(),
69
            'edit_template' => $this->applicationConfiguration->getEditTemplate(),
70
            'create_template' => $this->applicationConfiguration->getCreateTemplate(),
71
            'delete_template' => $this->applicationConfiguration->getDeleteTemplate(),
72
        ];
73
74
        return \array_key_exists($actionName.'_template', $map) ? $map[$actionName.'_template'] : '';
75
    }
76
}
77