src/EventListener/PostValidate/PopupPostValidateTransformer.php line 75

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\Popup\Popup;
  4. use App\Entity\Popup as Entity;
  5. use App\Service\AfterReadStorage;
  6. use App\Service\Manager\FavoriteGifManager;
  7. use App\Service\Manager\MediaManager;
  8. use App\Service\Manager\PopupManager;
  9. use App\Service\Manager\PopupTypeManager;
  10. use App\Service\Manager\SiteManager;
  11. use App\Service\UserProvider;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpKernel\Event\ViewEvent;
  16. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  17. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  18. class PopupPostValidateTransformer implements EventSubscriberInterface
  19. {
  20.     private $popupTypeManager;
  21.     private $userProvider;
  22.     private $siteManager;
  23.     private $popupManager;
  24.     private $normalizer;
  25.     private $mediaManager;
  26.     private $afterReadStorage;
  27.     private $favoriteGifManager;
  28.     public function __construct(
  29.         UserProvider $userProvider,
  30.         PopupTypeManager $popupTypeManager,
  31.         SiteManager $siteManager,
  32.         PopupManager $popupManager,
  33.         MediaManager $mediaManager,
  34.         NormalizerInterface $normalizer,
  35.         AfterReadStorage $afterReadStorage,
  36.         FavoriteGifManager $favoriteGifManager
  37.     ) {
  38.         $this->popupTypeManager $popupTypeManager;
  39.         $this->userProvider $userProvider;
  40.         $this->siteManager $siteManager;
  41.         $this->popupManager $popupManager;
  42.         $this->normalizer $normalizer;
  43.         $this->mediaManager $mediaManager;
  44.         $this->afterReadStorage $afterReadStorage;
  45.         $this->favoriteGifManager $favoriteGifManager;
  46.     }
  47.     public static function getSubscribedEvents()
  48.     {
  49.         return [
  50.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  51.         ];
  52.     }
  53.     public function supportTransformation($payloadRequest $request)
  54.     {
  55.         return $payload instanceof Popup &&
  56.             ($request->isMethod($request::METHOD_POST) || $request->isMethod($request::METHOD_PUT));
  57.     }
  58.     /**
  59.      * @param ViewEvent $event
  60.      */
  61.     public function transform(ViewEvent $event)
  62.     {
  63.         $request $event->getRequest();
  64.         /** @var Popup $payload */
  65.         $payload $event->getControllerResult();
  66.         if (!$this->supportTransformation($payload$request)) {
  67.             return;
  68.         }
  69.         if (null === $type $this->popupTypeManager->getOneById($payload->type)) {
  70.             throw new BadRequestHttpException("Type not found");
  71.         }
  72.         if (null === $site $this->siteManager->getSiteById($event->getRequest()->get('id'))) {
  73.             throw new BadRequestHttpException("Site not found");
  74.         }
  75.         $media null;
  76.         if ($payload->media !== null) {
  77.             $media $this->mediaManager->getOneByGuid($payload->media);
  78.         }
  79.         $logo null;
  80.         if ($payload->logo !== null) {
  81.             $logo $this->mediaManager->getOneByGuid($payload->logo);
  82.         }
  83.         $popup null;
  84.         if ($request->isMethod($request::METHOD_POST)) {
  85.             $popup $this->popupManager->create(Entity::create(
  86.                 $this->userProvider->getUser(),
  87.                 $site,
  88.                 $type,
  89.                 $payload->isEnabled,
  90.                 $media,
  91.                 $logo,
  92.                 $payload->getConfigurationAsArray()
  93.             ));
  94.         }
  95.         if ($request->isMethod($request::METHOD_PUT)) {
  96.             /** @var Entity $popup */
  97.             $popup $this->afterReadStorage->getObject();
  98.             $popup->update(
  99.                 $this->userProvider->getUser(),
  100.                 $site,
  101.                 $type,
  102.                 $payload->isEnabled,
  103.                 $media,
  104.                 $logo,
  105.                 $payload->getConfigurationAsArray()
  106.             );
  107.             $this->popupManager->save($popup);
  108.         }
  109.         if (null !== $popup) {
  110.             $event->setResponse(new JsonResponse($this->normalizer->normalize($popup)));
  111.         }
  112.     }
  113. }