<?php
namespace App\EventSubscribers\Main;
use App\Entity\Main\Tracking;
use App\Entity\Main\TrackingFacebookEvent;
use App\Events\Main\Coaching\CoachingCancelledEvent;
use App\Events\Main\Coaching\CoachingClickedOffEvent;
use App\Events\Main\Coaching\CoachingClickedOnEvent;
use App\Services\EmailManager;
use App\Services\TrackingManager;
use App\Tools\BrulacoachV2;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class CoachingSubscriber
* @package App\EventSubscribers\Main
*/
class CoachingSubscriber implements EventSubscriberInterface
{
const
COACHING_CANCELLED = 'coaching.cancelled',
COACHING_CLICKED_OFF = 'coaching.clicked.off',
COACHING_CLICKED_ON = 'coaching.clicked.on'
;
/**
* CoolCoachingSubscriber constructor.
* @param EntityManagerInterface $entityManager
* @param LoggerInterface $logger
* @param TrackingManager $trackingFactory
*/
public function __construct(
private EntityManagerInterface $entityManager,
private LoggerInterface $logger,
private TrackingManager $trackingFactory,
private BrulacoachV2 $brulacoachV2
) {
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return array(
self::COACHING_CANCELLED => "coachingCancelled",
self::COACHING_CLICKED_OFF => 'onCoachingClickedOff',
self::COACHING_CLICKED_ON => 'onCoachingClickedOn'
);
}
/**
* @param CoachingCancelledEvent $event
* @throws \Exception
*/
public function coachingCancelled(CoachingCancelledEvent $event)
{
/** @var BrulacoachV2 $brulacoach */
try {
$this->brulacoachV2->unregister($event->getUser());
} catch (\Exception $e) {
$this->logger->error("Couldn't stop coaching for user : {$event->getUser()->getId()}, {$event->getUser()->getEmail()} because of {$e->getMessage()}");
}
}
/**
* @param CoachingClickedOffEvent $event
*/
public function onCoachingClickedOff(CoachingClickedOffEvent $event)
{
$eventName = "GA_Coaching_ClickOff";
$tracking = $this->trackingFactory->getCurrentTracking();
//Create coaching clicked off event, unless the event already exists - unique event per user
try {
if ($tracking instanceof Tracking && !$tracking->hasEvent($eventName)) {
$clickOffEvent = $this->entityManager->getRepository(TrackingFacebookEvent::class)->createNewEvent($eventName);
$tracking->addEvent($clickOffEvent);
$this->entityManager->flush();
}
} catch (\Exception $e) {
$this->logger->error("Could not create GA_Coaching_ClickOff event for tracking: {$tracking->getTrackingId()} because of error: {$e->getMessage()}");
}
}
/**
* @param CoachingClickedOnEvent $event
*/
public function onCoachingClickedOn(CoachingClickedOnEvent $event)
{
$eventName = "GA_Coaching_ClickOn";
$tracking = $this->trackingFactory->getCurrentTracking();
//Create coaching clicked on event, unless the event already exists - unique event per user
try {
if ($tracking instanceof Tracking && !$tracking->hasEvent($eventName)) {
$clickOnEvent = $this->entityManager->getRepository(TrackingFacebookEvent::class)->createNewEvent($eventName);
$tracking->addEvent($clickOnEvent);
$this->entityManager->flush();
}
} catch (\Exception $e) {
$this->logger->error("Could not create GA_Coaching_ClickOn event for tracking: {$tracking->getTrackingId()} because of error: {$e->getMessage()}");
}
}
}