Completed
Push — master ( 67cd1a...ff46ce )
by Dev
02:55
created

UserAdmin   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 156
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 83
dl 0
loc 156
ccs 0
cts 116
cp 0
rs 10
c 0
b 0
f 0
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
A configureListFields() 0 41 3
A configureDatagridFilters() 0 4 1
A exists() 0 3 1
B configureFormFields() 0 88 7
1
<?php
2
3
namespace PiedWeb\CMSBundle\Admin;
4
5
use Sonata\AdminBundle\Admin\AbstractAdmin;
6
use Sonata\AdminBundle\Datagrid\ListMapper;
7
use Sonata\AdminBundle\Datagrid\DatagridMapper;
8
use Sonata\AdminBundle\Form\FormMapper;
9
use Sonata\AdminBundle\Form\Type\ModelType;
10
use Sonata\CoreBundle\Form\Type\ImmutableArrayType;
11
use Sonata\CoreBundle\Form\Type\DatePickerType;
12
use Symfony\Component\Form\Extension\Core\Type\TextType;
13
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
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
26
    protected function exists(string $name): bool
27
    {
28
        return method_exists($this->getContainer()->getParameter('app.entity_user'), 'get'.$name);
29
    }
30
31
    protected function configureFormFields(FormMapper $formMapper): void
32
    {
33
        $now = new \DateTime();
34
35
        $formMapper
36
            ->with('admin.user.label.id', ['class' => 'col-md-4'])
37
                    //->add('username')
38
                    ->add('email', null, [
39
                        'label' => 'admin.user.email.label',
40
                    ])
41
                    ->add('plainPassword', TextType::class, [
42
                        'required' => (!$this->getSubject() || null === $this->getSubject()->getId()),
43
                        'label' => 'admin.user.password.label',
44
                    ])
45
            ->end()
46
        ;
47
48
        $formMapper
49
            ->with('admin.user.label.profile', ['class' => 'col-md-4'])
50
        ;
51
52
        if ($this->exists('DateOfBirth')) {
53
            $formMapper->add('dateOfBirth', DatePickerType::class, [
54
                'years' => range(1900, $now->format('Y')),
55
                'dp_min_date' => '1-1-1900',
56
                'dp_max_date' => $now->format('c'),
57
                'required' => false,
58
                'label' => 'admin.user.dateOfBirth.label',
59
            ]);
60
        }
61
        if ($this->exists('firstname')) {
62
            $formMapper->add('firstname', TextType::class, [
63
                'required' => false,
64
                'label' => 'admin.user.firstname.label',
65
            ]);
66
        }
67
        if ($this->exists('lastname')) {
68
            $formMapper->add('lastname', TextType::class, [
69
                'required' => false,
70
                'label' => 'admin.user.lastname.label',
71
            ]);
72
        }
73
        if ($this->exists('city')) {
74
            $formMapper->add('city', TextType::class, [
75
                'required' => false,
76
                'label' => 'admin.user.city.label',
77
            ]);
78
        }
79
        if ($this->exists('phone')) {
80
            $formMapper->add('phone', TextType::class, [
81
                'required' => false,
82
                'label' => 'admin.user.phone.label',
83
            ]);
84
        }
85
86
        $formMapper->end()
87
88
            ->with('admin.user.label.security', ['class' => 'col-md-4'])
89
                ->add('enabled', null, [
90
                    'required' => false,
91
                    'label' => 'admin.user.enabled.label',
92
                ])
93
94
                /*
95
                ->with('Groups')
96
                    ->add('groups', ModelType::class, [
97
                        'required' => false,
98
                        'expanded' => true,
99
                        'multiple' => true,
100
                    ])
101
                ->end()
102
                */
103
104
                ->add('roles', ImmutableArrayType::class, [
105
                    'label' => false,
106
                    'keys' => [
107
                        ['0', ChoiceType::class, [
108
                            'required' => false,
109
                            'label' => 'admin.user.role.label',
110
                            'choices' => [
111
                                'admin.user.role.admin' => 'ROLE_SUPER_ADMIN',
112
                                'admin.user.role.user' => 'ROLE_USER',
113
                            ],
114
                        ]],
115
                    ],
116
                ])
117
118
            ->end()
119
        ;
120
    }
121
122
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
123
    {
124
        $datagridMapper->add('id')
125
            ->add('email')
126
            //->add('groups')
127
        ;
128
    }
129
130
    protected function configureListFields(ListMapper $listMapper)
131
    {
132
        $listMapper
133
            ->add('email', null, [
134
                'label' => 'admin.user.email.label',
135
            ]);
136
        if ($this->exists('firstname')) {
137
            $listMapper->add('firstname', TextType::class, [
138
                'editable' => true,
139
                'label' => 'admin.user.firstname.label',
140
            ]);
141
        }
142
        if ($this->exists('lastname')) {
143
            $listMapper->add('lastname', TextType::class, [
144
                'editable' => true,
145
                'label' => 'admin.user.lastname.label',
146
            ]);
147
        }
148
149
        /**todo
150
        $listMapper->add('roles[0]', null, [
151
                'label' => 'admin.user.role.label',
152
            ]);
153
        /**/
154
        $listMapper
155
            ->add('enabled', null, [
156
                'editable' => true,
157
                'label' => 'admin.user.enabled.label',
158
            ])
159
            ->add('createdAt', null, [
160
                'editable' => true,
161
                'label' => 'admin.user.createdAt.label',
162
            ])
163
            ->add('_action', null, [
164
                'actions' => [
165
                    'edit' => [],
166
                    'delete' => [],
167
                ],
168
                'row_align' => 'right',
169
                'header_class' => 'text-right',
170
                'label' => 'admin.action',
171
            ])
172
        ;
173
    }
174
}
175