src/EventSubscriber/SiteSubscriber.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\ClientProfile;
  4. use App\Entity\SiteStatus;
  5. use App\Event\SiteCreatedEvent;
  6. use App\Event\TrackerInstalledEvent;
  7. use App\Repository\SiteStatusRepository;
  8. use App\Service\SiteNotificationSender;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. class SiteSubscriber implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var SiteStatusRepository
  16.      */
  17.     private $siteStatusRepository;
  18.     /**
  19.      * @var EntityManagerInterface
  20.      */
  21.     private $entityManager;
  22.     /**
  23.      * @var TranslatorInterface
  24.      */
  25.     private $translator;
  26.     /**
  27.      * @var SiteNotificationSender
  28.      */
  29.     private $notificationSender;
  30.     public function __construct(
  31.         SiteStatusRepository $siteStatusRepository,
  32.         EntityManagerInterface $entityManager,
  33.         TranslatorInterface $translator,
  34.         SiteNotificationSender $notificationSender
  35.     )
  36.     {
  37.         $this->siteStatusRepository $siteStatusRepository;
  38.         $this->entityManager $entityManager;
  39.         $this->translator $translator;
  40.         $this->notificationSender $notificationSender;
  41.     }
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             SiteCreatedEvent::class => 'onSiteCreated',
  46.             TrackerInstalledEvent::class => 'onTrackerInstalled',
  47.         ];
  48.     }
  49.     public function onSiteCreated(SiteCreatedEvent $event)
  50.     {
  51.         $site $event->getSite();
  52.         $siteStatuses = [];
  53.         foreach (SiteStatus::TYPES as $type) {
  54.             $siteStatus $this->siteStatusRepository->findByTypeAndSiteId($type$site->getId());
  55.             if (null === $siteStatus) {
  56.                 $siteStatuses[] = SiteStatus::create(
  57.                     $site,
  58.                     $this->translator->trans('site_status.name.'.$type),
  59.                     $type
  60.                 );
  61.             }
  62.         }
  63.         if (!empty($siteStatuses)) {
  64.             foreach ($siteStatuses as $siteStatus) {
  65.                 $this->entityManager->persist($siteStatus);
  66.             }
  67.             $this->entityManager->flush();
  68.         }
  69.     }
  70.     public function onTrackerInstalled(TrackerInstalledEvent $event)
  71.     {
  72.         $site $event->getSite();
  73.         $this->notificationSender->sendTrackerInstalledEmail($site);
  74.         $clientProfiles $this->profileRepository->findAllBySitePermissions($site);
  75.         /** @var ClientProfile $clientProfile */
  76.         foreach ($clientProfiles as $clientProfile) {
  77.             $clientProfile->setOnboard(false);
  78.         }
  79.         $this->entityManager->flush();
  80.     }
  81. }