src/EventListener/PostValidate/InvitationRegistrationPostValidateTransformer.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\Invitation\InvitationRegistration;
  4. use App\Service\Manager\ClientProfileManager;
  5. use App\Service\Manager\SiteInviteManager;
  6. use App\Service\Manager\UserManager;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpKernel\Event\ViewEvent;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. class InvitationRegistrationPostValidateTransformer implements EventSubscriberInterface
  14. {
  15.     private $siteInviteManager;
  16.     private $userManager;
  17.     private $clientProfileManager;
  18.     /**
  19.      * @var EntityManagerInterface
  20.      */
  21.     private $entityManager;
  22.     public function __construct(
  23.         SiteInviteManager $siteInviteManager,
  24.         UserManager $userManager,
  25.         ClientProfileManager $clientProfileManager,
  26.         EntityManagerInterface $entityManager
  27.     ) {
  28.         $this->siteInviteManager $siteInviteManager;
  29.         $this->userManager $userManager;
  30.         $this->clientProfileManager $clientProfileManager;
  31.         $this->entityManager $entityManager;
  32.     }
  33.     public static function getSubscribedEvents()
  34.     {
  35.         return [
  36.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  37.         ];
  38.     }
  39.     public function supportTransformation($payloadRequest $request)
  40.     {
  41.         return $payload instanceof InvitationRegistration && $request->isMethod($request::METHOD_POST);
  42.     }
  43.     public function transform(ViewEvent $event)
  44.     {
  45.         /** @var InvitationRegistration $payload */
  46.         $payload $event->getControllerResult();
  47.         if (!$this->supportTransformation($payload$event->getRequest())) {
  48.             return;
  49.         }
  50.         $siteInvite $this->siteInviteManager->getInviteByEmailAndToken($payload->email$payload->token);
  51.         if (null === $siteInvite) {
  52.             throw new NotFoundHttpException("Invitation not found");
  53.         }
  54.         $this->entityManager->getConnection()->beginTransaction();
  55.         try {
  56.             $user $this->userManager->createUser(
  57.                 $payload->email,
  58.                 $payload->password,
  59.                 null,
  60.                 true,
  61.                 ['ROLE_CLIENT']
  62.             );
  63.             $this->clientProfileManager->createClientProfile(
  64.                 $user,
  65.                 $payload->name,
  66.                 null,
  67.                 null,
  68.                 null,
  69.                 null,
  70.                 null,
  71.                 $event->getRequest()->getLocale()
  72.             );
  73.             $this->siteInviteManager->acceptSiteInvite($siteInvite$user);
  74.             $this->entityManager->refresh($user);
  75.             $this->entityManager->getConnection()->commit();
  76.         } catch (\Exception $e) {
  77.             $this->entityManager->getConnection()->rollBack();
  78.             throw $e;
  79.         }
  80.         $event->setResponse(new JsonResponse($this->userManager->normalize($user)));
  81.     }
  82. }