Issues (3627)

app/bundles/SmsBundle/Controller/SmsController.php (7 issues)

1
<?php
2
3
/*
4
 * @copyright   2016 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\SmsBundle\Controller;
13
14
use Mautic\CoreBundle\Controller\FormController;
15
use Mautic\CoreBundle\Form\Type\DateRangeType;
16
use Mautic\CoreBundle\Helper\InputHelper;
17
use Mautic\LeadBundle\Controller\EntityContactsTrait;
18
use Mautic\SmsBundle\Entity\Sms;
19
use Symfony\Component\HttpFoundation\JsonResponse;
20
use Symfony\Component\HttpFoundation\Response;
21
22
class SmsController extends FormController
23
{
24
    use EntityContactsTrait;
25
26
    /**
27
     * @param int $page
28
     *
29
     * @return JsonResponse|\Symfony\Component\HttpFoundation\Response
30
     */
31
    public function indexAction($page = 1)
32
    {
33
        /** @var \Mautic\SmsBundle\Model\SmsModel $model */
34
        $model = $this->getModel('sms');
35
36
        //set some permissions
37
        $permissions = $this->get('mautic.security')->isGranted(
38
            [
39
                'sms:smses:viewown',
40
                'sms:smses:viewother',
41
                'sms:smses:create',
42
                'sms:smses:editown',
43
                'sms:smses:editother',
44
                'sms:smses:deleteown',
45
                'sms:smses:deleteother',
46
                'sms:smses:publishown',
47
                'sms:smses:publishother',
48
            ],
49
            'RETURN_ARRAY'
50
        );
51
52
        if (!$permissions['sms:smses:viewown'] && !$permissions['sms:smses:viewother']) {
53
            return $this->accessDenied();
54
        }
55
56
        $this->setListFilters();
57
58
        $session = $this->get('session');
59
60
        //set limits
61
        $limit = $session->get('mautic.sms.limit', $this->coreParametersHelper->get('default_pagelimit'));
62
        $start = (1 === $page) ? 0 : (($page - 1) * $limit);
63
        if ($start < 0) {
64
            $start = 0;
65
        }
66
67
        $search = $this->request->get('search', $session->get('mautic.sms.filter', ''));
68
        $session->set('mautic.sms.filter', $search);
69
70
        $filter = ['string' => $search];
71
72
        if (!$permissions['sms:smses:viewother']) {
73
            $filter['force'][] =
74
                [
75
                    'column' => 'e.createdBy',
76
                    'expr'   => 'eq',
77
                    'value'  => $this->user->getId(),
78
                ];
79
        }
80
81
        $orderBy    = $session->get('mautic.sms.orderby', 'e.name');
82
        $orderByDir = $session->get('mautic.sms.orderbydir', 'DESC');
83
84
        $smss = $model->getEntities([
85
            'start'      => $start,
86
            'limit'      => $limit,
87
            'filter'     => $filter,
88
            'orderBy'    => $orderBy,
89
            'orderByDir' => $orderByDir,
90
        ]);
91
92
        $count = count($smss);
93
        if ($count && $count < ($start + 1)) {
94
            //the number of entities are now less then the current page so redirect to the last page
95
            if (1 === $count) {
96
                $lastPage = 1;
97
            } else {
98
                $lastPage = (floor($count / $limit)) ?: 1;
99
            }
100
101
            $session->set('mautic.sms.page', $lastPage);
102
            $returnUrl = $this->generateUrl('mautic_sms_index', ['page' => $lastPage]);
103
104
            return $this->postActionRedirect([
105
                'returnUrl'       => $returnUrl,
106
                'viewParameters'  => ['page' => $lastPage],
107
                'contentTemplate' => 'MauticSmsBundle:Sms:index',
108
                'passthroughVars' => [
109
                    'activeLink'    => '#mautic_sms_index',
110
                    'mauticContent' => 'sms',
111
                ],
112
            ]);
113
        }
114
        $session->set('mautic.sms.page', $page);
115
116
        return $this->delegateView([
117
            'viewParameters' => [
118
                'searchValue' => $search,
119
                'items'       => $smss,
120
                'totalItems'  => $count,
121
                'page'        => $page,
122
                'limit'       => $limit,
123
                'tmpl'        => $this->request->get('tmpl', 'index'),
124
                'permissions' => $permissions,
125
                'model'       => $model,
126
                'security'    => $this->get('mautic.security'),
127
                'configured'  => count($this->get('mautic.sms.transport_chain')->getEnabledTransports()) > 0,
128
            ],
129
            'contentTemplate' => 'MauticSmsBundle:Sms:list.html.php',
130
            'passthroughVars' => [
131
                'activeLink'    => '#mautic_sms_index',
132
                'mauticContent' => 'sms',
133
                'route'         => $this->generateUrl('mautic_sms_index', ['page' => $page]),
134
            ],
135
        ]);
136
    }
