src/EventSubscriber/UpdateVersionSubscriber.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Controller\Api\UpdateVersionCheckedControllerInterface;
  4. use App\Entity\UpdateVersion;
  5. use App\Exception\OutdatedItemsVersionException;
  6. use App\Service\NotificationService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. class UpdateVersionSubscriber implements EventSubscriberInterface
  12. {
  13.   private $notificationService;
  14.   private $em;
  15.   public function __construct(NotificationService $notificationServiceEntityManagerInterface $entityManager)
  16.   {
  17.     $this->notificationService $notificationService;
  18.     $this->em $entityManager;
  19.   }
  20.   public function onKernelController(ControllerEvent $event)
  21.   {
  22.       $controller $event->getController();
  23.       if (is_array($controller)) {
  24.           $controller $controller[0];
  25.       }
  26.       if ($controller instanceof UpdateVersionCheckedControllerInterface) {
  27.           if(!$event->getRequest()->headers->has('X-Items-Version')){
  28.             return;
  29.           }
  30.           $appItemsVersion filter_var($event->getRequest()->headers->get('X-Items-Version'), FILTER_SANITIZE_NUMBER_INT);
  31.           $systemItemsVersion $this->em->getRepository(UpdateVersion::class)->findOneBy([
  32.             'type' => UpdateVersion::TYPE_ITEM_MODELS
  33.           ]);
  34.           if(!$systemItemsVersion){
  35.             return;
  36.           }
  37.           if($appItemsVersion != $systemItemsVersion->getVersion()){
  38.             throw new OutdatedItemsVersionException('Items version is out of date. Download current version.'$systemItemsVersion->getVersion());
  39.           }
  40.           return;
  41.       }
  42.   }
  43.   public static function getSubscribedEvents()
  44.   {
  45.     return [
  46.       KernelEvents::CONTROLLER => 'onKernelController'
  47.     ];
  48.   }
  49. }