Passed
Push — master ( 0e55e0...d49067 )
by Dominik
13:15 queued 09:42
created

MailgunEventController::getRepository()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
1
<?php
2
3
namespace Azine\MailgunWebhooksBundle\Controller;
4
5
use Azine\MailgunWebhooksBundle\DependencyInjection\AzineMailgunWebhooksExtension;
6
use Azine\MailgunWebhooksBundle\Entity\MailgunAttachment;
7
use Azine\MailgunWebhooksBundle\Entity\MailgunCustomVariable;
8
use Azine\MailgunWebhooksBundle\Entity\MailgunEvent;
9
use Azine\MailgunWebhooksBundle\Entity\MailgunWebhookEvent;
10
use Azine\MailgunWebhooksBundle\Entity\Repositories\MailgunEventRepository;
11
use Doctrine\ORM\EntityManager;
12
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
13
use Symfony\Component\HttpFoundation\File\UploadedFile;
14
use Symfony\Component\HttpFoundation\JsonResponse;
15
use Symfony\Component\HttpFoundation\Request;
16
use Symfony\Component\HttpFoundation\Response;
17
18
/**
19
 * MailgunEvent controller.
20
 */
21
class MailgunEventController extends AbstractController
22
{
23
    /**
24
     * Lists all MailgunEvent entities.
25
     *
26
     * @param Request $request
27
     * @param int     $page
28
     * @param int     $pageSize
29
     *
30
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
31
     */
32
    public function indexAction(Request $request, $page, $pageSize)
33
    {
34
        $params = array();
35
36
        // get general filter options
37
        $params['filterOptions'] = array(
38
                'orderBy' => $this->getRepository()->getFieldsToOrderBy(),
39
                'eventTypes' => array_merge(array('all', 'unopened'), $this->getRepository()->getEventTypes()),
40
                'domains' => $this->getRepository()->getDomains(),
41
                'recipients' => $this->getRepository()->getRecipients(),
42
        );
43
44
        // get filter criteria from session
45
        $session = $request->getSession();
46
        $page = $session->get('page', $page);
47
        $pageSize = $session->get('pageSize', $pageSize);
48
        $domain = $session->get('domain', $params['filterOptions']['domains'][0]);
49
        $eventType = $session->get('eventType', $params['filterOptions']['eventTypes'][0]);
50
        $search = $session->get('search', '');
51
        $recipient = $session->get('recipient', '');
52
        $orderBy = $session->get('orderBy', 'timestamp');
53
        $orderDirection = $session->get('orderDirection', 'desc');
54
55
        // update filter criteria from get-request
56
        $page = $request->get('page', $page);
57
        $pageSize = $request->get('pageSize', $pageSize);
58
        if ($session->get('pageSize') != $pageSize) {
59
            $page = 1;
60
        }
61
        if ($request->get('clear')) {
62
            $eventType = 'all';
63
        } else {
64
            $eventType = $request->get('eventType', $eventType);
65
        }
66
67
        // update filter criteria from post-request
68
        $filter = $request->get('filter');
69
        if (is_array($filter)) {
70
            $domain = $filter['domain'];
71
            $eventType = $filter['eventType'];
72
            $search = trim($filter['search']);
73
            $filter['search'] = $search;
74
            $recipient = trim($filter['recipient']);
75
            $filter['recipient'] = $recipient;
76
            $orderBy = $filter['orderBy'];
77
            $orderDirection = $filter['orderDirection'];
78
        } else {
79
            $filter = array();
80
            $filter['domain'] = $domain;
81
            $filter['eventType'] = $eventType;
82
            $filter['search'] = $search;
83
            $filter['recipient'] = $recipient;
84
            $filter['orderBy'] = $orderBy;
85
            $filter['orderDirection'] = $orderDirection;
86
        }
87
88
        // store filter criteria back to session
89
        $session->set('page', $page);
90
        $session->set('pageSize', $pageSize);
91
        $session->set('domain', $domain);
92
        $session->set('eventType', $eventType);
93
        $session->set('search', $search);
94
        $session->set('recipient', $recipient);
95
        $session->set('orderBy', $orderBy);
96
        $session->set('orderDirection', $orderDirection);
97
98
        // set params for filter-form
99
        $params['currentFilters'] = array(
100
                    'domain' => $domain,
101
                    'orderBy' => $orderBy,
102
                    'orderDirection' => $orderDirection,
103
                    'eventType' => $eventType,
104
                    'pageSize' => $pageSize,
105
                    'search' => $search,
106
                    'recipient' => $recipient,
107
                );
108
109
        $eventCount = $this->getRepository()->getEventCount($filter);
110
        // validate the page/pageSize and with the total number of result entries
111
        if ($eventCount > 0 && (($page - 1) * $pageSize >= $eventCount)) {
112
            $maxPage = max(1, ceil($eventCount / $pageSize));
113
114
            return $this->redirect($this->generateUrl('mailgunevent_list', array('page' => $maxPage, 'pageSize' => $pageSize)).'?'.$request->getQueryString());
115
        }
116
117
        // get the events
118
        $params['events'] = $this->getRepository()->getEvents($filter, array($orderBy => $orderDirection), $pageSize, ($page - 1) * $pageSize);
119
        $params['emailWebViewRoute'] = $this->container->getParameter(AzineMailgunWebhooksExtension::PREFIX.'_'.AzineMailgunWebhooksExtension::WEB_VIEW_ROUTE);
0 ignored issues
show
Bug introduced by
The method getParameter() does not exist on Psr\Container\ContainerInterface. It seems like you code against a sub-type of Psr\Container\ContainerInterface such as Symfony\Component\Depend...tion\ContainerInterface. ( Ignorable by Annotation )

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

119
        /** @scrutinizer ignore-call */ 
120
        $params['emailWebViewRoute'] = $this->container->getParameter(AzineMailgunWebhooksExtension::PREFIX.'_'.AzineMailgunWebhooksExtension::WEB_VIEW_ROUTE);
Loading history...
120
        $params['emailWebViewToken'] = $this->container->getParameter(AzineMailgunWebhooksExtension::PREFIX.'_'.AzineMailgunWebhooksExtension::WEB_VIEW_TOKEN);
121
122
        // set the params for the pager
123
        $params['paginatorParams'] = array(
124
                    'paginationPath' => 'mailgunevent_list',
125
                    'pageSize' => $pageSize,
126
                    'currentPage' => $page,
127
                    'currentFilters' => $params['currentFilters'],
128
                    'totalItems' => $eventCount,
129
                    'lastPage' => ceil($eventCount / $pageSize),
130
                    'showAlwaysFirstAndLast' => true,
131
                );
132
133
        return $this->render('AzineMailgunWebhooksBundle:MailgunEvent:index.html.twig', $params);
134
    }
135
136
    /**
137
     * Get the MailgunEvent Repository.
138
     *
139
     * @return MailgunEventRepository
140
     */
141
    private function getRepository()
142
    {
143
        return $this->getDoctrine()->getManager()->getRepository('AzineMailgunWebhooksBundle:MailgunEvent');
144
    }
145
146
    public function createFromWebhookAction(Request $request)
147
    {
148
        // old webhooks api
149
        $params = $request->request->all();
150
151
        if (is_array($params) && !empty($params)) {
152
            return $this->createEventOldApi($params);
153
154
        } else {
155
            // new webhooks api
156
            $json = json_decode($request->getContent(), true);
157
            return $this->createEventNewApi($json);
158
        }
159
    }
160
161
    private function createEventNewApi($paramsPre){
162
163
        $params = array_change_key_case($paramsPre, CASE_LOWER);
164
165
        if (sizeof($params) != sizeof($paramsPre)) {
166
            $params['params_contained_duplicate_keys'] = $paramsPre;
167
        }
168
169
        /////////////////////////////////////////////////////
170
        // signature validation
171
        $signatureData = $params['signature'];
172
        $eventData = $params['event-data'];
173
174
        // check if the timestamp is fresh
175
        $timestamp = $signatureData['timestamp'];
176
        $tsAge = abs(time() - $timestamp);
177
        if ($tsAge > 15) {
178
            return new Response("Signature verification failed. Timestamp too old abs(".time()." - $timestamp) = $tsAge", 401);
179
        }
180
181
        // validate post-data
182
        $key = $this->container->getParameter(AzineMailgunWebhooksExtension::PREFIX.'_'.AzineMailgunWebhooksExtension::API_KEY);
183
        $token = $signatureData['token'];
184
        $expectedSignature = hash_hmac('SHA256', $timestamp.$token, $key);
185
        if ($expectedSignature != $signatureData['signature']) {
186
            return new Response('Signature verification failed.', 401);
187
        }
188
189
        /////////////////////////////////////////////////////
190
        // create event-entity
191
        try {
192
            // create event & populate with supplied data
193
            $event = new MailgunEvent();
194
195
            // token
196
            if (array_key_exists('token', $signatureData)) {
197
                $event->setToken($signatureData['token']);
198
                unset($signatureData['token']);
199
            }
200
            // timestamp
201
            if (array_key_exists('timestamp', $signatureData)) {
202
                $event->setTimestamp($signatureData['timestamp']);
203
                unset($signatureData['timestamp']);
204
            }
205
            // signature
206
            if (array_key_exists('signature', $signatureData)) {
207
                $event->setSignature($signatureData['signature']);
208
                unset($signatureData['signature']);
209
            }
210
211
            // event
212
            if (array_key_exists('event', $eventData)) {
213
                $event->setEvent($eventData['event']);
214
                unset($eventData['event']);
215
            }
216
            // domain
217
            if (array_key_exists('envelope', $eventData)) {
218
                $envelope = $eventData['envelope'];
219
                $sender = $envelope['sender'];
220
                $event->setDomain(substr($sender, strrpos($sender,"@") + 1));
221
222
                // ip
223
                if (array_key_exists('sending-ip', $envelope)) {
224
                    $event->setIp($envelope['sending-ip']);
225
                    unset($eventData['envelope']['sending-ip']);
226
                }
227
228
                unset($eventData['envelope']['sender']);
229
            }
230
            // description & reason
231
            if (array_key_exists('delivery-status', $eventData)) {
232
                $description = array_key_exists('message', $eventData['delivery-status']) ? $eventData['delivery-status']['message']." " : "";
233
                $description .= array_key_exists('description', $eventData['delivery-status']) ? $eventData['delivery-status']['description'] : "";
234
235
                $event->setDescription($description);
236
                unset($eventData['delivery-status']['message']);
237
                unset($eventData['delivery-status']['description']);
238
239
                // delivery status code
240
                if (array_key_exists('code', $eventData['delivery-status'])) {
241
                    $event->setErrorCode($eventData['delivery-status']['code']);
242
                    unset($eventData['delivery-status']['code']);
243
                }
244
245
            } else if (array_key_exists('reject', $eventData)) {
246
                $description = array_key_exists('description', $eventData['reject']) ? $eventData['reject']['description'] : "";
247
                $reason = array_key_exists('reason', $eventData['reject']) ? $eventData['reject']['reason'] : "";
248
                $event->setDescription($description);
249
                $event->setReason($reason);
250
                unset($eventData['delivery-status']['description']);
251
                unset($eventData['delivery-status']['reason']);
252
            }
253
            // reason
254
            if (array_key_exists('reason', $eventData)) {
255
                $event->setReason($eventData['reason']);
256
                unset($eventData['reason']);
257
            }
258
            // recipient
259
            if (array_key_exists('recipient', $eventData)) {
260
                $event->setRecipient($eventData['recipient']);
261
                unset($eventData['recipient']);
262
            }
263
            if(array_key_exists("geolocation", $eventData)) {
264
                $geolocation = $eventData['geolocation'];
265
                // country
266
                if (array_key_exists('country', $geolocation)) {
267
                    $event->setCountry($geolocation['country']);
268
                    unset($eventData['geolocation']['country']);
269
                }
270
                // city
271
                if (array_key_exists('city', $geolocation)) {
272
                    $event->setCity($geolocation['city']);
273
                    unset($eventData['geolocation']['city']);
274
                }
275
                // region
276
                if (array_key_exists('region', $geolocation)) {
277
                    $event->setRegion($geolocation['region']);
278
                    unset($eventData['geolocation']['region']);
279
                }
280
            }
281
            if(array_key_exists('client-info', $eventData)){
282
                $clientInfo = $eventData['client-info'];
283
                // clientName
284
                if (array_key_exists('client-name', $clientInfo)) {
285
                    $event->setClientName($clientInfo['client-name']);
286
                    unset($eventData['client-info']['client-name']);
287
                }
288
                // clientOs
289
                if (array_key_exists('client-os', $clientInfo)) {
290
                    $event->setClientOs($clientInfo['client-os']);
291
                    unset($eventData['client-info']['client-os']);
292
                }
293
                // clientType
294
                if (array_key_exists('client-type', $clientInfo)) {
295
                    $event->setClientType($clientInfo['client-type']);
296
                    unset($eventData['client-info']['client-type']);
297
                }
298
                // deviceType
299
                if (array_key_exists('device-type', $clientInfo)) {
300
                    $event->setDeviceType($clientInfo['device-type']);
301
                    unset($eventData['client-info']['device-type']);
302
                }
303
                // userAgent
304
                if (array_key_exists('user-agent', $clientInfo)) {
305
                    $event->setUserAgent($clientInfo['user-agent']);
306
                    unset($eventData['client-info']['user-agent']);
307
                }
308
            }
309
310
            if(array_key_exists('message', $eventData)){
311
                $message = $eventData['message'];
312
313
                // messageHeaders
314
                if (array_key_exists('headers', $message)) {
315
316
                    $headers = $message['headers'];
317
                    // messageId
318
                    if (array_key_exists('message-id', $headers)) {
319
                        $trimmedMessageId = trim(trim($headers['message-id']), '<>');
320
                        $event->setMessageId($trimmedMessageId);
321
                        unset($eventData['message']['headers']['message-id']);
322
323
                        // set message domain from message id
324
                        if($event->getDomain() == null){
325
                            $event->setDomain(substr($trimmedMessageId, strrpos($trimmedMessageId,"@") + 1));
326
                        }
327
                    }
328
329
                    $event->setMessageHeaders(json_encode($headers));
330
                    unset($eventData['message']['headers']);
331
                }
332
            }
333
            // campaignName && campaignId
334
            if (array_key_exists('campaigns', $eventData)) {
335
                $event->setCampaignName(print_r($eventData['campaigns'], true));
336
                $event->setCampaignId(print_r($eventData['campaigns'], true));
337
                unset($eventData['campaigns']);
338
            }
339
            // tag
340
            if (array_key_exists('tags', $eventData)) {
341
                $event->setTag(print_r($eventData['tags'], true));
342
                unset($eventData['tags']);
343
            }
344
            // url
345
            if (array_key_exists('url', $eventData)) {
346
                $event->setUrl($eventData['url']);
347
                unset($eventData['url']);
348
            } else if (array_key_exists('storage', $eventData)){
349
                $event->setUrl($eventData['storage']['url']);
350
                unset($eventData['storage']['url']);
351
            }
352
353
            // mailingList
354
            if (array_key_exists('recipients', $eventData)) {
355
                $event->setmailingList(print_r($eventData['recipients'],true));
356
                unset($eventData['recipients']);
357
            }
358
359
            $manager = $this->container->get('doctrine.orm.entity_manager');
360
            $manager->persist($event);
361
362
            $eventData = $this->removeEmptyArrayElements($eventData);
363
364
            // process the remaining posted values
365
            foreach ($eventData as $key => $value) {
366
                if (0 === strpos($key, 'attachment-')) {
367
                    // create event attachments
368
                    $attachment = new MailgunAttachment($event);
369
                    $attachment->setCounter(substr($key, 11));
0 ignored issues
show
Bug introduced by
substr($key, 11) of type string is incompatible with the type integer expected by parameter $counter of Azine\MailgunWebhooksBun...ttachment::setCounter(). ( Ignorable by Annotation )

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

369
                    $attachment->setCounter(/** @scrutinizer ignore-type */ substr($key, 11));
Loading history...
370
371
                    // get the file
372
                    /** @var $value UploadedFile */
373
                    $attachment->setContent(file_get_contents($value->getPathname()));
374
                    $attachment->setSize($value->getSize());
375
                    $attachment->setType($value->getMimeType());
376
                    $attachment->setName($value->getFilename());
377
378
                    $manager->persist($attachment);
379
                } else {
380
                    // create custom-variables for event
381
                    $customVar = new MailgunCustomVariable($event);
382
                    $customVar->setVariableName($key);
383
                    $customVar->setContent($value);
384
385
                    $manager->persist($customVar);
386
                }
387
            }
388
389
            // save all entities
390
            $manager->flush();
391
392
            // Dispatch an event about the logging of a Webhook-call
393
            $this->get('event_dispatcher')->dispatch(MailgunEvent::CREATE_EVENT, new MailgunWebhookEvent($event));
394
395
        } catch (\Exception $e) {
396
            $this->container->get('logger')->warning('AzineMailgunWebhooksBundle: creating entities failed: '.$e->getMessage());
0 ignored issues
show
Bug introduced by
The method warning() does not exist on stdClass. ( Ignorable by Annotation )

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

396
            $this->container->get('logger')->/** @scrutinizer ignore-call */ warning('AzineMailgunWebhooksBundle: creating entities failed: '.$e->getMessage());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
397
            $this->container->get('logger')->warning($e->getTraceAsString());
398
            return new Response(print_r($params, true) . 'AzineMailgunWebhooksBundle: creating entities failed: '.$e->getMessage(), 500);
399
400
        }
401
402
        // send response
403
        return new Response('Thanx, for the info.', 200);
404
    }
405
406
    private function createEventOldApi($paramsPre){
407
408
        $params = array_change_key_case($paramsPre, CASE_LOWER);
409
410
        if (sizeof($params) != sizeof($paramsPre)) {
411
            $params['params_contained_duplicate_keys'] = $paramsPre;
412
        }
413
414
        // validate post-data
415
        $key = $this->container->getParameter(AzineMailgunWebhooksExtension::PREFIX.'_'.AzineMailgunWebhooksExtension::API_KEY);
416
        $timestamp = $params['timestamp'];
417
418
        // check if the timestamp is fresh
419
        $now = time();
420
        $tsAge = abs($now - $timestamp);
421
        if ($tsAge > 15) {
422
            return new Response("Signature verification failed. Timestamp too old abs($now - $timestamp)=$tsAge", 401);
423
        }
424
425
        $token = $params['token'];
426
        $expectedSignature = hash_hmac('SHA256', $timestamp.$token, $key);
427
        if ($expectedSignature != $params['signature']) {
428
            return new Response('Signature verification failed.', 401);
429
        }
430
431
        // drop unused variables
432
        if (array_key_exists('x-mailgun-sid', $params)) {
433
            unset($params['x-mailgun-sid']);
434
        }
435
        if (array_key_exists('attachment-count', $params)) {
436
            unset($params['attachment-count']);
437
        }
438
439
        try {
440
            // create event & populate with supplied data
441
            $event = new MailgunEvent();
442
443
            // event
444
            if (array_key_exists('event', $params)) {
445
                $event->setEvent($params['event']);
446
                unset($params['event']);
447
            }
448
449
            // domain
450
            if (array_key_exists('domain', $params)) {
451
                $event->setDomain($params['domain']);
452
                unset($params['domain']);
453
            }
454
            // description
455
            if (array_key_exists('description', $params)) {
456
                $event->setDescription($params['description']);
457
                unset($params['description']);
458
            }
459
            // reason
460
            if (array_key_exists('reason', $params)) {
461
                $event->setReason($params['reason']);
462
                unset($params['reason']);
463
            }
464
            // recipient
465
            if (array_key_exists('recipient', $params)) {
466
                $event->setRecipient($params['recipient']);
467
                unset($params['recipient']);
468
            }
469
            // errorCode
470
            if (array_key_exists('code', $params)) {
471
                $event->setErrorCode($params['code']);
472
                unset($params['code']);
473
            }
474
            // ip
475
            if (array_key_exists('ip', $params)) {
476
                $event->setIp($params['ip']);
477
                unset($params['ip']);
478
            }
479
            // error
480
            if (array_key_exists('error', $params)) {
481
                $event->setDescription($params['error']);
482
                unset($params['error']);
483
            }
484
            // country
485
            if (array_key_exists('country', $params)) {
486
                $event->setCountry($params['country']);
487
                unset($params['country']);
488
            }
489
            // city
490
            if (array_key_exists('city', $params)) {
491
                $event->setCity($params['city']);
492
                unset($params['city']);
493
            }
494
            // region
495
            if (array_key_exists('region', $params)) {
496
                $event->setRegion($params['region']);
497
                unset($params['region']);
498
            }
499
            // campaignId
500
            if (array_key_exists('campaign-id', $params)) {
501
                $event->setCampaignId($params['campaign-id']);
502
                unset($params['campaign-id']);
503
            }
504
            // campaignName	{
505
            if (array_key_exists('campaign-name', $params)) {
506
                $event->setCampaignName($params['campaign-name']);
507
                unset($params['campaign-name']);
508
            }
509
            // clientName
510
            if (array_key_exists('client-name', $params)) {
511
                $event->setClientName($params['client-name']);
512
                unset($params['client-name']);
513
            }
514
            // clientOs
515
            if (array_key_exists('client-os', $params)) {
516
                $event->setClientOs($params['client-os']);
517
                unset($params['client-os']);
518
            }
519
            // clientType
520
            if (array_key_exists('client-type', $params)) {
521
                $event->setClientType($params['client-type']);
522
                unset($params['client-type']);
523
            }
524
            // deviceType
525
            if (array_key_exists('device-type', $params)) {
526
                $event->setDeviceType($params['device-type']);
527
                unset($params['device-type']);
528
            }
529
            // mailingList
530
            if (array_key_exists('mailing-list', $params)) {
531
                $event->setmailingList($params['mailing-list']);
532
                unset($params['mailing-list']);
533
            }
534
            // messageHeaders
535
            if (array_key_exists('message-headers', $params)) {
536
                $event->setMessageHeaders($params['message-headers']);
537
                unset($params['message-headers']);
538
            }
539
            // messageId
540
            if (array_key_exists('message-id', $params)) {
541
                $trimmedMessageId = trim(trim($params['message-id']), '<>');
542
                $event->setMessageId($trimmedMessageId);
543
                unset($params['message-id']);
544
            }
545
            // tag
546
            if (array_key_exists('tag', $params)) {
547
                $event->setTag($params['tag']);
548
                unset($params['tag']);
549
            }
550
            // x-mailgun-tag
551
            if (array_key_exists('x-mailgun-tag', $params)) {
552
                $event->setTag($params['x-mailgun-tag']);
553
                unset($params['x-mailgun-tag']);
554
            }
555
            // userAgent
556
            if (array_key_exists('user-agent', $params)) {
557
                $event->setUserAgent($params['user-agent']);
558
                unset($params['user-agent']);
559
            }
560
            // url
561
            if (array_key_exists('url', $params)) {
562
                $event->setUrl($params['url']);
563
                unset($params['url']);
564
            }
565
            // token
566
            if (array_key_exists('token', $params)) {
567
                $event->setToken($params['token']);
568
                unset($params['token']);
569
            }
570
            // timestamp
571
            if (array_key_exists('timestamp', $params)) {
572
                $event->setTimestamp($params['timestamp']);
573
                unset($params['timestamp']);
574
            }
575
            // signature
576
            if (array_key_exists('signature', $params)) {
577
                $event->setSignature($params['signature']);
578
                unset($params['signature']);
579
            }
580
581
            $manager = $this->container->get('doctrine.orm.entity_manager');
582
            $manager->persist($event);
583
584
            $params = $this->removeEmptyArrayElements($params);
585
586
            // process the remaining posted values
587
            foreach ($params as $key => $value) {
588
                if (0 === strpos($key, 'attachment-')) {
589
                    // create event attachments
590
                    $attachment = new MailgunAttachment($event);
591
                    $attachment->setCounter(substr($key, 11));
0 ignored issues
show
Bug introduced by
substr($key, 11) of type string is incompatible with the type integer expected by parameter $counter of Azine\MailgunWebhooksBun...ttachment::setCounter(). ( Ignorable by Annotation )

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

591
                    $attachment->setCounter(/** @scrutinizer ignore-type */ substr($key, 11));
Loading history...
592
593
                    // get the file
594
                    /** @var UploadedFile $value */
595
                    $attachment->setContent(file_get_contents($value->getPathname()));
596
                    $attachment->setSize($value->getSize());
597
                    $attachment->setType($value->getMimeType());
598
                    $attachment->setName($value->getFilename());
599
                    $manager->persist($attachment);
600
                } else {
601
                    // create custom-variables for event
602
                    $customVar = new MailgunCustomVariable($event);
603
                    $customVar->setVariableName($key);
604
                    $customVar->setContent($value);
605
                    $manager->persist($customVar);
606
                }
607
            }
608
609
            // save all entities
610
            $manager->flush();
611
612
            // Dispatch an event about the logging of a Webhook-call
613
            $this->get('event_dispatcher')->dispatch(MailgunEvent::CREATE_EVENT, new MailgunWebhookEvent($event));
614
615
        } catch (\Exception $e) {
616
            $this->container->get('logger')->warning('AzineMailgunWebhooksBundle: creating entities failed: '.$e->getMessage());
617
            $this->container->get('logger')->warning($e->getTraceAsString());
618
            return new Response('AzineMailgunWebhooksBundle: creating entities failed: '.$e->getMessage(), 500);
619
        }
620
621
        // send response
622
        return new Response('Thanx, for the info.', 200);
623
    }
624
625
    /**
626
     * Finds and displays a MailgunEvent entity.
627
     */
628
    public function showAction($id)
629
    {
630
        $em = $this->getDoctrine()->getManager();
631
632
        $entity = $em->getRepository('AzineMailgunWebhooksBundle:MailgunEvent')->find($id);
633
634
        if (!$entity) {
635
            throw $this->createNotFoundException('Unable to find MailgunEvent entity.');
636
        }
637
638
        return $this->render('AzineMailgunWebhooksBundle:MailgunEvent:show.html.twig', array(
639
            'entity' => $entity,
640
        ));
641
    }
642
643
    /**
644
     * Deletes a MailgunEvent entity.
645
     */
646
    public function deleteAction(Request $request)
647
    {
648
        $id = $request->get('eventId');
649
650
        $em = $this->getDoctrine()->getManager();
651
        $entity = $em->getRepository('AzineMailgunWebhooksBundle:MailgunEvent')->find($id);
652
653
        if (!$entity) {
654
            throw $this->createNotFoundException('Unable to find MailgunEvent entity.');
655
        }
656
657
        $em->remove($entity);
658
        $em->flush();
659
660
        if ($request->isXmlHttpRequest()) {
661
            return new JsonResponse(array('success' => true));
662
        }
663
664
        $session = $request->getSession();
665
        $page = $session->get('page', 1);
666
        $pageSize = $session->get('pageSize', 25);
667
668
        return $this->redirect($this->generateUrl('mailgunevent_list', array('page' => $page, 'pageSize' => $pageSize)));
669
    }
670
671
    /**
672
     * @param $haystack
673
     * @return array without empty elements (recursively)
674
     */
675
    public function removeEmptyArrayElements($haystack)
676
    {
677
        foreach ($haystack as $key => $value) {
678
            if (is_array($value)) {
679
                $haystack[$key] = $this->removeEmptyArrayElements($haystack[$key]);
680
            }
681
682
            if (empty($haystack[$key])) {
683
                unset($haystack[$key]);
684
            }
685
        }
686
        return $haystack;
687
    }
688
}
689