137
138
    /**
139
     * Loads a specific form into the detailed panel.
140
     *
141
     * @param $objectId
142
     *
143
     * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\Response
144
     */
145
    public function viewAction($objectId)
146
    {
147
        /** @var \Mautic\SmsBundle\Model\SmsModel $model */
148
        $model    = $this->getModel('sms');
149
        $security = $this->get('mautic.security');
150
151
        /** @var \Mautic\SmsBundle\Entity\Sms $sms */
152
        $sms = $model->getEntity($objectId);
153
        //set the page we came from
154
        $page = $this->get('session')->get('mautic.sms.page', 1);
155
156
        if (null === $sms) {
157
            //set the return URL
158
            $returnUrl = $this->generateUrl('mautic_sms_index', ['page' => $page]);
159
160
            return $this->postActionRedirect([
161
                'returnUrl'       => $returnUrl,
162
                'viewParameters'  => ['page' => $page],
163
                'contentTemplate' => 'MauticSmsBundle:Sms:index',
164
                'passthroughVars' => [
165
                    'activeLink'    => '#mautic_sms_index',
166
                    'mauticContent' => 'sms',
167
                ],
168
                'flashes' => [
169
                    [
170
                        'type'    => 'error',
171
                        'msg'     => 'mautic.sms.error.notfound',
172
                        'msgVars' => ['%id%' => $objectId],
173
                    ],
174
                ],
175
            ]);
176
        } elseif (!$this->get('mautic.security')->hasEntityAccess(
177
            'sms:smses:viewown',
178
            'sms:smses:viewother',
179
            $sms->getCreatedBy()
180
        )
181
        ) {
182
            return $this->accessDenied();
183
        }
184
185
        // Audit Log
186
        $logs = $this->getModel('core.auditlog')->getLogForObject('sms', $sms->getId(), $sms->getDateAdded());
187
188
        // Init the date range filter form
189
        $dateRangeValues = $this->request->get('daterange', []);
190
        $action          = $this->generateUrl('mautic_sms_action', ['objectAction' => 'view', 'objectId' => $objectId]);
191
        $dateRangeForm   = $this->get('form.factory')->create(DateRangeType::class, $dateRangeValues, ['action' => $action]);
192
        $entityViews     = $model->getHitsLineChartData(
193
            null,
194
            new \DateTime($dateRangeForm->get('date_from')->getData()),
195
            new \DateTime($dateRangeForm->get('date_to')->getData()),
196
            null,
197
            ['sms_id' => $sms->getId()]
198
        );
199
200
        // Get click through stats
201
        $trackableLinks = $model->getSmsClickStats($sms->getId());
202
203
        return $this->delegateView([
204
            'returnUrl'      => $this->generateUrl('mautic_sms_action', ['objectAction' => 'view', 'objectId' => $sms->getId()]),
205
            'viewParameters' => [
206
                'sms'         => $sms,
207
                'trackables'  => $trackableLinks,
208
                'logs'        => $logs,
209
                'isEmbedded'  => $this->request->get('isEmbedded') ? $this->request->get('isEmbedded') : false,
210
                'permissions' => $security->isGranted([
211
                    'sms:smses:viewown',
212
                    'sms:smses:viewother',
213
                    'sms:smses:create',
214
                    'sms:smses:editown',
215
                    'sms:smses:editother',
216
                    'sms:smses:deleteown',
217
                    'sms:smses:deleteother',
218
                    'sms:smses:publishown',
219
                    'sms:smses:publishother',
220
                ], 'RETURN_ARRAY'),
221
                'security'    => $security,
222
                'entityViews' => $entityViews,
223
                'contacts'    => $this->forward(
224
                    'MauticSmsBundle:Sms:contacts',
225
                    [
226
                        'objectId'   => $sms->getId(),
227
                        'page'       => $this->get('session')->get('mautic.sms.contact.page', 1),
228
                        'ignoreAjax' => true,
229
                    ]
230
                )->getContent(),
231
                'dateRangeForm' => $dateRangeForm->createView(),
232
            ],
233
            'contentTemplate' => 'MauticSmsBundle:Sms:details.html.php',
234
            'passthroughVars' => [
235
                'activeLink'    => '#mautic_sms_index',
236
                'mauticContent' => 'sms',
237
            ],
238
        ]);
239
    }
