src/EventSubscriber/PopupSubscriber.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\CampaignItem;
  4. use App\Entity\CampaignTemplate;
  5. use App\Event\PopupCreatedEvent;
  6. use App\Repository\CampaignTemplateRepository;
  7. use App\Repository\SiteStatusRepository;
  8. use App\Service\Manager\PopupCampaignItemManager;
  9. use App\Service\Manager\PopupManager;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class PopupSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var PopupManager
  15.      */
  16.     private $popupManager;
  17.     /**
  18.      * @var CampaignTemplateRepository
  19.      */
  20.     private $campaignTemplateRepository;
  21.     /**
  22.      * @var SiteStatusRepository
  23.      */
  24.     private $siteStatusRepository;
  25.     /**
  26.      * @var PopupCampaignItemManager
  27.      */
  28.     private $popupCampaignItemManager;
  29.     public function __construct(
  30.         PopupManager $popupManager,
  31.         CampaignTemplateRepository $campaignTemplateRepository,
  32.         SiteStatusRepository $siteStatusRepository,
  33.         PopupCampaignItemManager $popupCampaignItemManager
  34.     )
  35.     {
  36.         $this->popupManager $popupManager;
  37.         $this->campaignTemplateRepository $campaignTemplateRepository;
  38.         $this->siteStatusRepository $siteStatusRepository;
  39.         $this->popupCampaignItemManager $popupCampaignItemManager;
  40.     }
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             PopupCreatedEvent::class => 'onPopupCreated',
  45.         ];
  46.     }
  47.     public function onPopupCreated(PopupCreatedEvent $event)
  48.     {
  49.         $popup $event->getPopup();
  50.         if ($this->popupManager->isCampaignAvailable($popup)) {
  51.             $campaignTemplate $this->campaignTemplateRepository->findOneByType(CampaignTemplate::TYPE_LEAD_MAGNET);
  52.             foreach ($campaignTemplate->getItems() as $campaignItem) {
  53.                 $data $campaignItem->getData();
  54.                 if (CampaignItem::TYPE_CONTACT_STATUS === $campaignItem->getType() && $statusType $data['type'] ?? null) {
  55.                     $siteStatus $this->siteStatusRepository->findByTypeAndSiteId($statusType$popup->getSite()->getId());
  56.                     if (null === $siteStatus) {
  57.                         continue;
  58.                     }
  59.                     $data['id'] = $siteStatus->getId();
  60.                     unset($data['type']);
  61.                 }
  62.                 $this->popupCampaignItemManager->create(
  63.                     $popup,
  64.                     $campaignItem->getType(),
  65.                     $data
  66.                 );
  67.             }
  68.         }
  69.     }
  70. }