. */ namespace vierbergenlars\AuthserverOAuthAccountBundle\EventListener; use Registration\Event\RegistrationHandleEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Registration\RegistrationEvents; use Registration\Event\RegistrationFormEvent; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use vierbergenlars\AuthserverOAuthAccountBundle\Entity\TemporaryUser; use Doctrine\ORM\EntityManagerInterface; use App\Entity\EmailAddress; use vierbergenlars\AuthserverOAuthAccountBundle\ResourceOwner\ResourceOwnerMap; use EmailRulesBundle\EmailHandler\EmailRules; use Registration\RegistrationHandler\RegistrationRules; class RegistrationFieldsListener implements EventSubscriberInterface { /** * * @var TokenStorageInterface */ private $tokenStorage; /** * * @var string[] */ private $registrationFields; public static function getSubscribedEvents() { return [ RegistrationEvents::BUILD_FORM => [ 'onBuildForm', 9 ] ]; } public function __construct(TokenStorageInterface $tokenStorage, array $registrationFields) { $this->tokenStorage = $tokenStorage; $this->registrationFields = $registrationFields; } private function getTemporaryUser() { $token = $this->tokenStorage->getToken(); if (!$token) return null; $user = $token->getUser(); if ($user instanceof TemporaryUser) return $user; return null; } public function onBuildForm(RegistrationFormEvent $event) { if ($this->getTemporaryUser()) { switch ($this->registrationFields['email']) { case 'prefill': break; case 'blank': $event->getFormBuilder() ->getData() ->getPrimaryEmailAddress() ->setEmail(''); break; case 'force': $event->getFormBuilder() ->get('emailAddresses') ->setDisabled(true); break; } switch ($this->registrationFields['display_name']) { case 'prefill': break; case 'blank': $event->getFormBuilder() ->getData() ->setDisplayName(''); break; case 'force': $event->getFormBuilder() ->get('displayName') ->setDisabled(true); break; } switch ($this->registrationFields['password']) { case 'blank': $event->getFormBuilder() ->getData() ->setPasswordEnabled(1); break; case 'hidden': $event->getFormBuilder() ->getData() ->setPasswordEnabled(2); break; case 'force-disable': $event->getFormBuilder() ->getData() ->setPasswordEnabled(0); break; } if ($this->registrationFields['password'] === false) { $event->getFormBuilder() ->getData() ->setPasswordEnabled(1); } } } }