Completed
Pull Request — master (#13)
by Arnaud
06:10 queued 03:17
created

AdminConfiguration   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 95.83%

Importance

Changes 10
Bugs 3 Features 3
Metric Value
wmc 8
c 10
b 3
f 3
lcom 1
cbo 3
dl 0
loc 89
ccs 46
cts 48
cp 0.9583
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
B configureOptions() 0 66 7
1
<?php
2
3
namespace LAG\AdminBundle\Admin\Configuration;
4
5
use LAG\AdminBundle\Application\Configuration\ApplicationConfiguration;
6
use LAG\AdminBundle\Configuration\Configuration;
7
use LAG\AdminBundle\Configuration\ConfigurationInterface;
8
use Symfony\Component\OptionsResolver\Options;
9
use Symfony\Component\OptionsResolver\OptionsResolver;
10
11
/**
12
 * Ease Admin configuration manipulation.
13
 */
14
class AdminConfiguration extends Configuration implements ConfigurationInterface
15
{
16
    /**
17
     * @var ApplicationConfiguration
18
     */
19
    protected $applicationConfiguration;
20
21
    /**
22
     * AdminConfiguration constructor.
23
     *
24
     * @param ApplicationConfiguration $applicationConfiguration
25
     */
26 18
    public function __construct(ApplicationConfiguration $applicationConfiguration)
27
    {
28 18
        parent::__construct();
29
30 18
        $this->applicationConfiguration = $applicationConfiguration;
31 18
    }
32
33
    /**
34
     * @param OptionsResolver $resolver
35
     */
36 18
    public function configureOptions(OptionsResolver $resolver)
37
    {
38
        // inherited routing configuration from global application configuration
39 18
        $routing = $this
40
            ->applicationConfiguration
41 18
            ->getParameter('routing');
42
43
        // inherited max per page configuration
44 18
        $maxPerPage = $this
45
            ->applicationConfiguration
46 18
            ->getParameter('max_per_page');
47
48
        // optional options
49 18
        $resolver->setDefaults([
50
            'actions' => [
51 18
                'list' => [],
52 18
                'create' => [],
53 18
                'edit' => [],
54 18
                'delete' => [],
55 18
            ],
56 18
            'batch' => true,
57 18
            'routing_url_pattern' => $routing['url_pattern'],
58 18
            'routing_name_pattern' => $routing['name_pattern'],
59 18
            'controller' => 'LAGAdminBundle:CRUD',
60 18
            'max_per_page' => $maxPerPage,
61 18
            'data_provider' => null,
62 18
            'translation_pattern' => $this->applicationConfiguration->getParameter('translation')
63 18
        ]);
64
        // required options
65 18
        $resolver->setRequired([
66 18
            'entity',
67 18
            'form',
68 18
        ]);
69
70 18
        $resolver->setDefault('menu', [
71
            'main' => [
72
                'action' => 'list'
73 18
            ]
74 18
        ]);
75
76 18
        $resolver->setNormalizer('actions', function(Options $options, $actions) {
77 18
            $normalizedActions = [];
78 18
            $addBatchAction = false;
79
80 18
            foreach ($actions as $name => $action) {
81
82
                // action configuration is an array by default
83 18
                if ($action === null) {
84
                    $action = [];
85
                }
86 18
                $normalizedActions[$name] = $action;
87
88
                // in list action, if no batch was configured or disabled, we add a batch action
89 18
                if ($name == 'list' && (!array_key_exists('batch', $action) || $action['batch'] === null)) {
90 7
                    $addBatchAction = true;
91 7
                }
92 18
            }
93
94
            // add empty default batch action
95 18
            if ($addBatchAction) {
96 7
                $normalizedActions['batch'] = [];
97 7
            }
98
99 18
            return $normalizedActions;
100 18
        });
101 18
    }
102
}
103