src/EventListener/PostValidate/TabMessagePostValidateTransformer.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DataTransformer\TabMessageOptionOutputDataTransformer;
  4. use App\DTO\Option\TabMessage;
  5. use App\DTO\Option\TabMessageOutput;
  6. use App\DTO\TabMessageDTO;
  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 TabMessagePostValidateTransformer implements EventSubscriberInterface
  16. {
  17.     private $request;
  18.     private $siteManager;
  19.     private $optionManager;
  20.     private $userProvider;
  21.     private $transformer;
  22.     public function __construct(
  23.         TabMessageOptionOutputDataTransformer $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 TabMessage;
  44.     }
  45.     public function transform(ViewEvent $event)
  46.     {
  47.         /** @var TabMessage $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 TabMessageDTO();
  57.         $newConfiguration->setFirstMessage($payload->firstMessage);
  58.         $newConfiguration->setSecondMessage($payload->secondMessage);
  59.         $newConfiguration->setAfterMessage($payload->afterMessage);
  60.         $newConfiguration->setDisplayDelay($payload->displayDelay);
  61.         $newConfiguration->setPersonalization($payload->personalization);
  62.         $newConfiguration->setIsEnabled($payload->isEnabled);
  63.         if (null === $backToTabConfiguration $this->optionManager->getBackToTabForSite($site)) {
  64.             $backToTabConfiguration $this->optionManager->createCustomTabMessage(
  65.                 $site,
  66.                 $this->userProvider->getUser(),
  67.                 $newConfiguration,
  68.                 true
  69.             );
  70.         }
  71.         if ($payload->isEnabled) {
  72.             $backToTabConfiguration->enableOption();
  73.         } else {
  74.             $backToTabConfiguration->disableOption();
  75.         }
  76.         $backToTabConfiguration->updateCustomTabMessage($newConfiguration);
  77.         $this->optionManager->save($backToTabConfiguration);
  78.         $event->setResponse(
  79.             new JsonResponse(
  80.                 $this->transformer->transform($backToTabConfigurationTabMessageOutput::class)
  81.             )
  82.         );
  83.     }
  84. }