src/EventSubscriber/EasyApiSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\Bin;
  5. use App\Entity\Action;
  6. use App\Entity\User;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpKernel\Event\ViewEvent;
  12. use Symfony\Component\HttpKernel\KernelEvents;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. class EasyApiSubscriber implements EventSubscriberInterface
  15. {
  16. private $entityManager;
  17. private $userPasswordHasher;
  18. public function __construct(EntityManagerInterface $entityManager,UserPasswordHasherInterface $userPasswordHasher)
  19. {
  20. $this->entityManager $entityManager;
  21. $this->userPasswordHasher $userPasswordHasher;
  22. }
  23. public static function getSubscribedEvents()
  24. {
  25. return [
  26.     KernelEvents::VIEW => ['run'EventPriorities::PRE_VALIDATE],
  27. ];
  28. }
  29.     public function run(ViewEvent $event)
  30.     {
  31.         $entity $event->getControllerResult();
  32.         $method $event->getRequest()->getMethod();
  33.         if (($entity instanceof Bin) && $method === 'POST') {
  34.             $this->setCreateBin($event);
  35.         }elseif(($entity instanceof Bin) && $method === 'PUT'){
  36.             $this->setUpdateBin($event);
  37.         }elseif(($entity instanceof User) && $method === 'PUT'){
  38.         $this->setUpdateUser($event);
  39.         }
  40.     }
  41. public function setCreateBin(ViewEvent $event)
  42. {
  43.     $entity $event->getControllerResult();
  44. if (!($entity instanceof Bin)) {
  45. return;
  46. }
  47. $action = new Action();
  48. $action->setBin($entity);
  49. $action->setColumns($entity->getColumns());
  50. $date=new \DateTimeImmutable('@'.strtotime('now'));
  51. $action->setDateAt($date);
  52. //$action->setDateUp(null);
  53. $entity->addAction($action);
  54. }
  55.     public function setUpdateBin(ViewEvent $event)
  56.     {
  57.         $entity $event->getControllerResult();
  58.         if (!($entity instanceof Bin)) {
  59.             return;
  60.         }
  61.         $date=new \DateTimeImmutable('@'.strtotime('now'));
  62.         $qb $this->entityManager->createQueryBuilder(); // $em is your entity manager
  63.         $old =  $this->entityManager->getRepository(Action::class)
  64.             ->createQueryBuilder('c')
  65.             ->select('c')
  66.             ->andWhere('c.bin = :bin')
  67.             ->andWhere($qb->expr()->isNull("c.dateUp"))
  68.             ->setParameter('bin'$entity)
  69.             ->orderBy('c.id''DESC')
  70.             ->setMaxResults(1)
  71.             ->getQuery()
  72.             ->getOneOrNullResult();
  73.         if($old){
  74.             $old->setDateUp($date);
  75.             $this->entityManager->persist($old);
  76.         }
  77.         $action = new Action();
  78.         $action->setBin($entity);
  79.         $action->setColumns($entity->getColumns());
  80.         $action->setDateAt($date);
  81.         $entity->addAction($action);
  82.     }
  83.     public function setUpdateUser(ViewEvent $event)
  84.     {
  85.         $entity $event->getControllerResult();
  86.         if (!($entity instanceof User)) {
  87.             return;
  88.         }
  89. if(!empty($entity->getPassword())){
  90.   //      $entity->setPassword($this->userPasswordHasher->hashPassword($entity, $entity->getPassword()));
  91. }
  92. }
  93. }