CategoryController   C
last analyzed

Complexity

Total Complexity 53

Size/Duplication

Total Lines 516
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 292
dl 0
loc 516
rs 6.96
c 0
b 0
f 0
wmc 53

6 Methods

Rating   Name   Duplication   Size   Complexity  
B batchDeleteAction() 0 62 7
C newAction() 0 84 11
A deleteAction() 0 52 5
A executeCategoryAction() 0 6 2
C indexAction() 0 131 13
F editAction() 0 118 15

How to fix   Complexity   

Complex Class

Complex classes like CategoryController often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use CategoryController, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
/*
4
 * @copyright   2014 Mautic Contributors. All rights reserved
5
 * @author      Mautic
6
 *
7
 * @link        http://mautic.org
8
 *
9
 * @license     GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
10
 */
11
12
namespace Mautic\CategoryBundle\Controller;
13
14
use Mautic\CategoryBundle\CategoryEvents;
15
use Mautic\CategoryBundle\Event\CategoryTypesEvent;
16
use Mautic\CategoryBundle\Model\CategoryModel;
17
use Mautic\CoreBundle\Controller\AbstractFormController;
18
use Symfony\Component\HttpFoundation\JsonResponse;
19
20
class CategoryController extends AbstractFormController
21
{
22
    /**
23
     * @param        $bundle
24
     * @param        $objectAction
25
     * @param int    $objectId
26
     * @param string $objectModel
27
     *
28
     * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
29
     */
30
    public function executeCategoryAction($bundle, $objectAction, $objectId = 0, $objectModel = '')
31
    {
32
        if (method_exists($this, "{$objectAction}Action")) {
33
            return $this->{"{$objectAction}Action"}($bundle, $objectId, $objectModel);
34
        } else {
35
            return $this->accessDenied();
36
        }
37
    }
38
39
    /**
40
     * @param     $bundle
41
     * @param int $page
42
     *
43
     * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
44
     */
45
    public function indexAction($bundle, $page = 1)
46
    {
47
        $session = $this->get('session');
48
49
        $search = $this->request->query->get('search', $session->get('mautic.category.filter', ''));
50
        $bundle = $this->request->query->get('bundle', $session->get('mautic.category.type', $bundle));
51
52
        if ($bundle) {
53
            $session->set('mautic.category.type', $bundle);
54
        }
55
56
        // hack to make pagination work for default list view
57
        if ('all' == $bundle) {
58
            $bundle = 'category';
59
        }
60
61
        $session->set('mautic.category.filter', $search);
62
63
        //set some permissions
64
        $permissionBase = $this->getModel('category')->getPermissionBase($bundle);
0 ignored issues
show
Unused Code introduced by
The call to Mautic\CoreBundle\Model\...el::getPermissionBase() has too many arguments starting with $bundle. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

64
        $permissionBase = $this->getModel('category')->/** @scrutinizer ignore-call */ getPermissionBase($bundle);

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
65
        $permissions    = $this->get('mautic.security')->isGranted(
66
            [
67
                $permissionBase.':view',
68
                $permissionBase.':create',
69
                $permissionBase.':edit',
70
                $permissionBase.':delete',
71
            ],
72
            'RETURN_ARRAY'
73
        );
74
75
        if (!$permissions[$permissionBase.':view']) {
76
            return $this->accessDenied();
77
        }
78
79
        $this->setListFilters();
80
81
        $viewParams = [
82
            'page'   => $page,
83
            'bundle' => $bundle,
84
        ];
85
86
        //set limits
87
        $limit = $session->get('mautic.category.limit', $this->coreParametersHelper->get('default_pagelimit'));
88
        $start = (1 === $page) ? 0 : (($page - 1) * $limit);
89
        if ($start < 0) {
90
            $start = 0;
91
        }
92
93
        $filter = ['string' => $search];
94
95
        if ('category' != $bundle) {
96
            $filter['force'] = [
97
                [
98
                    'column' => 'c.bundle',
99
                    'expr'   => 'eq',
100
                    'value'  => $bundle,
101
                ],
102
            ];
103
        }
104
105
        $orderBy    = $this->get('session')->get('mautic.category.orderby', 'c.title');
106
        $orderByDir = $this->get('session')->get('mautic.category.orderbydir', 'DESC');
107
108
        $entities = $this->getModel('category')->getEntities(
109
            [
110
                'start'      => $start,
111
                'limit'      => $limit,
112
                'filter'     => $filter,
113
                'orderBy'    => $orderBy,
114
                'orderByDir' => $orderByDir,
115
            ]
116
        );
117
118
        $count = count($entities);
119
        if ($count && $count < ($start + 1)) {
120
            //the number of entities are now less then the current page so redirect to the last page
121
            if (1 === $count) {
122
                $lastPage = 1;
123
            } else {
124
                $lastPage = (ceil($count / $limit)) ?: 1;
125
            }
126
            $viewParams['page'] = $lastPage;
127
            $session->set('mautic.category.page', $lastPage);
128
            $returnUrl = $this->generateUrl('mautic_category_index', $viewParams);
129
130
            return $this->postActionRedirect(
131
                [
132
                    'returnUrl'       => $returnUrl,
133
                    'viewParameters'  => ['page' => $lastPage],
134
                    'contentTemplate' => 'MauticCategoryBundle:Category:index',
135
                    'passthroughVars' => [
136
                        'activeLink'    => '#mautic_'.$bundle.'category_index',
137
                        'mauticContent' => 'category',
138
                    ],
139
                ]
140
            );
141
        }
142
143
        $categoryTypes = ['category' => $this->get('translator')->trans('mautic.core.select')];
144
145
        $dispatcher = $this->dispatcher;
146
        if ($dispatcher->hasListeners(CategoryEvents::CATEGORY_ON_BUNDLE_LIST_BUILD)) {
147
            $event = new CategoryTypesEvent();
148
            $dispatcher->dispatch(CategoryEvents::CATEGORY_ON_BUNDLE_LIST_BUILD, $event);
149
            $categoryTypes = array_merge($categoryTypes, $event->getCategoryTypes());
150
        }
151
152
        //set what page currently on so that we can return here after form submission/cancellation
153
        $session->set('mautic.category.page', $page);
154
155
        $tmpl = $this->request->isXmlHttpRequest() ? $this->request->get('tmpl', 'index') : 'index';
156
157
        return $this->delegateView(
158
            [
159
                'returnUrl'      => $this->generateUrl('mautic_category_index', $viewParams),
160
                'viewParameters' => [
161
                    'bundle'         => $bundle,
162
                    'permissionBase' => $permissionBase,
163
                    'searchValue'    => $search,
164
                    'items'          => $entities,
165
                    'page'           => $page,
166
                    'limit'          => $limit,
167
                    'permissions'    => $permissions,
168
                    'tmpl'           => $tmpl,
169
                    'categoryTypes'  => $categoryTypes,
170
                ],
171
                'contentTemplate' => 'MauticCategoryBundle:Category:list.html.php',
172
                'passthroughVars' => [
173
                    'activeLink'    => '#mautic_'.$bundle.'category_index',
174
                    'mauticContent' => 'category',
175
                    'route'         => $this->generateUrl('mautic_category_index', $viewParams),
176
                ],
177
            ]
178
        );
179
    }
180
181
    /**
182
     * Generates new form and processes post data.
183
     *
184
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
185
     */
186
    public function newAction($bundle)
187
    {
188
        $session    = $this->get('session');
189
        $model      = $this->getModel('category');
190
        $entity     = $model->getEntity();
0 ignored issues
show
Bug introduced by
Are you sure the assignment to $entity is correct as $model->getEntity() targeting Mautic\CoreBundle\Model\...ommonModel::getEntity() seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
191
        $success    = $closeModal    = 0;
0 ignored issues
show
Unused Code introduced by
The assignment to $closeModal is dead and can be removed.
Loading history...
192
        $cancelled  = $valid  = false;
193
        $method     = $this->request->getMethod();
194
        $inForm     = ('POST' == $method) ? $this->request->request->get('category_form')['inForm'] : $this->request->get('inForm', 0);
195
        $showSelect = $this->request->get('show_bundle_select', false);
196
197
        //not found
198
        if (!$this->get('mautic.security')->isGranted($model->getPermissionBase($bundle).':create')) {
0 ignored issues
show
Unused Code introduced by
The call to Mautic\CoreBundle\Model\...el::getPermissionBase() has too many arguments starting with $bundle. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

198
        if (!$this->get('mautic.security')->isGranted($model->/** @scrutinizer ignore-call */ getPermissionBase($bundle).':create')) {

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
199
            return $this->modalAccessDenied();
200
        }
201
        //Create the form
202
        $action = $this->generateUrl('mautic_category_action', [
203
            'objectAction' => 'new',
204
            'bundle'       => $bundle,
205
        ]);
206
        $form = $model->createForm($entity, $this->get('form.factory'), $action, ['bundle' => $bundle, 'show_bundle_select' => $showSelect]);
0 ignored issues
show
Bug introduced by
The method createForm() does not exist on Mautic\CoreBundle\Model\AbstractCommonModel. It seems like you code against a sub-type of Mautic\CoreBundle\Model\AbstractCommonModel such as Mautic\CoreBundle\Model\FormModel. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

206
        /** @scrutinizer ignore-call */ 
207
        $form = $model->createForm($entity, $this->get('form.factory'), $action, ['bundle' => $bundle, 'show_bundle_select' => $showSelect]);
Loading history...
207
        $form['inForm']->setData($inForm);
208
        ///Check for a submitted form and process it
209
        if ('POST' == $method) {
210
            $valid = false;
211
            if (!$cancelled = $this->isFormCancelled($form)) {
212
                if ($valid = $this->isFormValid($form)) {
213
                    $success = 1;
214
215
                    //form is valid so process the data
216
                    $model->saveEntity($entity, $form->get('buttons')->get('save')->isClicked());
0 ignored issues
show
Bug introduced by
The method saveEntity() does not exist on Mautic\CoreBundle\Model\AbstractCommonModel. It seems like you code against a sub-type of Mautic\CoreBundle\Model\AbstractCommonModel such as Mautic\CampaignBundle\Model\EventLogModel or Mautic\CoreBundle\Model\FormModel. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

216
                    $model->/** @scrutinizer ignore-call */ 
217
                            saveEntity($entity, $form->get('buttons')->get('save')->isClicked());
Loading history...
217
218
                    $this->addFlash('mautic.category.notice.created', [
0 ignored issues
show
Deprecated Code introduced by
The function Mautic\CoreBundle\Contro...nController::addFlash() has been deprecated: Will be removed in Mautic 3.0. Use CommonController::flashBag->addFlash() instead. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

218
                    /** @scrutinizer ignore-deprecated */ $this->addFlash('mautic.category.notice.created', [

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
219
                        '%name%' => $entity->getName(),
220
                    ]);
221
                }
222
            } else {
223
                $success = 1;
224
            }
225
        }
226
227
        $closeModal = ($cancelled || ($valid && $form->get('buttons')->get('save')->isClicked()));
228
229
        if ($closeModal) {
230
            if ($inForm) {
231
                return new JsonResponse([
232
                    'mauticContent' => 'category',
233
                    'closeModal'    => 1,
234
                    'inForm'        => 1,
235
                    'categoryName'  => $entity->getName(),
236
                    'categoryId'    => $entity->getId(),
237
                ]);
238
            }
239
240
            $viewParameters = [
241
                'page'   => $session->get('mautic.category.page'),
242
                'bundle' => $bundle,
243
            ];
244
245
            return $this->postActionRedirect([
246
                'returnUrl'       => $this->generateUrl('mautic_category_index', $viewParameters),
247
                'viewParameters'  => $viewParameters,
248
                'contentTemplate' => 'MauticCategoryBundle:Category:index',
249
                'passthroughVars' => [
250
                    'activeLink'    => '#mautic_'.$bundle.'category_index',
251
                    'mauticContent' => 'category',
252
                    'closeModal'    => 1,
253
                ],
254
            ]);
255
        } elseif (!empty($valid)) {
256
            //return edit view to prevent duplicates
257
            return $this->editAction($bundle, $entity->getId(), true);
258
        } else {
259
            return $this->ajaxAction([
260
                'contentTemplate' => 'MauticCategoryBundle:Category:form.html.php',
261
                'viewParameters'  => [
262
                    'form'           => $form->createView(),
263
                    'activeCategory' => $entity,
264
                    'bundle'         => $bundle,
265
                ],
266
                'passthroughVars' => [
267
                    'mauticContent' => 'category',
268
                    'success'       => $success,
269
                    'route'         => false,
270
                ],
271
            ]);
272
        }
273
    }
274
275
    /**
276
     * Generates edit form and processes post data.
277
     *
278
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
279
     */
280
    public function editAction($bundle, $objectId, $ignorePost = false)
281
    {
282
        $session = $this->get('session');
283
        /** @var CategoryModel $model */
284
        $model     = $this->getModel('category');
285
        $entity    = $model->getEntity($objectId);
286
        $success   = $closeModal   = 0;
287
        $cancelled = $valid = false;
288
        $method    = $this->request->getMethod();
289
        $inForm    = ('POST' == $method) ? $this->request->request->get('category_form')['inForm'] : $this->request->get('inForm', 0);
290
291
        //not found
292
        if (null === $entity) {
293
            $closeModal = true;
294
        } elseif (!$this->get('mautic.security')->isGranted($model->getPermissionBase($bundle).':view')) {
295
            return $this->modalAccessDenied();
296
        } elseif ($model->isLocked($entity)) {
297
            return $this->modalAccessDenied();
298
        }
299
300
        //Create the form
301
        $action = $this->generateUrl(
302
            'mautic_category_action',
303
            [
304
                'objectAction' => 'edit',
305
                'objectId'     => $objectId,
306
                'bundle'       => $bundle,
307
            ]
308
        );
309
        $form = $model->createForm($entity, $this->get('form.factory'), $action, ['bundle' => $bundle]);
310
        $form['inForm']->setData($inForm);
311
312
        ///Check for a submitted form and process it
313
        if (!$ignorePost && 'POST' == $method) {
314
            $valid = false;
315
            if (!$cancelled = $this->isFormCancelled($form)) {
316
                if ($valid = $this->isFormValid($form)) {
317
                    $success = 1;
318
319
                    //form is valid so process the data
320
                    $model->saveEntity($entity, $form->get('buttons')->get('save')->isClicked());
321
322
                    $this->addFlash(
0 ignored issues
show
Deprecated Code introduced by
The function Mautic\CoreBundle\Contro...nController::addFlash() has been deprecated: Will be removed in Mautic 3.0. Use CommonController::flashBag->addFlash() instead. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

322
                    /** @scrutinizer ignore-deprecated */ $this->addFlash(

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
323
                        'mautic.category.notice.updated',
324
                        [
325
                            '%name%' => $entity->getTitle(),
326
                        ]
327
                    );
328
329
                    if ($form->get('buttons')->get('apply')->isClicked()) {
330
                        // Rebuild the form with new action so that apply doesn't keep creating a clone
331
                        $action = $this->generateUrl(
332
                            'mautic_category_action',
333
                            [
334
                                'objectAction' => 'edit',
335
                                'objectId'     => $entity->getId(),
336
                                'bundle'       => $bundle,
337
                            ]
338
                        );
339
                        $form = $model->createForm($entity, $this->get('form.factory'), $action, ['bundle' => $bundle]);
340
                    }
341
                }
342
            } else {
343
                $success = 1;
344
345
                //unlock the entity
346
                $model->unlockEntity($entity);
347
            }
348
        } else {
349
            //lock the entity
350
            $model->lockEntity($entity);
351
        }
352
353
        $closeModal = ($closeModal || $cancelled || ($valid && $form->get('buttons')->get('save')->isClicked()));
354
355
        if ($closeModal) {
356
            if ($inForm) {
357
                return new JsonResponse(
358
                    [
359
                        'mauticContent' => 'category',
360
                        'closeModal'    => 1,
361
                        'inForm'        => 1,
362
                        'categoryName'  => $entity->getTitle(),
363
                        'categoryId'    => $entity->getId(),
364
                    ]
365
                );
366
            }
367
368
            $viewParameters = [
369
                'page'   => $session->get('mautic.category.page'),
370
                'bundle' => $bundle,
371
            ];
372
373
            return $this->postActionRedirect(
374
                [
375
                    'returnUrl'       => $this->generateUrl('mautic_category_index', $viewParameters),
376
                    'viewParameters'  => $viewParameters,
377
                    'contentTemplate' => 'MauticCategoryBundle:Category:index',
378
                    'passthroughVars' => [
379
                        'activeLink'    => '#mautic_'.$bundle.'category_index',
380
                        'mauticContent' => 'category',
381
                        'closeModal'    => 1,
382
                    ],
383
                ]
384
            );
385
        } else {
386
            return $this->ajaxAction(
387
                [
388
                    'contentTemplate' => 'MauticCategoryBundle:Category:form.html.php',
389
                    'viewParameters'  => [
390
                        'form'           => $form->createView(),
391
                        'activeCategory' => $entity,
392
                        'bundle'         => $bundle,
393
                    ],
394
                    'passthroughVars' => [
395
                        'mauticContent' => 'category',
396
                        'success'       => $success,
397
                        'route'         => false,
398
                    ],
399
                ]
400
            );
401
        }
402
    }
403
404
    /**
405
     * Deletes the entity.
406
     *
407
     * @param $objectId
408
     *
409
     * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
410
     */
411
    public function deleteAction($bundle, $objectId)
412
    {
413
        $session    = $this->get('session');
414
        $page       = $session->get('mautic.category.page', 1);
415
        $viewParams = [
416
            'page'   => $page,
417
            'bundle' => $bundle,
418
        ];
419
        $returnUrl = $this->generateUrl('mautic_category_index', $viewParams);
420
        $flashes   = [];
421
422
        $postActionVars = [
423
            'returnUrl'       => $returnUrl,
424
            'viewParameters'  => $viewParams,
425
            'contentTemplate' => 'MauticCategoryBundle:Category:index',
426
            'passthroughVars' => [
427
                'activeLink'    => 'mautic_'.$bundle.'category_index',
428
                'mauticContent' => 'category',
429
            ],
430
        ];
431
432
        if ('POST' == $this->request->getMethod()) {
433
            $model  = $this->getModel('category');
434
            $entity = $model->getEntity($objectId);
435
436
            if (null === $entity) {
437
                $flashes[] = [
438
                    'type'    => 'error',
439
                    'msg'     => 'mautic.category.error.notfound',
440
                    'msgVars' => ['%id%' => $objectId],
441
                ];
442
            } elseif (!$this->get('mautic.security')->isGranted($model->getPermissionBase($bundle).':delete')) {
0 ignored issues
show
Unused Code introduced by
The call to Mautic\CoreBundle\Model\...el::getPermissionBase() has too many arguments starting with $bundle. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

442
            } elseif (!$this->get('mautic.security')->isGranted($model->/** @scrutinizer ignore-call */ getPermissionBase($bundle).':delete')) {

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
443
                return $this->accessDenied();
444
            } elseif ($model->isLocked($entity)) {
0 ignored issues
show
Bug introduced by
The method isLocked() does not exist on Mautic\CoreBundle\Model\AbstractCommonModel. It seems like you code against a sub-type of Mautic\CoreBundle\Model\AbstractCommonModel such as Mautic\CoreBundle\Model\FormModel. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

444
            } elseif ($model->/** @scrutinizer ignore-call */ isLocked($entity)) {
Loading history...
445
                return $this->isLocked($postActionVars, $entity, 'category.category');
446
            }
447
448
            $model->deleteEntity($entity);
0 ignored issues
show
Bug introduced by
The method deleteEntity() does not exist on Mautic\CoreBundle\Model\AbstractCommonModel. It seems like you code against a sub-type of Mautic\CoreBundle\Model\AbstractCommonModel such as Mautic\CoreBundle\Model\FormModel. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

448
            $model->/** @scrutinizer ignore-call */ 
449
                    deleteEntity($entity);
Loading history...
449
450
            $flashes[] = [
451
                'type'    => 'notice',
452
                'msg'     => 'mautic.core.notice.deleted',
453
                'msgVars' => [
454
                    '%name%' => $entity->getTitle(),
455
                    '%id%'   => $objectId,
456
                ],
457
            ];
458
        } //else don't do anything
459
460
        return $this->postActionRedirect(
461
            array_merge($postActionVars, [
462
                'flashes' => $flashes,
463
            ])
464
        );
465
    }
466
467
    /**
468
     * Deletes a group of entities.
469
     *
470
     * @param string $bundle
471
     *
472
     * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
473
     */
474
    public function batchDeleteAction($bundle)
475
    {
476
        $session    = $this->get('session');
477
        $page       = $session->get('mautic.category.page', 1);
478
        $viewParams = [
479
            'page'   => $page,
480
            'bundle' => $bundle,
481
        ];
482
        $returnUrl = $this->generateUrl('mautic_category_index', $viewParams);
483
        $flashes   = [];
484
485
        $postActionVars = [
486
            'returnUrl'       => $returnUrl,
487
            'viewParameters'  => $viewParams,
488
            'contentTemplate' => 'MauticCategoryBundle:Category:index',
489
            'passthroughVars' => [
490
                'activeLink'    => 'mautic_'.$bundle.'category_index',
491
                'mauticContent' => 'category',
492
            ],
493
        ];
494
495
        if ('POST' == $this->request->getMethod()) {
496
            $model     = $this->getModel('category');
497
            $ids       = json_decode($this->request->query->get('ids', '{}'));
498
            $deleteIds = [];
499
500
            // Loop over the IDs to perform access checks pre-delete
501
            foreach ($ids as $objectId) {
502
                $entity = $model->getEntity($objectId);
503
504
                if (null === $entity) {
505
                    $flashes[] = [
506
                        'type'    => 'error',
507
                        'msg'     => 'mautic.category.error.notfound',
508
                        'msgVars' => ['%id%' => $objectId],
509
                    ];
510
                } elseif (!$this->get('mautic.security')->isGranted($model->getPermissionBase($bundle).':delete')) {
0 ignored issues
show
Unused Code introduced by
The call to Mautic\CoreBundle\Model\...el::getPermissionBase() has too many arguments starting with $bundle. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

510
                } elseif (!$this->get('mautic.security')->isGranted($model->/** @scrutinizer ignore-call */ getPermissionBase($bundle).':delete')) {

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
511
                    $flashes[] = $this->accessDenied(true);
512
                } elseif ($model->isLocked($entity)) {
513
                    $flashes[] = $this->isLocked($postActionVars, $entity, 'category', true);
514
                } else {
515
                    $deleteIds[] = $objectId;
516
                }
517
            }
518
519
            // Delete everything we are able to
520
            if (!empty($deleteIds)) {
521
                $entities = $model->deleteEntities($deleteIds);
0 ignored issues
show
Bug introduced by
The method deleteEntities() does not exist on Mautic\CoreBundle\Model\AbstractCommonModel. It seems like you code against a sub-type of Mautic\CoreBundle\Model\AbstractCommonModel such as Mautic\CoreBundle\Model\FormModel. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

521
                /** @scrutinizer ignore-call */ 
522
                $entities = $model->deleteEntities($deleteIds);
Loading history...
522
523
                $flashes[] = [
524
                    'type'    => 'notice',
525
                    'msg'     => 'mautic.category.notice.batch_deleted',
526
                    'msgVars' => [
527
                        '%count%' => count($entities),
528
                    ],
529
                ];
530
            }
531
        } //else don't do anything
532
533
        return $this->postActionRedirect(
534
            array_merge($postActionVars, [
535
                'flashes' => $flashes,
536
            ])
537
        );
538
    }
539
}
540