src/EventSubscriber/LastUpdateComplianceSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Symfony\EventListener\EventPriorities;
  4. use App\Entity\Compliance;
  5. use App\Entity\Document;
  6. use App\Entity\Section;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpKernel\Event\ViewEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use DateTimeImmutable;
  13. final class LastUpdateComplianceSubscriber implements EventSubscriberInterface
  14. {
  15.     private EntityManagerInterface $entityManager;
  16.     public function __construct(EntityManagerInterface $entityManager,)
  17.     {
  18.         $this->entityManager $entityManager;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             KernelEvents::VIEW => ['lastUpdateCompliance'EventPriorities::POST_WRITE],
  24.         ];
  25.     }
  26.     public function lastUpdateCompliance(ViewEvent $event): void
  27.     {
  28.         $event->getControllerResult() ? $entityInstance $event->getControllerResult(): $entityInstance $event->getRequest()->get('data');
  29.         $method $event->getRequest()->getMethod();
  30.         if (($entityInstance instanceof Compliance) && (Request::METHOD_PUT === $method || Request::METHOD_POST === $method || Request::METHOD_DELETE === $method)) {
  31.             $section $entityInstance->getSection();
  32.             $this->updateSection($section);
  33.             $document $section->getDocument();
  34.             $this->updateDocument($document);
  35.         } else if (($entityInstance instanceof Section) && Request::METHOD_DELETE === $method) {
  36.             $document $entityInstance->getDocument();
  37.             $this->updateDocument($document);
  38.         } else {
  39.             return;
  40.         }
  41.     }
  42.     public function updateSection($section): void
  43.     {
  44.         $idSection $section->getId();
  45.         try {
  46.             $sql "select  max(c.last_update_compliance) as last_update_compliance  from compliance c
  47.                             where  c.section_id = $idSection";
  48.             $conn $this->entityManager->getConnection();
  49.             $stmt $conn->prepare($sql);
  50.             $lastUpdateCompliance $stmt->executeQuery();
  51.             $lastUpdateCompliance $lastUpdateCompliance->fetchAssociative();
  52.             $lastUpdateCompliance DateTimeImmutable::createFromFormat('Y-m-d H:i:s'$lastUpdateCompliance['last_update_compliance']);
  53.             $lastUpdateCompliance $section->setLastUpdateCompliance($lastUpdateCompliance): $section->setLastUpdateCompliance(null);
  54.             $this->entityManager->persist($section);
  55.             $this->entityManager->flush();
  56.         } catch (\Throwable $e) {
  57.             header('Access-Control-Allow-Origin: *');
  58.             dd($e->getMessage());
  59.         }
  60.     }
  61.     public function updateDocument($document): void
  62.     {
  63.         $idDocument $document->getId();
  64.         $sql "select  max(c.last_update_compliance) as last_update_compliance  from compliance c , section s
  65.                             where  c.section_id = s.id and s.document_id = $idDocument";
  66.         $conn $this->entityManager->getConnection();
  67.         $stmt $conn->prepare($sql);
  68.         $lastUpdateCompliance $stmt->executeQuery();
  69.         $lastUpdateCompliance $lastUpdateCompliance->fetchAssociative();
  70.         $lastUpdateCompliance DateTimeImmutable::createFromFormat('Y-m-d H:i:s'$lastUpdateCompliance['last_update_compliance']);
  71.         $lastUpdateCompliance $document->setLastUpdateCompliance($lastUpdateCompliance): $document->setLastUpdateCompliance(null);
  72.         $this->entityManager->persist($document);
  73.         $this->entityManager->flush();
  74.     }
  75. }