240
241
    /**
242
     * Generates new form and processes post data.
243
     *
244
     * @param Sms $entity
245
     *
246
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
247
     */
248
    public function newAction($entity = null)
249
    {
250
        /** @var \Mautic\SmsBundle\Model\SmsModel $model */
251
        $model = $this->getModel('sms');
252
253
        if (!$entity instanceof Sms) {
254
            /** @var \Mautic\SmsBundle\Entity\Sms $entity */
255
            $entity = $model->getEntity();
256
        }
257
258
        $method  = $this->request->getMethod();
259
        $session = $this->get('session');
260
261
        if (!$this->get('mautic.security')->isGranted('sms:smses:create')) {
262
            return $this->accessDenied();
263
        }
264
265
        //set the page we came from
266
        $page         = $session->get('mautic.sms.page', 1);
267
        $action       = $this->generateUrl('mautic_sms_action', ['objectAction' => 'new']);
268
        $sms          = $this->request->request->get('sms', []);
269
        $updateSelect = 'POST' === $method
270
            ? ($sms['updateSelect'] ?? false)
271
            : $this->request->get('updateSelect', false);
272
273
        if ($updateSelect) {
274
            $entity->setSmsType('template');
275
        }
276
277
        //create the form
278
        $form = $model->createForm($entity, $this->get('form.factory'), $action, ['update_select' => $updateSelect]);
279
280
        ///Check for a submitted form and process it
281
        if ('POST' == $method) {
282
            $valid = false;
283
            if (!$cancelled = $this->isFormCancelled($form)) {
284
                if ($valid = $this->isFormValid($form)) {
285
                    //form is valid so process the data
286
                    $model->saveEntity($entity);
287
288
                    $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

288
                    /** @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...
289
                        'mautic.core.notice.created',
290
                        [
291
                            '%name%'      => $entity->getName(),
292
                            '%menu_link%' => 'mautic_sms_index',
293
                            '%url%'       => $this->generateUrl(
294
                                'mautic_sms_action',
295
                                [
296
                                    'objectAction' => 'edit',
297
                                    'objectId'     => $entity->getId(),
298
                                ]
299
                            ),
300
                        ]
301
                    );
302
303
                    if ($form->get('buttons')->get('save')->isClicked()) {
304
                        $viewParameters = [
305
                            'objectAction' => 'view',
306
                            'objectId'     => $entity->getId(),
307
                        ];
308
                        $returnUrl = $this->generateUrl('mautic_sms_action', $viewParameters);
309
                        $template  = 'MauticSmsBundle:Sms:view';
310
                    } else {
311
                        //return edit view so that all the session stuff is loaded
312
                        return $this->editAction($entity->getId(), true);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->editAction($entity->getId(), true) also could return the type array which is incompatible with the documented return type Symfony\Component\HttpFo...HttpFoundation\Response.
Loading history...
313
                    }
314
                }
315
            } else {
316
                $viewParameters = ['page' => $page];
317
                $returnUrl      = $this->generateUrl('mautic_sms_index', $viewParameters);
318
                $template       = 'MauticSmsBundle:Sms:index';
319
                //clear any modified content
320
                $session->remove('mautic.sms.'.$entity->getId().'.content');
321
            }
322
323
            $passthrough = [
324
                'activeLink'    => 'mautic_sms_index',
325
                'mauticContent' => 'sms',
326
            ];
327
328
            // Check to see if this is a popup
329
            if (isset($form['updateSelect'])) {
330
                $template    = false;
331
                $passthrough = array_merge(
332
                    $passthrough,
333
                    [
334
                        'updateSelect' => $form['updateSelect']->getData(),
335
                        'id'           => $entity->getId(),
336
                        'name'         => $entity->getName(),
337
                        'group'        => $entity->getLanguage(),
338
                    ]
339
                );
340
            }
341
342
            if ($cancelled || ($valid && $form->get('buttons')->get('save')->isClicked())) {
343
                return $this->postActionRedirect(
344
                    [
345
                        'returnUrl'       => $returnUrl,
346
                        'viewParameters'  => $viewParameters,
347
                        'contentTemplate' => $template,
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $template does not seem to be defined for all execution paths leading up to this point.
Loading history...
348
                        'passthroughVars' => $passthrough,
349
                    ]
350
                );
351
            }
352
        }
353
354
        return $this->delegateView(
355
            [
356
                'viewParameters' => [
357
                    'form' => $this->setFormTheme($form, 'MauticSmsBundle:Sms:form.html.php', 'MauticSmsBundle:FormTheme\Sms'),
358
                    'sms'  => $entity,
359
                ],
360
                'contentTemplate' => 'MauticSmsBundle:Sms:form.html.php',
361
                'passthroughVars' => [
362
                    'activeLink'    => '#mautic_sms_index',
363
                    'mauticContent' => 'sms',
364
                    'updateSelect'  => InputHelper::clean($this->request->query->get('updateSelect')),
365
                    'route'         => $this->generateUrl(
366
                        'mautic_sms_action',
367
                        [
368
                            'objectAction' => 'new',
369
                        ]
370
                    ),
371
                ],
372
            ]
373
        );
374
    }
375
376
    /**
377
     * @param      $objectId
378
     * @param bool $ignorePost
379
     * @param bool $forceTypeSelection
380
     *
381
     * @return array|\Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|Response
382
     */
383
    public function editAction($objectId, $ignorePost = false, $forceTypeSelection = false)
384
    {
385
        /** @var \Mautic\SmsBundle\Model\SmsModel $model */
386
        $model   = $this->getModel('sms');
387
        $method  = $this->request->getMethod();
388
        $entity  = $model->getEntity($objectId);
389
        $session = $this->get('session');
390
        $page    = $session->get('mautic.sms.page', 1);
391
392
        //set the return URL
393
        $returnUrl = $this->generateUrl('mautic_sms_index', ['page' => $page]);
394
395
        $postActionVars = [
396
            'returnUrl'       => $returnUrl,
397
            'viewParameters'  => ['page' => $page],
398
            'contentTemplate' => 'MauticSmsBundle:Sms:index',
399
            'passthroughVars' => [
400
                'activeLink'    => 'mautic_sms_index',
401
                'mauticContent' => 'sms',
402
            ],
403
        ];
404
405
        //not found
406
        if (null === $entity) {
407
            return $this->postActionRedirect(
408
                array_merge(
409
                    $postActionVars,
410
                    [
411
                        'flashes' => [
412
                            [
413
                                'type'    => 'error',
414
                                'msg'     => 'mautic.sms.error.notfound',
415
                                'msgVars' => ['%id%' => $objectId],
416
                            ],
417
                        ],
418
                    ]
419
                )
420
            );
421
        } elseif (!$this->get('mautic.security')->hasEntityAccess(
422
            'sms:smses:viewown',
423
            'sms:smses:viewother',
424
            $entity->getCreatedBy()
425
        )
426
        ) {
427
            return $this->accessDenied();
428
        } elseif ($model->isLocked($entity)) {
429
            //deny access if the entity is locked
430
            return $this->isLocked($postActionVars, $entity, 'sms');
431
        }
432
433
        //Create the form
434
        $action       = $this->generateUrl('mautic_sms_action', ['objectAction' => 'edit', 'objectId' => $objectId]);
435
        $sms          = $this->request->request->get('sms', []);
436
        $updateSelect = 'POST' === $method
437
            ? ($sms['updateSelect'] ?? false)
438
            : $this->request->get('updateSelect', false);
439
440
        $form = $model->createForm($entity, $this->get('form.factory'), $action, ['update_select' => $updateSelect]);
441
442
        ///Check for a submitted form and process it
443
        if (!$ignorePost && 'POST' == $method) {
444
            $valid = false;
445
            if (!$cancelled = $this->isFormCancelled($form)) {
446
                if ($valid = $this->isFormValid($form)) {
447
                    //form is valid so process the data
448
                    $model->saveEntity($entity, $form->get('buttons')->get('save')->isClicked());
449
450
                    $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

450
                    /** @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...
451
                        'mautic.core.notice.updated',
452
                        [
453
                            '%name%'      => $entity->getName(),
454
                            '%menu_link%' => 'mautic_sms_index',
455
                            '%url%'       => $this->generateUrl(
456
                                'mautic_sms_action',
457
                                [
458
                                    'objectAction' => 'edit',
459
                                    'objectId'     => $entity->getId(),
460
                                ]
461
                            ),
462
                        ],
463
                        'warning'
464
                    );
465
                }
466
            } else {
467
                //clear any modified content
468
                $session->remove('mautic.sms.'.$objectId.'.content');
469
                //unlock the entity
470
                $model->unlockEntity($entity);
471
            }
472
473
            $passthrough = [
474
                'activeLink'    => 'mautic_sms_index',
475
                'mauticContent' => 'sms',
476
            ];
477
478
            $template = 'MauticSmsBundle:Sms:view';
479
480
            // Check to see if this is a popup
481
            if (isset($form['updateSelect'])) {
482
                $template    = false;
483
                $passthrough = array_merge(
484
                    $passthrough,
485
                    [
486
                        'updateSelect' => $form['updateSelect']->getData(),
487
                        'id'           => $entity->getId(),
488
                        'name'         => $entity->getName(),
489
                        'group'        => $entity->getLanguage(),
490
                    ]
491
                );
492
            }
493
494
            if ($cancelled || ($valid && $form->get('buttons')->get('save')->isClicked())) {
495
                $viewParameters = [
496
                    'objectAction' => 'view',
497
                    'objectId'     => $entity->getId(),
498
                ];
499
500
                return $this->postActionRedirect(
501
                    array_merge(
502
                        $postActionVars,
503
                        [
504
                            'returnUrl'       => $this->generateUrl('mautic_sms_action', $viewParameters),
505
                            'viewParameters'  => $viewParameters,
506
                            'contentTemplate' => $template,
507
                            'passthroughVars' => $passthrough,
508
                        ]
509
                    )
510
                );
511
            }
512
        } else {
513
            //lock the entity
514
            $model->lockEntity($entity);
515
        }
516
517
        return $this->delegateView(
518
            [
519
                'viewParameters' => [
520
                    'form'               => $this->setFormTheme($form, 'MauticSmsBundle:Sms:form.html.php', 'MauticSmsBundle:FormTheme\Sms'),
521
                    'sms'                => $entity,
522
                    'forceTypeSelection' => $forceTypeSelection,
523
                ],
524
                'contentTemplate' => 'MauticSmsBundle:Sms:form.html.php',
525
                'passthroughVars' => [
526
                    'activeLink'    => '#mautic_sms_index',
527
                    'mauticContent' => 'sms',
528
                    'updateSelect'  => InputHelper::clean($this->request->query->get('updateSelect')),
529
                    'route'         => $this->generateUrl(
530
                        'mautic_sms_action',
531
                        [
532
                            'objectAction' => 'edit',
533
                            'objectId'     => $entity->getId(),
534
                        ]
535
                    ),
536
                ],
537
            ]
538
        );
539
    }
540
541
    /**
542
     * Clone an entity.
543
     *
544
     * @param $objectId
545
     *
546
     * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|Response
547
     */
548
    public function cloneAction($objectId)
549
    {
550
        $model  = $this->getModel('sms');
551
        $entity = $model->getEntity($objectId);
552
553
        if (null != $entity) {
554
            if (!$this->get('mautic.security')->isGranted('sms:smses:create')
555
                || !$this->get('mautic.security')->hasEntityAccess(
556
                    'sms:smses:viewown',
557
                    'sms:smses:viewother',
558
                    $entity->getCreatedBy()
559
                )
560
            ) {
561
                return $this->accessDenied();
562
            }
563
564
            $entity = clone $entity;
565
        }
566
567
        return $this->newAction($entity);
568
    }
569
570
    /**
571
     * Deletes the entity.
572
     *
573
     * @param $objectId
574
     *
575
     * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
576
     */
577
    public function deleteAction($objectId)
578
    {
579
        $page      = $this->get('session')->get('mautic.sms.page', 1);
580
        $returnUrl = $this->generateUrl('mautic_sms_index', ['page' => $page]);
581
        $flashes   = [];
582
583
        $postActionVars = [
584
            'returnUrl'       => $returnUrl,
585
            'viewParameters'  => ['page' => $page],
586
            'contentTemplate' => 'MauticSmsBundle:Sms:index',
587
            'passthroughVars' => [
588
                'activeLink'    => 'mautic_sms_index',
589
                'mauticContent' => 'sms',
590
            ],
591
        ];
592
593
        if ('POST' == $this->request->getMethod()) {
594
            $model  = $this->getModel('sms');
595
            $entity = $model->getEntity($objectId);
596
597
            if (null === $entity) {
598
                $flashes[] = [
599
                    'type'    => 'error',
600
                    'msg'     => 'mautic.sms.error.notfound',
601
                    'msgVars' => ['%id%' => $objectId],
602
                ];
603
            } elseif (!$this->get('mautic.security')->hasEntityAccess(
604
                'sms:smses:deleteown',
605
                'sms:smses:deleteother',
606
                $entity->getCreatedBy()
607
            )
608
            ) {
609
                return $this->accessDenied();
610
            } elseif ($model->isLocked($entity)) {
0 ignored issues
show
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

610
            } elseif ($model->/** @scrutinizer ignore-call */ isLocked($entity)) {
Loading history...
611
                return $this->isLocked($postActionVars, $entity, 'sms');
612
            }
613
614
            $model->deleteEntity($entity);
0 ignored issues
show
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

614
            $model->/** @scrutinizer ignore-call */ 
615
                    deleteEntity($entity);
Loading history...
615
616
            $flashes[] = [
617
                'type'    => 'notice',
618
                'msg'     => 'mautic.core.notice.deleted',
619
                'msgVars' => [
620
                    '%name%' => $entity->getName(),
621
                    '%id%'   => $objectId,
622
                ],
623
            ];
624
        } //else don't do anything
625
626
        return $this->postActionRedirect(
627
            array_merge(
628
                $postActionVars,
629
                ['flashes' => $flashes]
630
            )
631
        );
632
    }
633
634
    /**
635
     * Deletes a group of entities.
636
     *
637
     * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
638
     */
639
    public function batchDeleteAction()
640
    {
641
        $page      = $this->get('session')->get('mautic.sms.page', 1);
642
        $returnUrl = $this->generateUrl('mautic_sms_index', ['page' => $page]);
643
        $flashes   = [];
644
645
        $postActionVars = [
646
            'returnUrl'       => $returnUrl,
647
            'viewParameters'  => ['page' => $page],
648
            'contentTemplate' => 'MauticSmsBundle:Sms:index',
649
            'passthroughVars' => [
650
                'activeLink'    => '#mautic_sms_index',
651
                'mauticContent' => 'sms',
652
            ],
653
        ];
654
655
        if ('POST' == $this->request->getMethod()) {
656
            $model = $this->getModel('sms');
657
            $ids   = json_decode($this->request->query->get('ids', '{}'));
658
659
            $deleteIds = [];
660
661
            // Loop over the IDs to perform access checks pre-delete
662
            foreach ($ids as $objectId) {
663
                $entity = $model->getEntity($objectId);
664
665
                if (null === $entity) {
666
                    $flashes[] = [
667
                        'type'    => 'error',
668
                        'msg'     => 'mautic.sms.error.notfound',
669
                        'msgVars' => ['%id%' => $objectId],
670
                    ];
671
                } elseif (!$this->get('mautic.security')->hasEntityAccess(
672
                    'sms:smses:viewown',
673
                    'sms:smses:viewother',
674
                    $entity->getCreatedBy()
675
                )
676
                ) {
677
                    $flashes[] = $this->accessDenied(true);
678
                } elseif ($model->isLocked($entity)) {
679
                    $flashes[] = $this->isLocked($postActionVars, $entity, 'sms', true);
680
                } else {
681
                    $deleteIds[] = $objectId;
682
                }
683
            }
684
685
            // Delete everything we are able to
686
            if (!empty($deleteIds)) {
687
                $entities = $model->deleteEntities($deleteIds);
0 ignored issues
show
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

687
                /** @scrutinizer ignore-call */ 
688
                $entities = $model->deleteEntities($deleteIds);
Loading history...
688
689
                $flashes[] = [
690
                    'type'    => 'notice',
691
                    'msg'     => 'mautic.sms.notice.batch_deleted',
692
                    'msgVars' => [
693
                        '%count%' => count($entities),
694
                    ],
695
                ];
696
            }
697
        } //else don't do anything
698
699
        return $this->postActionRedirect(
700
            array_merge(
701
                $postActionVars,
702
                ['flashes' => $flashes]
703
            )
704
        );
705
    }
706
707
    /**
708
     * @param $objectId
709
     *
710
     * @return JsonResponse|Response
711
     */
712
    public function previewAction($objectId)
713
    {
714
        /** @var \Mautic\SmsBundle\Model\SmsModel $model */
715
        $model    = $this->getModel('sms');
716
        $sms      = $model->getEntity($objectId);
717
        $security = $this->get('mautic.security');
718
719
        if (null !== $sms && $security->hasEntityAccess('sms:smses:viewown', 'sms:smses:viewother')) {
720
            return $this->delegateView([
721
                'viewParameters' => [
722
                    'sms' => $sms,
723
                ],
724
                'contentTemplate' => 'MauticSmsBundle:Sms:preview.html.php',
725
            ]);
726
        }
727
728
        return new Response('', Response::HTTP_NOT_FOUND);
729
    }
730
731
    /**
732
     * @param     $objectId
733
     * @param int $page
734
     *
735
     * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|Response
736
     */
737
    public function contactsAction($objectId, $page = 1)
738
    {
739
        return $this->generateContactsGrid(
740
            $objectId,
741
            $page,
742
            'sms:smses:view',
743
            'sms',
744
            'sms_message_stats',
745
            'sms',
746
            'sms_id'
747
        );
748
    }
749
}
750