Passed
Pull Request — master (#300)
by Arnaud
15:59
created

DefaultRouteListener   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 43
rs 10
wmc 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A configureDefaultRoute() 0 19 4
A __invoke() 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 DefaultRouteListener
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
        foreach ($configuration['item_actions'] ?? [] as $actionName => $actionConfiguration) {
24
            $configuration['item_actions'][$actionName] = $this->configureDefaultRoute($actionName, $actionConfiguration);
25
        }
26
27
        foreach ($configuration['list_actions'] ?? [] as $actionName => $actionConfiguration) {
28
            $configuration['list_actions'][$actionName] = $this->configureDefaultRoute($actionName, $actionConfiguration);
29
        }
30
31
        $event->setConfiguration($configuration);
32
    }
33
34
    private function configureDefaultRoute(string $actionName, array $configuration): array
35
    {
36
        if (empty($configuration['route'])) {
37
            return $configuration;
38
        }
39
40
        if (!empty($configuration['admin_name'])) {
41
            return $configuration;
42
        }
43
44
        if (!empty($configuration['action_name'])) {
45
            return $configuration;
46
        }
47
        $configuration['route'] = $this->applicationConfiguration->getRouteName(
48
            $configuration['admin_name'],
49
            $actionName
50
        );
51
52
        return $configuration;
53
    }
54
}
55