Issues (3627)

PointBundle/Controller/TriggerEventController.php (1 issue)

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\PointBundle\Controller;
13
14
use Mautic\CoreBundle\Controller\FormController as CommonFormController;
15
use Mautic\PointBundle\Entity\TriggerEvent;
16
use Mautic\PointBundle\Form\Type\TriggerEventType;
17
use Symfony\Component\HttpFoundation\JsonResponse;
18
19
/**
20
 * Class TriggerEventController.
21
 */
22
class TriggerEventController extends CommonFormController
0 ignored issues
show
Deprecated Code introduced by
The class Mautic\CoreBundle\Controller\FormController has been deprecated: 2.3 - to be removed in 3.0; use AbstractFormController instead ( Ignorable by Annotation )

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

22
class TriggerEventController extends /** @scrutinizer ignore-deprecated */ CommonFormController
Loading history...
23
{
24
    /**
25
     * Generates new form and processes post data.
26
     *
27
     * @return JsonResponse
28
     */
29
    public function newAction()
30
    {
31
        $success = 0;
32
        $valid   = $cancelled   = false;
33
        $method  = $this->request->getMethod();
34
        $session = $this->get('session');
35
36
        if ('POST' == $method) {
37
            $triggerEvent = $this->request->request->get('pointtriggerevent');
38
            $eventType    = $triggerEvent['type'];
39
            $triggerId    = $triggerEvent['triggerId'];
40
        } else {
41
            $eventType = $this->request->query->get('type');
42
            $triggerId = $this->request->query->get('triggerId');
43
44
            $triggerEvent = [
45
                'type'      => $eventType,
46
                'triggerId' => $triggerId,
47
            ];
48
        }
49
50
        //ajax only for form fields
51
        if (!$eventType ||
52
            !$this->request->isXmlHttpRequest() ||
53
            !$this->get('mautic.security')->isGranted([
54
                'point:triggers:edit',
55
                'point:triggers:create',
56
            ], 'MATCH_ONE')
57
        ) {
58
            return $this->modalAccessDenied();
59
        }
60
61
        //fire the builder event
62
        $events = $this->getModel('point.trigger')->getEvents();
63
        $form   = $this->get('form.factory')->create(TriggerEventType::class, $triggerEvent, [
64
            'action'   => $this->generateUrl('mautic_pointtriggerevent_action', ['objectAction' => 'new']),
65
            'settings' => $events[$eventType],
66
        ]);
67
        $form->get('triggerId')->setData($triggerId);
68
        $triggerEvent['settings'] = $events[$eventType];
69
70
        //Check for a submitted form and process it
71
        if ('POST' == $method) {
72
            if (!$cancelled = $this->isFormCancelled($form)) {
73
                if ($valid = $this->isFormValid($form)) {
74
                    $success = 1;
75
76
                    //form is valid so process the data
77
                    $keyId = 'new'.hash('sha1', uniqid(mt_rand()));
78
79
                    //save the properties to session
80
                    $actions            = $session->get('mautic.point.'.$triggerId.'.triggerevents.modified');
81
                    $formData           = $form->getData();
82
                    $triggerEvent       = array_merge($triggerEvent, $formData);
83
                    $triggerEvent['id'] = $keyId;
84
                    if (empty($triggerEvent['name'])) {
85
                        //set it to the event default
86
                        $triggerEvent['name'] = $this->get('translator')->trans($triggerEvent['settings']['label']);
87
                    }
88
                    $actions[$keyId] = $triggerEvent;
89
                    $session->set('mautic.point.'.$triggerId.'.triggerevents.modified', $actions);
90
                }
91
            }
92
        }
93
94
        $viewParams = ['type' => $eventType];
95
        if ($cancelled || $valid) {
96
            $closeModal = true;
97
        } else {
98
            $form = (isset($triggerEvent['settings']['formTheme'])) ?
99
                $this->setFormTheme($form, 'MauticPointBundle:Event:form.html.php', $triggerEvent['settings']['formTheme']) :
100
                $form->createView();
101
102
            $closeModal                = false;
103
            $viewParams['form']        = $form;
104
            $header                    = $triggerEvent['settings']['label'];
105
            $viewParams['eventHeader'] = $this->get('translator')->trans($header);
106
        }
107
108
        $passthroughVars = [
109
            'mauticContent' => 'pointTriggerEvent',
110
            'success'       => $success,
111
            'route'         => false,
112
        ];
113
114
        if (!empty($keyId)) {
115
            //prevent undefined errors
116
            $entity       = new TriggerEvent();
117
            $blank        = $entity->convertToArray();
118
            $triggerEvent = array_merge($blank, $triggerEvent);
119
120
            $template = (empty($triggerEvent['settings']['template'])) ? 'MauticPointBundle:Event:generic.html.php'
121
                : $triggerEvent['settings']['template'];
122
123
            $passthroughVars['eventId']   = $keyId;
124
            $passthroughVars['eventHtml'] = $this->renderView($template, [
125
                'event'     => $triggerEvent,
126
                'id'        => $keyId,
127
                'sessionId' => $triggerId,
128
            ]);
129
        }
130
131
        if ($closeModal) {
132
            //just close the modal
133
            $passthroughVars['closeModal'] = 1;
134
135
            return new JsonResponse($passthroughVars);
136
        }
137
138
        return $this->ajaxAction([
139
            'contentTemplate' => 'MauticPointBundle:Event:form.html.php',
140
            'viewParameters'  => $viewParams,
141
            'passthroughVars' => $passthroughVars,
142
        ]);
143
    }
144
145
    /**
146
     * Generates edit form and processes post data.
147
     *
148
     * @param int $objectId
149
     *
150
     * @return JsonResponse
151
     */
152
    public function editAction($objectId)
153
    {
154
        $session      = $this->get('session');
155
        $method       = $this->request->getMethod();
156
        $triggerEvent = $this->request->request->get('pointtriggerevent', []);
157
        $triggerId    = 'POST' === $method ? ($triggerEvent['triggerId'] ?? '') : $this->request->query->get('triggerId');
158
        $events       = $session->get('mautic.point.'.$triggerId.'.triggerevents.modified', []);
159
        $success      = 0;
160
        $valid        = $cancelled = false;
161
        $triggerEvent = array_key_exists($objectId, $events) ? $events[$objectId] : null;
162
163
        if (null !== $triggerEvent) {
164
            $eventType                = $triggerEvent['type'];
165
            $events                   = $this->getModel('point.trigger')->getEvents();
166
            $triggerEvent['settings'] = $events[$eventType];
167
168
            //ajax only for form fields
169
            if (!$eventType ||
170
                !$this->request->isXmlHttpRequest() ||
171
                !$this->get('mautic.security')->isGranted([
172
                    'point:triggers:edit',
173
                    'point:triggers:create',
174
                ], 'MATCH_ONE')
175
            ) {
176
                return $this->modalAccessDenied();
177
            }
178
179
            $form = $this->get('form.factory')->create(TriggerEventType::class, $triggerEvent, [
180
                'action'   => $this->generateUrl('mautic_pointtriggerevent_action', ['objectAction' => 'edit', 'objectId' => $objectId]),
181
                'settings' => $triggerEvent['settings'],
182
            ]);
183
            $form->get('triggerId')->setData($triggerId);
184
            //Check for a submitted form and process it
185
            if ('POST' == $method) {
186
                if (!$cancelled = $this->isFormCancelled($form)) {
187
                    if ($valid = $this->isFormValid($form)) {
188
                        $success = 1;
189
190
                        //form is valid so process the data
191
192
                        //save the properties to session
193
                        $session  = $this->get('session');
194
                        $events   = $session->get('mautic.point.'.$triggerId.'.triggerevents.modified');
195
                        $formData = $form->getData();
196
                        //overwrite with updated data
197
                        $triggerEvent = array_merge($events[$objectId], $formData);
198
                        if (empty($triggerEvent['name'])) {
199
                            //set it to the event default
200
                            $triggerEvent['name'] = $this->get('translator')->trans($triggerEvent['settings']['label']);
201
                        }
202
                        $events[$objectId] = $triggerEvent;
203
                        $session->set('mautic.point.'.$triggerId.'.triggerevents.modified', $events);
204
205
                        //generate HTML for the field
206
                        $keyId = $objectId;
207
                    }
208
                }
209
            }
210
211
            $viewParams = ['type' => $eventType];
212
            if ($cancelled || $valid) {
213
                $closeModal = true;
214
            } else {
215
                $form = (isset($triggerEvent['settings']['formTheme'])) ?
216
                    $this->setFormTheme($form, 'MauticPointBundle:Event:form.html.php', $triggerEvent['settings']['formTheme']) :
217
                    $form->createView();
218
219
                $closeModal                = false;
220
                $viewParams['form']        = $form;
221
                $viewParams['eventHeader'] = $this->get('translator')->trans($triggerEvent['settings']['label']);
222
            }
223
224
            $passthroughVars = [
225
                'mauticContent' => 'pointTriggerEvent',
226
                'success'       => $success,
227
                'route'         => false,
228
            ];
229
230
            if (!empty($keyId)) {
231
                $passthroughVars['eventId'] = $keyId;
232
233
                //prevent undefined errors
234
                $entity       = new TriggerEvent();
235
                $blank        = $entity->convertToArray();
236
                $triggerEvent = array_merge($blank, $triggerEvent);
237
                $template     = (empty($triggerEvent['settings']['template'])) ? 'MauticPointBundle:Event:generic.html.php'
238
                    : $triggerEvent['settings']['template'];
239
240
                $passthroughVars['eventId']   = $keyId;
241
                $passthroughVars['eventHtml'] = $this->renderView($template, [
242
                    'event'     => $triggerEvent,
243
                    'id'        => $keyId,
244
                    'sessionId' => $triggerId,
245
                ]);
246
            }
247
248
            if ($closeModal) {
249
                //just close the modal
250
                $passthroughVars['closeModal'] = 1;
251
252
                return new JsonResponse($passthroughVars);
253
            }
254
255
            return $this->ajaxAction([
256
                'contentTemplate' => 'MauticPointBundle:Event:form.html.php',
257
                'viewParameters'  => $viewParams,
258
                'passthroughVars' => $passthroughVars,
259
            ]);
260
        }
261
262
        return new JsonResponse(['success' => 0]);
263
    }
264
265
    /**
266
     * Deletes the entity.
267
     *
268
     * @param int $objectId
269
     *
270
     * @return JsonResponse
271
     */
272
    public function deleteAction($objectId)
273
    {
274
        $session   = $this->get('session');
275
        $triggerId = $this->request->get('triggerId');
276
        $events    = $session->get('mautic.point.'.$triggerId.'.triggerevents.modified', []);
277
        $delete    = $session->get('mautic.point.'.$triggerId.'.triggerevents.deleted', []);
278
279
        //ajax only for form fields
280
        if (!$this->request->isXmlHttpRequest() ||
281
            !$this->get('mautic.security')->isGranted([
282
                'point:triggers:edit',
283
                'point:triggers:create',
284
            ], 'MATCH_ONE')
285
        ) {
286
            return $this->accessDenied();
287
        }
288
289
        $triggerEvent = (array_key_exists($objectId, $events)) ? $events[$objectId] : null;
290
291
        if ('POST' == $this->request->getMethod() && null !== $triggerEvent) {
292
            //add the field to the delete list
293
            if (!in_array($objectId, $delete)) {
294
                $delete[] = $objectId;
295
                $session->set('mautic.point.'.$triggerId.'.triggerevents.deleted', $delete);
296
            }
297
298
            $template = (empty($triggerEvent['settings']['template'])) ? 'MauticPointBundle:Event:generic.html.php'
299
                : $triggerEvent['settings']['template'];
300
301
            //prevent undefined errors
302
            $entity       = new TriggerEvent();
303
            $blank        = $entity->convertToArray();
304
            $triggerEvent = array_merge($blank, $triggerEvent);
305
306
            $dataArray = [
307
                'mauticContent' => 'pointTriggerEvent',
308
                'success'       => 1,
309
                'target'        => '#triggerEvent'.$objectId,
310
                'route'         => false,
311
                'eventId'       => $objectId,
312
                'eventHtml'     => $this->renderView($template, [
313
                    'event'     => $triggerEvent,
314
                    'id'        => $objectId,
315
                    'deleted'   => true,
316
                    'sessionId' => $triggerId,
317
                ]),
318
            ];
319
        } else {
320
            $dataArray = ['success' => 0];
321
        }
322
323
        return new JsonResponse($dataArray);
324
    }
325
326
    /**
327
     * Undeletes the entity.
328
     *
329
     * @param int $objectId
330
     *
331
     * @return JsonResponse
332
     */
333
    public function undeleteAction($objectId)
334
    {
335
        $session   = $this->get('session');
336
        $triggerId = $this->request->get('triggerId');
337
        $events    = $session->get('mautic.point.'.$triggerId.'.triggerevents.modified', []);
338
        $delete    = $session->get('mautic.point.'.$triggerId.'.triggerevents.deleted', []);
339
340
        //ajax only for form fields
341
        if (!$this->request->isXmlHttpRequest() ||
342
            !$this->get('mautic.security')->isGranted([
343
                'point:triggers:edit',
344
                'point:triggers:create',
345
            ], 'MATCH_ONE')
346
        ) {
347
            return $this->accessDenied();
348
        }
349
350
        $triggerEvent = (array_key_exists($objectId, $events)) ? $events[$objectId] : null;
351
352
        if ('POST' == $this->request->getMethod() && null !== $triggerEvent) {
353
            //add the field to the delete list
354
            if (in_array($objectId, $delete)) {
355
                $key = array_search($objectId, $delete);
356
                unset($delete[$key]);
357
                $session->set('mautic.point.'.$triggerId.'.triggerevents.deleted', $delete);
358
            }
359
360
            $template = (empty($triggerEvent['settings']['template'])) ? 'MauticPointBundle:Event:generic.html.php'
361
                : $triggerEvent['settings']['template'];
362
363
            //prevent undefined errors
364
            $entity       = new TriggerEvent();
365
            $blank        = $entity->convertToArray();
366
            $triggerEvent = array_merge($blank, $triggerEvent);
367
368
            $dataArray = [
369
                'mauticContent' => 'pointTriggerEvent',
370
                'success'       => 1,
371
                'target'        => '#triggerEvent'.$objectId,
372
                'route'         => false,
373
                'eventId'       => $objectId,
374
                'eventHtml'     => $this->renderView($template, [
375
                    'event'     => $triggerEvent,
376
                    'id'        => $objectId,
377
                    'deleted'   => false,
378
                    'triggerId' => $triggerId,
379
                ]),
380
            ];
381
        } else {
382
            $dataArray = ['success' => 0];
383
        }
384
385
        return new JsonResponse($dataArray);
386
    }
387
}
388