src/EventListener/PostValidate/VariableContentPostValidateTransformer.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DataTransformer\VariableContentOptionOutputDataTransformer;
  4. use App\DTO\Option\VariableContentOutput;
  5. use App\DTO\Option\VariableContent;
  6. use App\DTO\VariableContentDTO;
  7. use App\Service\Manager\OptionManager;
  8. use App\Service\Manager\SiteManager;
  9. use App\Service\UserProvider;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpKernel\Event\ViewEvent;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. class VariableContentPostValidateTransformer implements EventSubscriberInterface
  16. {
  17.     private $request;
  18.     private $siteManager;
  19.     private $optionManager;
  20.     private $userProvider;
  21.     private $transformer;
  22.     public function __construct(
  23.         VariableContentOptionOutputDataTransformer $transformer,
  24.         RequestStack $requestStack,
  25.         SiteManager $siteManager,
  26.         OptionManager $optionManager,
  27.         UserProvider $userProvider
  28.     ) {
  29.         $this->request $requestStack->getCurrentRequest();
  30.         $this->siteManager $siteManager;
  31.         $this->optionManager $optionManager;
  32.         $this->userProvider $userProvider;
  33.         $this->transformer $transformer;
  34.     }
  35.     public static function getSubscribedEvents()
  36.     {
  37.         return [
  38.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  39.         ];
  40.     }
  41.     public function supportTransformation($payload)
  42.     {
  43.         return $payload instanceof VariableContent;
  44.     }
  45.     public function transform(ViewEvent $event)
  46.     {
  47.         /** @var VariableContent $payload */
  48.         $payload $event->getControllerResult();
  49.         if (!$this->supportTransformation($payload)) {
  50.             return;
  51.         }
  52.         $site $this->siteManager->getSiteById($this->request->get('id'));
  53.         if ($site === null) {
  54.             throw new NotFoundHttpException();
  55.         }
  56.         $newConfiguration = new VariableContentDTO();
  57.         $newConfiguration->setIsEnabled($payload->isEnabled);
  58.         if (null === $variableContentConfiguration $this->optionManager->getVariableContentOptionForSite($site)) {
  59.             $variableContentConfiguration $this->optionManager->createVariableContent(
  60.                 $site,
  61.                 $this->userProvider->getUser(),
  62.                 $newConfiguration,
  63.                 true
  64.             );
  65.         }
  66.         if ($payload->isEnabled) {
  67.             $variableContentConfiguration->enableOption();
  68.         } else {
  69.             $variableContentConfiguration->disableOption();
  70.         }
  71.         $variableContentConfiguration->updateVariableContent($newConfiguration);
  72.         $this->optionManager->save($variableContentConfiguration);
  73.         $event->setResponse(
  74.             new JsonResponse(
  75.                 $this->transformer->transform($variableContentConfigurationVariableContentOutput::class)
  76.             )
  77.         );
  78.     }
  79. }