src/EventSubscriber/MeasurementViewSubscriber.php line 69

Open in your IDE?
  1. <?php
  2. /**
  3.  * @license SILK SOFTWARE HOUSE SP Z O O
  4.  */
  5. namespace App\EventSubscriber;
  6. use App\Entity\DemoToken;
  7. use App\Entity\Measurement;
  8. use App\Factory\MeasurementViewFactory;
  9. use App\Model\View\MeasurementView;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Doctrine\ORM\EntityManagerInterface as EntityManager;
  12. use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpKernel\KernelEvents;
  15. /**
  16.  * Class MeasurementViewSubscriber.
  17.  */
  18. class MeasurementViewSubscriber implements EventSubscriberInterface
  19. {
  20.     /**
  21.      * Factory.
  22.      *
  23.      * @var MeasurementViewFactory
  24.      */
  25.     private $factory;
  26.     /**
  27.      * Entity manager.
  28.      *
  29.      * @var EntityManager
  30.      */
  31.     private $entityManager;
  32.     /**
  33.      * MeasurementViewSubscriber constructor.
  34.      *
  35.      * @param MeasurementViewFactory $factory
  36.      * @param EntityManagerInterface $entityManager
  37.      */
  38.     public function __construct(MeasurementViewFactory $factoryEntityManagerInterface $entityManager)
  39.     {
  40.         $this->factory $factory;
  41.         $this->entityManager $entityManager;
  42.     }
  43.     /**
  44.      * Get subscribed events.
  45.      *
  46.      * @return array
  47.      */
  48.     public static function getSubscribedEvents()
  49.     {
  50.         // return the subscribed events, their methods and priorities
  51.         return [
  52.             KernelEvents::CONTROLLER_ARGUMENTS => [
  53.                 ['onControllerArguments'1],
  54.             ],
  55.         ];
  56.     }
  57.     /**
  58.      * On kernel controller.
  59.      *
  60.      * @param ControllerArgumentsEvent $event
  61.      */
  62.     public function onControllerArguments(ControllerArgumentsEvent $event)
  63.     {
  64.         if (!$event->isMasterRequest() || !($view $this->createView($event))) {
  65.             return;
  66.         }
  67.         $arguments $event->getArguments();
  68.         foreach ($arguments as $key => $argument) {
  69.             if ($argument instanceof MeasurementView) {
  70.                 $arguments[$key] = $view;
  71.                 $event->setArguments($arguments);
  72.                 return;
  73.             }
  74.         }
  75.     }
  76.     /**
  77.      * Create view.
  78.      *
  79.      * @param ControllerArgumentsEvent $event
  80.      *
  81.      * @return MeasurementView|null
  82.      */
  83.     private function createView(ControllerArgumentsEvent $event)
  84.     {
  85.         foreach ($event->getArguments() as $argument) {
  86.             if ($argument instanceof Measurement) {
  87.                 return $this->factory->create($argument);
  88.             }
  89.         }
  90.         if ($measurementId = ((int) $event->getRequest()->get('id'))) {
  91.             if ($measurement $this->entityManager->getRepository(Measurement::class)->find($measurementId)) {
  92.                 return $this->factory->create($measurement);
  93.             }
  94.         }
  95.         if (!empty($event->getRequest()->get('token'))) {
  96.             /** @var DemoToken $demoToken */
  97.             $demoToken $this->entityManager->getRepository(DemoToken::class)->findOneBy(['token' => $event->getRequest()->get('token')]);
  98.             if ($demoToken) {
  99.                 return $this->factory->create($demoToken->getMeasurement());
  100.             }
  101.         }
  102.         return null;
  103.     }
  104. }