EventAdmin   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 273
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 17
eloc 173
dl 0
loc 273
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A prePersist() 0 8 2
B configureFormFields() 0 179 6
A configureListFields() 0 18 1
A getBatchActions() 0 15 4
A preUpdate() 0 9 4
1
<?php
2
3
namespace Stfalcon\Bundle\EventBundle\Admin;
4
5
use Application\Bundle\UserBundle\Entity\User;
6
use Sonata\AdminBundle\Form\FormMapper;
7
use Sonata\AdminBundle\Datagrid\ListMapper;
8
use Stfalcon\Bundle\EventBundle\Admin\AbstractClass\AbstractTranslateAdmin;
9
use Stfalcon\Bundle\EventBundle\Entity\Event;
10
11
/**
12
 * Class EventAdmin.
13
 */
14
class EventAdmin extends AbstractTranslateAdmin
15
{
16
    /** @var string */
17
    protected $saveCity;
18
19
    /** @var string */
20
    protected $savePlace;
21
22
    /**
23
     * @var array
24
     */
25
    protected $datagridValues =
26
        [
27
            '_page' => 1,
28
            '_sort_order' => 'DESC',
29
            '_sort_by' => 'id',
30
        ];
31
32
    /**
33
     * {@inheritdoc}
34
     */
35
    public function preUpdate($object)
36
    {
37
        $this->removeNullTranslate($object);
38
        foreach ($object->getBlocks() as $block) {
39
            $this->removeNullTranslate($block);
40
        }
41
        if ($this->saveCity !== $object->getCity() || $this->savePlace !== $object->getPlace()) {
42
            $this->getConfigurationPool()->getContainer()->get('app.service.google_map_service')
43
                ->setEventMapPosition($object);
44
        }
45
    }
46
47
    /**
48
     * {@inheritdoc}
49
     */
50
    public function prePersist($object)
51
    {
52
        $this->removeNullTranslate($object);
53
        foreach ($object->getBlocks() as $block) {
54
            $this->removeNullTranslate($block);
55
        }
56
        $this->getConfigurationPool()->getContainer()->get('app.service.google_map_service')
57
            ->setEventMapPosition($object);
58
    }
59
60
    /**
61
     * @return array
62
     */
63
    public function getBatchActions()
64
    {
65
        $container = $this->getConfigurationPool()->getContainer();
66
        $token = $container->get('security.token_storage')->getToken();
67
        $isSuperAdmin = false;
68
        if ($token) {
69
            $user = $token->getUser();
70
            $isSuperAdmin = $user instanceof User ? in_array('ROLE_SUPER_ADMIN', $user->getRoles()) : false;
71
        }
72
73
        if (!$isSuperAdmin) {
74
            return [];
75
        }
76
77
        return parent::getBatchActions();
78
    }
79
80
    /**
81
     * @param ListMapper $listMapper
82
     */
83
    protected function configureListFields(ListMapper $listMapper)
84
    {
85
        $listMapper
86
            ->addIdentifier('id')
87
            ->addIdentifier('slug')
88
            ->add('name', null, ['label' => 'Название'])
89
            ->add('active', null, ['label' => 'Активно'])
90
            ->add('wantsToVisitCount', null, ['label' => 'Желающих посетить событие'])
91
            ->add('useDiscounts', null, ['label' => 'Возможна скидка'])
92
            ->add('receivePayments', null, ['label' => 'Продавать билеты'])
93
            ->add('group', null, ['label' => 'Группа'])
94
            ->add('audiences', null, ['label' => 'Аудитории'])
95
            ->add(
96
                'images',
97
                'string',
98
                [
99
                    'template' => 'StfalconEventBundle:Admin:images_thumb_layout.html.twig',
100
                    'label' => 'Изображения',
101
                ]
102
            );
103
    }
104
105
    /**
106
     * @param FormMapper $formMapper
107
     */
108
    protected function configureFormFields(FormMapper $formMapper)
109
    {
110
        /** @var Event $subject */
111
        $subject = $this->getSubject();
112
        if (!is_null($subject->getId())) {
0 ignored issues
show
introduced by
The condition is_null($subject->getId()) is always false.
Loading history...
113
            $this->saveCity = $subject->getCity();
114
            $this->savePlace = $subject->getPlace();
115
        }
116
        $localsRequiredService = $this->getConfigurationPool()->getContainer()->get('application_default.sonata.locales.required');
117
        $localOptions = $localsRequiredService->getLocalsRequiredArray();
118
        $localAllFalse = $localsRequiredService->getLocalsRequiredArray(false);
119
        $datetimePickerOptions =
120
            [
121
                'dp_use_seconds' => false,
122
                'dp_language' => 'ru',
123
                'format' => 'dd.MM.y, HH:mm',
124
                'dp_minute_stepping' => 10,
125
            ];
126
127
        $formMapper
128
            ->tab('Переводы')
129
                ->with('Переводы')
130
                    ->add('translations', 'a2lix_translations_gedmo', [
131
                        'translatable_class' => $this->getClass(),
132
                        'fields' => [
133
                            'name' => [
134
                                'label' => 'Название',
135
                                'locale_options' => $localOptions,
136
                            ],
137
                            'city' => [
138
                                'label' => 'Город',
139
                                'locale_options' => $localOptions,
140
                                'sonata_help' => 'указывать город в котором проводиться событие (используется для поиска координат на карте)',
141
                            ],
142
                            'place' => [
143
                                'label' => 'Место проведения',
144
                                'locale_options' => $localOptions,
145
                                'sonata_help' => 'указывать либо точный адрес, либо название здания, где проводиться событие (используется для поиска координат на карте)',
146
                            ],
147
                            'description' => [
148
                                'label' => 'Краткое описание',
149
                                'locale_options' => $localOptions,
150
                            ],
151
                            'about' => [
152
                                'label' => 'Описание',
153
                                'locale_options' => $localAllFalse,
154
                            ],
155
                            'metaDescription' => [
156
                                'label' => 'metaDescription',
157
                                'locale_options' => $localAllFalse,
158
                            ],
159
                        ],
160
                        'label' => 'Перевод',
161
                    ])
162
                ->end()
163
            ->end()
164
            ->tab('Настройки')
165
                ->with('Настройки')
166
                    ->add('slug')
167
                    ->add('group', null, ['label' => 'Группа'])
168
                    ->add('audiences', null, ['label' => 'Аудитории'])
169
                    ->add(
170
                        'ticketsCost',
171
                        'sonata_type_collection',
172
                        [
173
                            'label' => 'Цены события',
174
                            'by_reference' => false,
175
                            'type_options' => ['delete' => true],
176
                            'btn_add' => is_null($subject->getId()) ? false : 'Добавить цену',
0 ignored issues
show
introduced by
The condition is_null($subject->getId()) is always false.
Loading history...
177
                            'help' => is_null($subject->getId()) ? 'добавление цен возможно только после создания события'
0 ignored issues
show
introduced by
The condition is_null($subject->getId()) is always false.
Loading history...
178
                                : 'добавьте блоки с ценами на билеты',
179
                        ],
180
                        [
181
                            'edit' => 'inline',
182
                            'inline' => 'table',
183
                        ]
184
                    )
185
                ->end()
186
                ->with('Переключатели', ['class' => 'col-md-6'])
187
                    ->add('active', null, ['required' => false, 'label' => 'Активно'])
188
                    ->add('receivePayments', null, ['required' => false, 'label' => 'Принимать оплату'])
189
                    ->add('useDiscounts', null, ['required' => false, 'label' => 'Возможна скидка'])
190
                    ->add('adminOnly', null, ['required' => false, 'label' => 'Видимое только администраторам'])
191
                    ->add('smallEvent', null, ['required' => false, 'label' => 'Событие с одним потоком'])
192
                    ->add('useCustomBackground', null, ['required' => false, 'label' => 'Использовать фоновое изображение'])
193
                    ->add('showLogoWithBackground', null, ['required' => false, 'label' => 'Использовать логотип c фоновым изображением'])
194
                ->end()
195
            ->with('Изображения и цвет', ['class' => 'col-md-6'])
196
                ->add(
197
                    'backgroundColor',
198
                    'text',
199
                    [
200
                        'required' => true,
201
                        'label' => 'Цвет фона',
202
                        'help' => 'цвет в формате #1F2B3C',
203
                    ]
204
                )
205
                ->add(
206
                    'backgroundFile',
207
                    'file',
208
                    [
209
                        'label' => 'Фоновое изображение',
210
                        'required' => false,
211
                        'help' => 'Заменяет цвет фона на странице ивента. '.$subject->getBackground(),
212
                    ]
213
                )
214
                ->add(
215
                    'logoFile',
216
                    'file',
217
                    [
218
                        'label' => 'Логотип',
219
                        'required' => is_null($subject->getLogo()),
220
                        'help' => 'Основное изображение. '.$subject->getLogo(),
221
                    ]
222
                )
223
                ->add(
224
                    'smallLogoFile',
225
                    'file',
226
                    [
227
                        'label' => 'Мини логотип',
228
                        'required' => false,
229
                        'help' => 'Если не указан, тогда используєтся основной. '.$subject->getSmallLogo(),
230
                    ]
231
                )
232
                ->end()
233
            ->end()
234
            ->tab('Блоки')
235
                ->with('Блоки')
236
                    ->add(
237
                        'blocks',
238
                        'sonata_type_collection',
239
                        [
240
                            'label' => 'Блоки отображения события',
241
                            'by_reference' => false,
242
                            'type_options' => ['delete' => true],
243
                            'btn_add' => is_null($subject->getId()) ? false : 'Добавить блок',
0 ignored issues
show
introduced by
The condition is_null($subject->getId()) is always false.
Loading history...
244
                            'help' => is_null($subject->getId()) ? 'добавление блоков возможно только после создания события'
0 ignored issues
show
introduced by
The condition is_null($subject->getId()) is always false.
Loading history...
245
                                : 'добавьте блоки отображения',
246
                        ],
247
                        [
248
                            'edit' => 'inline',
249
                            'inline' => 'table',
250
                        ]
251
                    )
252
                ->end()
253
            ->end()
254
            ->tab('Даты')
255
                ->with('Даты')
256
                    ->add('dateFormat', null, [
257
                        'required' => true,
258
                        'label' => 'Формат даты',
259
                        'help' => 'd - день (11), MMMM - полное название месяца (січень), MMM - сокращеное название месяца (січ.), 
260
                        MM - числовой вид месяца (01), Y - год (2018), HH:mm - время (13:45), S - время года (зима), 
261
                         одновремено можно использовать только либо S либо MMMM',
262
                    ])
263
                    ->add(
264
                        'date',
265
                        'sonata_type_datetime_picker',
266
                        array_merge(
267
                            [
268
                                'required' => true,
269
                                'label' => 'Дата начала',
270
                            ],
271
                            $datetimePickerOptions
272
                        )
273
                    )
274
                    ->add(
275
                        'dateEnd',
276
                        'sonata_type_datetime_picker',
277
                        array_merge(
278
                            [
279
                                'required' => false,
280
                                'label' => 'Дата окончания',
281
                            ],
282
                            $datetimePickerOptions
283
                        )
284
                    )
285
                ->end()
286
            ->end()
287
        ;
288
    }
289
}
290