src/EventListener/PostValidate/AddSitePostValidateTransformer.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\Site\AddSite;
  4. use App\DTO\Site\SiteOutput;
  5. use App\Service\Manager\AccountManager;
  6. use App\Service\Manager\AccountPermissionManager;
  7. use App\Service\Manager\SiteManager;
  8. use App\Service\Manager\SitePermissionManager;
  9. use App\Service\UserProvider;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpKernel\Event\ViewEvent;
  15. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  16. class AddSitePostValidateTransformer implements EventSubscriberInterface
  17. {
  18.     private $siteManager;
  19.     private $normalizer;
  20.     private $sitePermissionManager;
  21.     private $userProvider;
  22.     private $entityManager;
  23.     private $accountManager;
  24.     private $accountPermissionManager;
  25.     public function __construct(
  26.         SiteManager $siteManager,
  27.         SitePermissionManager $sitePermissionManager,
  28.         NormalizerInterface $normalizer,
  29.         UserProvider $userProvider,
  30.         EntityManagerInterface $entityManager,
  31.         AccountManager $accountManager,
  32.         AccountPermissionManager $accountPermissionManager
  33.     ) {
  34.         $this->siteManager $siteManager;
  35.         $this->normalizer $normalizer;
  36.         $this->sitePermissionManager $sitePermissionManager;
  37.         $this->userProvider $userProvider;
  38.         $this->entityManager $entityManager;
  39.         $this->accountManager $accountManager;
  40.         $this->accountPermissionManager $accountPermissionManager;
  41.     }
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  46.         ];
  47.     }
  48.     public function supportTransformation($payloadRequest $request)
  49.     {
  50.         return $payload instanceof AddSite && $request->isMethod($request::METHOD_POST);
  51.     }
  52.     public function transform(ViewEvent $event)
  53.     {
  54.         /** @var AddSite $payload */
  55.         $payload $event->getControllerResult();
  56.         if (!$this->supportTransformation($payload$event->getRequest())) {
  57.             return;
  58.         }
  59.         $user $this->userProvider->getUser();
  60.         $this->entityManager->getConnection()->beginTransaction();
  61.         try {
  62.             if (null === $payload->account) {
  63.                 $account $this->accountManager->create($user);
  64.                 $this->accountPermissionManager->createPermissionTypeOwner($account$user);
  65.                 $accountId $account->getId();
  66.             } else {
  67.                 $accountId $payload->account;
  68.             }
  69.             $site $this->siteManager->create($accountId$payload->hostName);
  70.             $this->sitePermissionManager->createPermissionTypeOwner($site$user);
  71.             $this->entityManager->getConnection()->commit();
  72.         } catch (\Exception $e) {
  73.             $this->entityManager->getConnection()->rollBack();
  74.             throw $e;
  75.         }
  76.         $event->setResponse(new JsonResponse($this->normalizer->normalize($siteSiteOutput::class)));
  77.     }
  78. }