<?php
namespace App\EventSubscriber\EasyAdmin;
use App\Entity\Appointment;
use App\Entity\EventLog;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class EventLogSubscriber implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage)
{
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return [
AfterEntityUpdatedEvent::class => 'onAfterEntityUpdatedEvent',
];
}
public function onAfterEntityUpdatedEvent(AfterEntityUpdatedEvent $event)
{
$entityInstance = $event->getEntityInstance();
if ($entityInstance instanceof Appointment) {
$eventLog = new EventLog();
$eventLog->setAction(EventLog::APPOINTMENT_EDIT);
$eventLog->setUser($this->tokenStorage->getToken()->getUser());
$eventLog->setAppointment($entityInstance);
$this->entityManager->persist($eventLog);
$this->entityManager->flush();
}
}
}