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
|
|||||||
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
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 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
|
|||||||
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
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
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
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
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
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
Loading history...
|
|||||||
217 | |||||||
218 | $this->addFlash('mautic.category.notice.created', [ |
||||||
0 ignored issues
–
show
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
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
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
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
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
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)) { |
||||||
445 | return $this->isLocked($postActionVars, $entity, 'category.category'); |
||||||
446 | } |
||||||
447 | |||||||
448 | $model->deleteEntity($entity); |
||||||
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
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
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); |
||||||
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 |
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.