src/EventSubscriber/EasyAdminSubscriber.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\Security\Core\Security;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  7. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  8. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Entity\User;
  11. use App\Entity\PersonInTrouble;
  12. use App\Entity\UdsCollectedInfo;
  13. use App\Entity\CoesCollectedInfo;
  14. use App\Constant\Enum\UserRoles;
  15. class EasyAdminSubscriber implements EventSubscriberInterface
  16. {
  17.     private Security $security;
  18.     private RequestStack $requestStack;
  19.     private UserPasswordHasherInterface $passwordHasher;
  20.     private EntityManagerInterface $entityManager;
  21.     
  22.     public function __construct(Security $security,
  23.                                 RequestStack $request_stack,
  24.                                 UserPasswordHasherInterface $password_hasher,
  25.                                 EntityManagerInterface $entity_manager)
  26.     {
  27.         $this->security $security;
  28.         $this->requestStack $request_stack;
  29.         $this->passwordHasher $password_hasher;
  30.         $this->entityManager $entity_manager;
  31.     }
  32.     
  33.     public static function getSubscribedEvents() : array
  34.     {
  35.         return [
  36.             BeforeEntityPersistedEvent::class => [
  37.                 ['beforeCreateUser'],
  38.                 ['beforeCreateUdsCollectedInfo'],
  39.                 ['beforeCreateCoesCollectedInfo'],
  40.             ],
  41.             BeforeEntityUpdatedEvent::class => [
  42.                 ['beforeUpdateUdsCollectedInfo'],
  43.                 ['beforeUpdateCoesCollectedInfo']
  44.             ],
  45.         ];
  46.     }
  47.     public function beforeCreateUser(BeforeEntityPersistedEvent $event) : void
  48.     {
  49.         if (!$this->security->isGranted(UserRoles::ROLE_ADMIN->name))
  50.             return;
  51.         
  52.         $entity $event->getEntityInstance();        
  53.         if (!$entity instanceof User)
  54.             return;
  55.         
  56.         $request $this->requestStack->getCurrentRequest();
  57.         if (!$request->request->has('User'))
  58.             return;
  59.         
  60.         $plaintextPassword = ($request->request->get('User'))['password']['first'];
  61.         $hashedPassword $this->passwordHasher->hashPassword($entity$plaintextPassword);
  62.         $entity->setPassword($hashedPassword);
  63.     }
  64.     
  65.     public function beforeCreateUdsCollectedInfo(BeforeEntityPersistedEvent $event) : void
  66.     {
  67.         if (!($this->security->isGranted(UserRoles::ROLE_ADMIN->name) || $this->security->isGranted(UserRoles::ROLE_UDS->name)))
  68.             return;
  69.         
  70.         $entity $event->getEntityInstance();        
  71.         if (!$entity instanceof UdsCollectedInfo)
  72.             return;
  73.         
  74.         $folder $entity->getFolder();
  75.         $personInTrouble $folder->getPersonInTrouble();
  76.         
  77.         if ((!$personInTrouble instanceof PersonInTrouble) || ($personInTrouble->getId() !== $entity->getPersonInTrouble()->getId()))
  78.         {
  79.             $folder->setPersonInTrouble($entity->getPersonInTrouble());
  80.             $this->entityManager->persist($folder);
  81.         }
  82.     }
  83.     
  84.     public function beforeUpdateUdsCollectedInfo(BeforeEntityUpdatedEvent $event) : void
  85.     {
  86.         if (!($this->security->isGranted(UserRoles::ROLE_ADMIN->name) || $this->security->isGranted(UserRoles::ROLE_UDS->name)))
  87.             return;
  88.         
  89.         $entity $event->getEntityInstance();        
  90.         if (!$entity instanceof UdsCollectedInfo)
  91.             return;
  92.         
  93.         $folder $entity->getFolder();
  94.         $personInTrouble $folder->getPersonInTrouble();
  95.         
  96.         if ((!$personInTrouble instanceof PersonInTrouble) || ($personInTrouble->getId() !== $entity->getPersonInTrouble()->getId()))
  97.         {
  98.             $folder->setPersonInTrouble($entity->getPersonInTrouble());
  99.         }
  100.     }
  101.     
  102.     public function beforeCreateCoesCollectedInfo(BeforeEntityPersistedEvent $event) : void
  103.     {
  104.         if (!($this->security->isGranted(UserRoles::ROLE_ADMIN->name) || $this->security->isGranted(UserRoles::ROLE_COES->name)))
  105.             return;
  106.         
  107.         $entity $event->getEntityInstance();        
  108.         if (!$entity instanceof CoesCollectedInfo)
  109.             return;
  110.         
  111.         $folder $entity->getFolder();
  112.         $folder->setPertinenzaTerritorialeUnitaDiStrada($entity->getPertinenzaTerritorialeUnitaDiStrada());
  113.         $this->entityManager->persist($folder);
  114.     }
  115.     
  116.     public function beforeUpdateCoesCollectedInfo(BeforeEntityUpdatedEvent $event) : void
  117.     {
  118.         if (!($this->security->isGranted(UserRoles::ROLE_ADMIN->name) || $this->security->isGranted(UserRoles::ROLE_COES->name)))
  119.             return;
  120.         
  121.         $entity $event->getEntityInstance();        
  122.         if (!$entity instanceof CoesCollectedInfo)
  123.             return;
  124.         
  125.         $folder $entity->getFolder();
  126.         $folder->setPertinenzaTerritorialeUnitaDiStrada($entity->getPertinenzaTerritorialeUnitaDiStrada());
  127.     }
  128. }