Spaces:
No application file
No application file
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', | |
]); | |
} | |
} | |