<?php
namespace App\EventSubscriber;
use App\Entity\CerfaData;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use App\Entity\User;
use App\Event\WorklogEvent;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
protected $entityManager;
protected $kernelRootDir;
private $tokenStorage;
public function __construct(
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage,
private RequestStack $requestStack,
private EventDispatcherInterface $dispatcher,
) {
$this->entityManager=$entityManager;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return array(
BeforeEntityUpdatedEvent::class => ['preUpdateEvent'],
);
}
public function preUpdateEvent(BeforeEntityUpdatedEvent $event){
/** @var User $user */
$user = $this->tokenStorage->getToken()->getUser();
$entity = $event->getEntityInstance();
if($entity instanceof CerfaData){
$cntrlBlock = $entity->getBlockUpdate();
$cntrlUser = $entity->getBlockUser();
$vehicle = $entity->getVehicle();
$msg = '';
if( $cntrlBlock === true && $cntrlUser === null){
$entity->setBlockUser($user);
$msg = 'LOCKED';
} else if( $cntrlBlock === false && $cntrlUser !== null) {
$entity->setBlockUser();
$msg = 'UNLOCKED';
}
$event = new WorklogEvent($vehicle, "3en1 edited $msg");
$this->dispatcher->dispatch($event,'iris.worklog');
}
}
}