src/EventListener/PostValidate/UpdateSitePermissionPostValidateTransformation.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\SitePermission\UpdateSitePermission;
  4. use App\Entity\SitePermission;
  5. use App\Service\AfterReadStorage;
  6. use App\Service\Manager\SitePermissionManager;
  7. use App\Service\Manager\SitePermissionTypeManager;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\HttpKernel\Event\ViewEvent;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. class UpdateSitePermissionPostValidateTransformation implements EventSubscriberInterface
  15. {
  16.     private $request;
  17.     private $sitePermissionManager;
  18.     private $afterReadStorage;
  19.     private $sitePermissionTypeManager;
  20.     public function __construct(
  21.         RequestStack $requestStack,
  22.         SitePermissionManager $sitePermissionManager,
  23.         SitePermissionTypeManager $sitePermissionTypeManager,
  24.         AfterReadStorage $afterReadStorage
  25.     ) {
  26.         $this->request $requestStack->getCurrentRequest();
  27.         $this->sitePermissionManager $sitePermissionManager;
  28.         $this->afterReadStorage $afterReadStorage;
  29.         $this->sitePermissionTypeManager $sitePermissionTypeManager;
  30.     }
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  35.         ];
  36.     }
  37.     public function supportTransformation($payloadRequest $request)
  38.     {
  39.         return $payload instanceof UpdateSitePermission && $request->isMethod($request::METHOD_PUT);
  40.     }
  41.     /**
  42.      * @param ViewEvent $event
  43.      */
  44.     public function transform(ViewEvent $event)
  45.     {
  46.         /** @var UpdateSitePermission $payload */
  47.         $payload $event->getControllerResult();
  48.         if (!$this->supportTransformation($payload$event->getRequest())) {
  49.             return;
  50.         }
  51.         if (null === $permissionType $this->sitePermissionTypeManager->getPermissionTypeById($payload->permission)) {
  52.             throw new NotFoundHttpException("No such permission");
  53.         }
  54.         /** @var SitePermission $sitePermission */
  55.         $sitePermission $this->afterReadStorage->getObject();
  56.         $this->sitePermissionManager->updateSitePermission($sitePermission$permissionType);
  57.         $this->sitePermissionManager->save($sitePermission);
  58.         $event->setResponse(new JsonResponse($this->sitePermissionManager->normalize($sitePermission)));
  59.     }
  60. }