Completed
Push — master ( 6130d0...57338d )
by Dev
24:32 queued 11:23
created

UserAdmin::configureListFields()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 46
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 26
nc 4
nop 1
dl 0
loc 46
ccs 0
cts 37
cp 0
crap 12
rs 9.504
c 1
b 0
f 0
1
<?php
2
3
namespace PiedWeb\CMSBundle\Admin;
4
5
use Sonata\AdminBundle\Admin\AbstractAdmin;
6
use Sonata\AdminBundle\Datagrid\DatagridMapper;
7
use Sonata\AdminBundle\Datagrid\ListMapper;
8
use Sonata\AdminBundle\Form\FormMapper;
9
use Sonata\CoreBundle\Form\Type\DatePickerType;
10
use Sonata\CoreBundle\Form\Type\ImmutableArrayType;
11
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
12
use Symfony\Component\Form\Extension\Core\Type\TextType;
13
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
14
15
class UserAdmin extends AbstractAdmin
16
{
17
    use AdminTrait;
18
19
    protected $datagridValues = [
20
        '_page' => 1,
21
        '_sort_order' => 'DESC',
22
        '_sort_by' => 'createdAt',
23
    ];
24
25
    protected function exists(string $name): bool
26
    {
27
        return method_exists($this->getContainer()->getParameter('app.entity_user'), 'get'.$name);
28
    }
29
30
    protected function configureFormFields(FormMapper $formMapper): void
31
    {
32
        // Forbid edition of other admin account except for super admin
33
        if (($this->getSubject()->hasRole('ROLE_SUPER_ADMIN')
34
            && $this->getUser()->getId() !== $this->getSubject()->getId())
35
        ) {
36
            throw new AccessDeniedException('u can\'t edit this user'); // TODO : do better
37
        }
38
39
        $now = new \DateTime();
40
41
        $formMapper
42
            ->with('admin.user.label.id', ['class' => 'col-md-4'])
43
                    //->add('username')
44
            ->add('email', null, [
45
                        'label' => 'admin.user.email.label',
46
            ])
47
            ->add('plainPassword', TextType::class, [
48
                        'required' => (!$this->getSubject() || null === $this->getSubject()->getId()),
49
                        'label' => 'admin.user.password.label',
50
            ])
51
            ->end();
52
53
        $formMapper
54
            ->with('admin.user.label.profile', ['class' => 'col-md-4']);
55
56
        if ($this->exists('DateOfBirth')) {
57
            $formMapper->add(
58
                'dateOfBirth',
59
                DatePickerType::class,
60
                [
61
                'years' => range(1900, $now->format('Y')),
62
                'dp_min_date' => '1-1-1900',
63
                'dp_max_date' => $now->format('c'),
64
                'required' => false,
65
                'label' => 'admin.user.dateOfBirth.label',
66
                ]
67
            );
68
        }
69
        if ($this->exists('firstname')) {
70
            $formMapper->add(
71
                'firstname',
72
                TextType::class,
73
                [
74
                'required' => false,
75
                'label' => 'admin.user.firstname.label',
76
                ]
77
            );
78
        }
79
        if ($this->exists('lastname')) {
80
            $formMapper->add(
81
                'lastname',
82
                TextType::class,
83
                [
84
                'required' => false,
85
                'label' => 'admin.user.lastname.label',
86
                ]
87
            );
88
        }
89
        if ($this->exists('city')) {
90
            $formMapper->add(
91
                'city',
92
                TextType::class,
93
                [
94
                'required' => false,
95
                'label' => 'admin.user.city.label',
96
                ]
97
            );
98
        }
99
        if ($this->exists('phone')) {
100
            $formMapper->add(
101
                'phone',
102
                TextType::class,
103
                [
104
                'required' => false,
105
                'label' => 'admin.user.phone.label',
106
                ]
107
            );
108
        }
109
110
        $formMapper->end()
111
112
            ->with('admin.user.label.security', ['class' => 'col-md-4'])
113
            ->add('roles', ImmutableArrayType::class, [
114
                    'label' => false,
115
                    'keys' => [
116
                        ['0', ChoiceType::class, [
117
                            'required' => false,
118
                            'label' => 'admin.user.role.label',
119
                            'choices' => $this->getUser()->hasRole('ROLE_SUPER_ADMIN') ? [
120
                                'admin.user.role.super_admin' => 'ROLE_SUPER_ADMIN',
121
                                'admin.user.role.admin' => 'ROLE_ADMIN',
122
                                'admin.user.role.editor' => 'ROLE_EDITOR',
123
                                'admin.user.role.user' => 'ROLE_USER',
124
                                ] : [
125
                                'admin.user.role.admin' => 'ROLE_ADMIN',
126
                                'admin.user.role.editor' => 'ROLE_EDITOR',
127
                                'admin.user.role.user' => 'ROLE_USER',
128
                                ],
129
                        ]],
130
                    ],
131
            ])
132
            ->end();
133
    }
134
135
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
136
    {
137
        $datagridMapper->add('id')
138
            ->add('email')
139
            //->add('groups')
140
        ;
141
    }
142
143
    protected function configureListFields(ListMapper $listMapper)
144
    {
145
        $listMapper
146
            ->add('email', null, [
147
                'label' => 'admin.user.email.label',
148
            ]);
149
        if ($this->exists('firstname')) {
150
            $listMapper->add(
151
                'firstname',
152
                TextType::class,
153
                [
154
                'editable' => true,
155
                'label' => 'admin.user.firstname.label',
156
                ]
157
            );
158
        }
159
        if ($this->exists('lastname')) {
160
            $listMapper->add(
161
                'lastname',
162
                TextType::class,
163
                [
164
                'editable' => true,
165
                'label' => 'admin.user.lastname.label',
166
                ]
167
            );
168
        }
169
170
        /*
171
* todo
172
        $listMapper->add('roles[0]', null, [
173
                'label' => 'admin.user.role.label',
174
            ]);
175
        /**/
176
        $listMapper
177
            ->add('createdAt', null, [
178
                'editable' => true,
179
                'label' => 'admin.user.createdAt.label',
180
            ])
181
            ->add('_action', null, [
182
                'actions' => [
183
                    'edit' => [],
184
                    'delete' => [],
185
                ],
186
                'row_align' => 'right',
187
                'header_class' => 'text-right',
188
                'label' => 'admin.action',
189
            ]);
190
    }
191
}
192