Spaces:
No application file
No application file
mautic
/
app
/bundles
/IntegrationsBundle
/Sync
/Notification
/Handler
/ContactNotificationHandler.php
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Sync\Notification\Handler; | |
use Doctrine\ORM\EntityManagerInterface; | |
use Mautic\IntegrationsBundle\Sync\DAO\Sync\Order\NotificationDAO; | |
use Mautic\IntegrationsBundle\Sync\Notification\Helper\UserSummaryNotificationHelper; | |
use Mautic\IntegrationsBundle\Sync\Notification\Writer; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\Object\Contact; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\MauticSyncDataExchange; | |
use Mautic\LeadBundle\Entity\Lead; | |
use Mautic\LeadBundle\Entity\LeadEventLog; | |
use Mautic\LeadBundle\Entity\LeadEventLogRepository; | |
class ContactNotificationHandler implements HandlerInterface | |
{ | |
private ?string $integrationDisplayName = null; | |
private ?string $objectDisplayName = null; | |
public function __construct( | |
private Writer $writer, | |
private LeadEventLogRepository $leadEventRepository, | |
private EntityManagerInterface $em, | |
private UserSummaryNotificationHelper $userNotificationHelper | |
) { | |
} | |
public function getIntegration(): string | |
{ | |
return MauticSyncDataExchange::NAME; | |
} | |
public function getSupportedObject(): string | |
{ | |
return Contact::NAME; | |
} | |
/** | |
* @throws \Doctrine\ORM\ORMException | |
*/ | |
public function writeEntry(NotificationDAO $notificationDAO, string $integrationDisplayName, string $objectDisplayName): void | |
{ | |
$this->integrationDisplayName = $integrationDisplayName; | |
$this->objectDisplayName = $objectDisplayName; | |
$this->writer->writeAuditLogEntry( | |
$notificationDAO->getIntegration(), | |
$notificationDAO->getMauticObject(), | |
$notificationDAO->getMauticObjectId(), | |
'sync', | |
[ | |
'integrationObject' => $notificationDAO->getIntegrationObject(), | |
'integrationObjectId' => $notificationDAO->getIntegrationObjectId(), | |
'message' => $notificationDAO->getMessage(), | |
] | |
); | |
$this->writeEventLogEntry($notificationDAO->getIntegration(), $notificationDAO->getMauticObjectId(), $notificationDAO->getMessage()); | |
// Store these so we can send one notice to the user | |
$this->userNotificationHelper->storeSummaryNotification($integrationDisplayName, $objectDisplayName, $notificationDAO->getMauticObjectId()); | |
} | |
public function finalize(): void | |
{ | |
$this->userNotificationHelper->writeNotifications( | |
Contact::NAME, | |
'mautic.integration.sync.user_notification.contact_message' | |
); | |
} | |
/** | |
* @throws \Doctrine\ORM\ORMException | |
*/ | |
private function writeEventLogEntry(string $integration, int $contactId, string $message): void | |
{ | |
$eventLog = new LeadEventLog(); | |
$eventLog | |
->setLead($this->em->getReference(Lead::class, $contactId)) | |
->setBundle('integrations') | |
->setObject($integration) | |
->setAction('sync') | |
->setProperties( | |
[ | |
'message' => $message, | |
'integration' => $this->integrationDisplayName, | |
'object' => $this->objectDisplayName, | |
] | |
); | |
$this->leadEventRepository->saveEntity($eventLog); | |
$this->leadEventRepository->detachEntity($eventLog); | |
} | |
} | |