src/Modules/Cemetery/EventSubscriber/Record/RecordPostSerializerSubscriber.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Modules\Cemetery\EventSubscriber\Record;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Repository\App\Ticket\TicketRepository;
  5. use App\Services\UtilsService;
  6. use DateTimeZone;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ViewEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use App\Services\TicketService;
  11. class RecordPostSerializerSubscriber implements EventSubscriberInterface
  12. {
  13.     private $ticketService;
  14.     private $utilsService;
  15.     private $ticketRepository;
  16.     public function __construct(
  17.         TicketService $ticketService,
  18.         UtilsService $utilsService,
  19.         TicketRepository $ticketRepository)
  20.     {
  21.         $this->ticketService $ticketService;
  22.         $this->utilsService $utilsService;
  23.         $this->ticketRepository $ticketRepository;
  24.     }
  25.     /**
  26.      * {@inheritdoc}
  27.      */
  28.     public static function getSubscribedEvents() {
  29.         return [
  30.             KernelEvents::VIEW => ['onKernelView'EventPriorities::POST_SERIALIZE]
  31.         ];
  32.     }
  33.     /**
  34.      * @param ViewEvent $event
  35.      * @throws \App\Exception\AccessDeniedException
  36.      * @throws \Doctrine\ORM\NonUniqueResultException
  37.      */
  38.     public function onKernelView(ViewEvent $event)
  39.     {
  40.         if ($this->utilsService->isAPublicRequest($event)) {
  41.             return;
  42.         }
  43.         $request $event->getRequest();
  44.         $route $request->attributes->get('_route');
  45.         $routes = array(
  46.             'api_records_create_record_collection',
  47.             'api_records_get_records_collection',
  48.             'api_records_get_item',
  49.             'api_records_put_item'
  50.         );
  51.         if (!in_array($route$routes))
  52.             return;
  53.         $this->ticketRepository->disableSoftDeleteable();
  54.         $recordResult $event->getControllerResult();
  55.         $recordResult json_decode($recordResulttrue);
  56.         if(empty($recordResult)){
  57.             return;
  58.         }
  59.         if ('api_records_get_records_collection' === $route) {
  60.             foreach ($recordResult as &$record) {
  61.                 $record['ticket'] = $this->ticketService->formatNormalize($record['ticket']);
  62.                 if(!is_null($record["ticket"]["dateExpiration"])){
  63.                     $this->setDateToTicket($record);
  64.                 }
  65.             }
  66.         } else {
  67.             $recordResult['ticket'] = $this->ticketService->formatNormalize($recordResult['ticket']);
  68.             if(!is_null($recordResult["ticket"]["dateExpiration"])) {
  69.                 $this->setDateToTicket($recordResult['ticket']);
  70.             }
  71.         }
  72.         $recordResult json_encode($recordResult);
  73.         $event->setControllerResult($recordResult);
  74.     }
  75.     /**
  76.      * @param $ticket
  77.      * @return int
  78.      */
  79.     private function setDateToTicket(&$ticket){
  80.         try {
  81.             $dateZone = new \DateTime($ticket["dateExpiration"], new \DateTimeZone($ticket["vendorTimeZone"]));;
  82.             $dataZoneSecondsOffSet $dateZone->getOffset();
  83.             $timeStamp $dateZone->getTimestamp() - $dataZoneSecondsOffSet;
  84.             $ticket["dateExpiration"] = $dateZone->setTimestamp($timeStamp)->format('Y-m-d\TH:i:sP');
  85.         }catch (\Exception $exception){
  86.             return -1;
  87.         }
  88.     }
  89. }