Spaces:
No application file
No application file
File size: 2,193 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<?php
namespace Mautic\NotificationBundle\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Mautic\CoreBundle\Controller\CommonController;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\NotificationBundle\Entity\Notification;
use Mautic\NotificationBundle\Model\NotificationModel;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
class AppCallbackController extends CommonController
{
public function indexAction(Request $request, EntityManagerInterface $em): JsonResponse
{
$requestBody = json_decode($request->getContent(), true);
$contactRepo = $em->getRepository(Lead::class);
$matchData = [
'email' => $requestBody['email'],
];
/** @var Lead $contact */
$contact = $contactRepo->findOneBy($matchData);
if (null === $contact) {
$contact = new Lead();
$contact->setEmail($requestBody['email']);
$contact->setLastActive(new \DateTime());
}
$pushIdCreated = false;
if (array_key_exists('push_id', $requestBody)) {
$pushIdCreated = true;
$contact->addPushIDEntry($requestBody['push_id'], $requestBody['enabled'], true);
$contactRepo->saveEntity($contact);
}
$statCreated = false;
if (array_key_exists('stat', $requestBody)) {
$stat = $requestBody['stat'];
$notificationRepo = $em->getRepository(Notification::class);
$notification = $notificationRepo->getEntity($stat['notification_id']);
if (null !== $notification) {
$statCreated = true;
$notificationModel = $this->getModel('notification');
\assert($notificationModel instanceof NotificationModel);
$notificationModel->createStatEntry($notification, $contact, $stat['source'], $stat['source_id']);
}
}
return new JsonResponse([
'contact_id' => $contact->getId(),
'stat_recorded' => $statCreated,
'push_id_recorded' => $pushIdCreated ?: 'existing',
]);
}
}
|