src/EventListener/PostValidate/MailConfigurationPostValidateTransformer.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\MailConfiguration\MailConfiguration;
  4. use App\DTO\MailConfiguration\MailConfigurationOutput;
  5. use App\Entity\MailConfiguration as Entity;
  6. use App\Entity\Site;
  7. use App\Repository\SiteRepository;
  8. use App\Service\AfterReadStorage;
  9. use App\Service\Manager\MailConfigurationManager;
  10. use App\Service\Manager\MediaManager;
  11. use App\Service\SiteNotificationSender;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpKernel\Event\ViewEvent;
  15. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  16. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  17. class MailConfigurationPostValidateTransformer implements EventSubscriberInterface
  18. {
  19.     /**
  20.      * @var AfterReadStorage
  21.      */
  22.     private $afterReadStorage;
  23.     /**
  24.      * @var SiteRepository
  25.      */
  26.     private $siteRepository;
  27.     /**
  28.      * @var NormalizerInterface
  29.      */
  30.     private $normalizer;
  31.     /**
  32.      * @var MailConfigurationManager
  33.      */
  34.     private $mailConfigurationManager;
  35.     /**
  36.      * @var SiteNotificationSender
  37.      */
  38.     private $notificationSender;
  39.     /**
  40.      * @var MediaManager
  41.      */
  42.     private $mediaManager;
  43.     public function __construct(
  44.         AfterReadStorage $afterReadStorage,
  45.         SiteRepository $siteRepository,
  46.         NormalizerInterface $normalizer,
  47.         MailConfigurationManager $mailConfigurationManager,
  48.         SiteNotificationSender $notificationSender,
  49.         MediaManager $mediaManager
  50.     ) {
  51.         $this->afterReadStorage $afterReadStorage;
  52.         $this->siteRepository $siteRepository;
  53.         $this->normalizer $normalizer;
  54.         $this->mailConfigurationManager $mailConfigurationManager;
  55.         $this->notificationSender $notificationSender;
  56.         $this->mediaManager $mediaManager;
  57.     }
  58.     /**
  59.      * @return array
  60.      */
  61.     public static function getSubscribedEvents()
  62.     {
  63.         return [
  64.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  65.         ];
  66.     }
  67.     /**
  68.      * @param MailConfiguration $payload
  69.      *
  70.      * @return bool
  71.      */
  72.     public function supportTransformation($payload)
  73.     {
  74.         return $payload instanceof MailConfiguration;
  75.     }
  76.     /**
  77.      * @param ViewEvent $event
  78.      */
  79.     public function transform(ViewEvent $event)
  80.     {
  81.         /** @var MailConfiguration $payload */
  82.         $payload $event->getControllerResult();
  83.         if (!$this->supportTransformation($payload)) {
  84.             return;
  85.         }
  86.         /** @var Site|null $site */
  87.         if (null === $site $this->siteRepository->find($event->getRequest()->get('id'))) {
  88.             throw new BadRequestHttpException("Site not found");
  89.         }
  90.         $logo null;
  91.         if ($payload->logo !== null) {
  92.             $logo $this->mediaManager->getOneByGuid($payload->logo);
  93.         }
  94.         /** @var Entity|null $mailConfiguration */
  95.         $mailConfiguration $site->getAccount()->getMailConfiguration();
  96.         if (null !== $mailConfiguration) {
  97.             $mailConfiguration->update(
  98.                 $payload->sender,
  99.                 $payload->email,
  100.                 $payload->host,
  101.                 $payload->port,
  102.                 $payload->login,
  103.                 $payload->password,
  104.                 $logo,
  105.                 $payload->isActive
  106.             );
  107.         } else {
  108.             $mailConfiguration Entity::create(
  109.                 $payload->sender,
  110.                 $payload->email,
  111.                 $site->getAccount(),
  112.                 $payload->host,
  113.                 $payload->port,
  114.                 $payload->login,
  115.                 $payload->password,
  116.                 $logo,
  117.                 $payload->isActive
  118.             );
  119.         }
  120.         $this->mailConfigurationManager->save($mailConfiguration);
  121.         $this->notificationSender->sendConfigInfoEmail($mailConfiguration);
  122.         $event->setResponse(new JsonResponse($this->normalizer->normalize($mailConfigurationMailConfigurationOutput::class)));
  123.     }
  124. }