src/EventSubscribers/Main/CoachingSubscriber.php line 93

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscribers\Main;
  3. use App\Entity\Main\Tracking;
  4. use App\Entity\Main\TrackingFacebookEvent;
  5. use App\Events\Main\Coaching\CoachingCancelledEvent;
  6. use App\Events\Main\Coaching\CoachingClickedOffEvent;
  7. use App\Events\Main\Coaching\CoachingClickedOnEvent;
  8. use App\Services\EmailManager;
  9. use App\Services\TrackingManager;
  10. use App\Tools\BrulacoachV2;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Psr\Container\ContainerInterface;
  13. use Psr\Log\LoggerInterface;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. /**
  16.  * Class CoachingSubscriber
  17.  * @package App\EventSubscribers\Main
  18.  */
  19. class CoachingSubscriber implements EventSubscriberInterface
  20. {
  21.     const
  22.         COACHING_CANCELLED 'coaching.cancelled',
  23.         COACHING_CLICKED_OFF 'coaching.clicked.off',
  24.         COACHING_CLICKED_ON 'coaching.clicked.on'
  25.     ;
  26.     /**
  27.      * CoolCoachingSubscriber constructor.
  28.      * @param EntityManagerInterface $entityManager
  29.      * @param LoggerInterface $logger
  30.      * @param TrackingManager $trackingFactory
  31.      */
  32.     public function __construct(
  33.         private EntityManagerInterface $entityManager,
  34.         private LoggerInterface $logger,
  35.         private TrackingManager $trackingFactory,
  36.         private BrulacoachV2 $brulacoachV2
  37.     ) {
  38.     }
  39.     /**
  40.      * @return array
  41.      */
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return array(
  45.             self::COACHING_CANCELLED => "coachingCancelled",
  46.             self::COACHING_CLICKED_OFF => 'onCoachingClickedOff',
  47.             self::COACHING_CLICKED_ON => 'onCoachingClickedOn'
  48.         );
  49.     }
  50.     /**
  51.      * @param CoachingCancelledEvent $event
  52.      * @throws \Exception
  53.      */
  54.     public function coachingCancelled(CoachingCancelledEvent $event)
  55.     {
  56.         /** @var BrulacoachV2 $brulacoach */
  57.         try {
  58.             $this->brulacoachV2->unregister($event->getUser());
  59.         } catch (\Exception $e) {
  60.             $this->logger->error("Couldn't stop coaching for user : {$event->getUser()->getId()}{$event->getUser()->getEmail()} because of {$e->getMessage()}");
  61.         }
  62.     }
  63.     /**
  64.      * @param CoachingClickedOffEvent $event
  65.      */
  66.     public function onCoachingClickedOff(CoachingClickedOffEvent $event)
  67.     {
  68.         $eventName "GA_Coaching_ClickOff";
  69.         $tracking $this->trackingFactory->getCurrentTracking();
  70.         //Create coaching clicked off event, unless the event already exists - unique event per user
  71.         try {
  72.             if ($tracking instanceof Tracking && !$tracking->hasEvent($eventName)) {
  73.                 $clickOffEvent $this->entityManager->getRepository(TrackingFacebookEvent::class)->createNewEvent($eventName);
  74.                 $tracking->addEvent($clickOffEvent);
  75.                 $this->entityManager->flush();
  76.             }
  77.         } catch (\Exception $e) {
  78.             $this->logger->error("Could not create GA_Coaching_ClickOff event for tracking: {$tracking->getTrackingId()} because of error: {$e->getMessage()}");
  79.         }
  80.     }
  81.     /**
  82.      * @param CoachingClickedOnEvent $event
  83.      */
  84.     public function onCoachingClickedOn(CoachingClickedOnEvent $event)
  85.     {
  86.         $eventName "GA_Coaching_ClickOn";
  87.         $tracking $this->trackingFactory->getCurrentTracking();
  88.         //Create coaching clicked on event, unless the event already exists - unique event per user
  89.         try {
  90.             if ($tracking instanceof Tracking && !$tracking->hasEvent($eventName)) {
  91.                 $clickOnEvent $this->entityManager->getRepository(TrackingFacebookEvent::class)->createNewEvent($eventName);
  92.                 $tracking->addEvent($clickOnEvent);
  93.                 $this->entityManager->flush();
  94.             }
  95.         } catch (\Exception $e) {
  96.             $this->logger->error("Could not create GA_Coaching_ClickOn event for tracking: {$tracking->getTrackingId()} because of error: {$e->getMessage()}");
  97.         }
  98.     }
  99. }