<?php
namespace App\EventSubscriber;
use App\Entity\CampaignItem;
use App\Entity\CampaignTemplate;
use App\Event\PopupCreatedEvent;
use App\Repository\CampaignTemplateRepository;
use App\Repository\SiteStatusRepository;
use App\Service\Manager\PopupCampaignItemManager;
use App\Service\Manager\PopupManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PopupSubscriber implements EventSubscriberInterface
{
/**
* @var PopupManager
*/
private $popupManager;
/**
* @var CampaignTemplateRepository
*/
private $campaignTemplateRepository;
/**
* @var SiteStatusRepository
*/
private $siteStatusRepository;
/**
* @var PopupCampaignItemManager
*/
private $popupCampaignItemManager;
public function __construct(
PopupManager $popupManager,
CampaignTemplateRepository $campaignTemplateRepository,
SiteStatusRepository $siteStatusRepository,
PopupCampaignItemManager $popupCampaignItemManager
)
{
$this->popupManager = $popupManager;
$this->campaignTemplateRepository = $campaignTemplateRepository;
$this->siteStatusRepository = $siteStatusRepository;
$this->popupCampaignItemManager = $popupCampaignItemManager;
}
public static function getSubscribedEvents()
{
return [
PopupCreatedEvent::class => 'onPopupCreated',
];
}
public function onPopupCreated(PopupCreatedEvent $event)
{
$popup = $event->getPopup();
if ($this->popupManager->isCampaignAvailable($popup)) {
$campaignTemplate = $this->campaignTemplateRepository->findOneByType(CampaignTemplate::TYPE_LEAD_MAGNET);
foreach ($campaignTemplate->getItems() as $campaignItem) {
$data = $campaignItem->getData();
if (CampaignItem::TYPE_CONTACT_STATUS === $campaignItem->getType() && $statusType = $data['type'] ?? null) {
$siteStatus = $this->siteStatusRepository->findByTypeAndSiteId($statusType, $popup->getSite()->getId());
if (null === $siteStatus) {
continue;
}
$data['id'] = $siteStatus->getId();
unset($data['type']);
}
$this->popupCampaignItemManager->create(
$popup,
$campaignItem->getType(),
$data
);
}
}
}
}