From 834edefe6d7974364c5f48be7dffd3e0bee42b18 Mon Sep 17 00:00:00 2001 From: Lars Vierbergen Date: Sat, 28 Oct 2017 14:53:23 +0200 Subject: [PATCH] Do not always remove password field, but give other plugins the chance to keep password field by setting password enabled to active. --- EventListener/RegistrationHandlerListener.php | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/EventListener/RegistrationHandlerListener.php b/EventListener/RegistrationHandlerListener.php index 80e1fb2..cec4f7f 100644 --- a/EventListener/RegistrationHandlerListener.php +++ b/EventListener/RegistrationHandlerListener.php @@ -46,14 +46,16 @@ class RegistrationHandlerListener implements EventSubscriberInterface { return [ RegistrationEvents::BUILD_FORM => [ - 'onBuildForm', - 10 - ], - RegistrationEvents::HANDLE_FORM => [ [ - 'onHandleFormSetPasswordEnabled', + 'onBuildFormSetPasswordEnabled', 10 ], + [ + 'onBuildFormRemovePasswordField', + -20 + ] + ], + RegistrationEvents::HANDLE_FORM => [ [ 'onHandleFormConnectExternal', 0 @@ -83,10 +85,9 @@ class RegistrationHandlerListener implements EventSubscriberInterface return null; } - public function onBuildForm(RegistrationFormEvent $event) + public function onBuildFormSetPasswordEnabled(RegistrationFormEvent $event) { if ($user = $this->getTemporaryUser()) { - $event->getFormBuilder()->remove('password'); $event->getFormBuilder() ->getData() ->setDisplayName($user->getDisplayName()) @@ -94,15 +95,20 @@ class RegistrationHandlerListener implements EventSubscriberInterface } } - public function onHandleFormSetPasswordEnabled(RegistrationHandleEvent $event) + public function onBuildFormRemovePasswordField(RegistrationFormEvent $event) { - if ($event->isFailed()) - return; - $user = $event->getForm()->getData(); - if (!$user) - return; - /* @var $user User */ - $user->setPasswordEnabled(2); + if ($this->getTemporaryUser()) { + switch ($event->getFormBuilder() + ->getData() + ->getPasswordEnabled()) { + case 0: + case 2: + $event->getFormBuilder()->remove('password'); + break; + case 1: + break; + } + } } public function onHandleFormConnectExternal(RegistrationHandleEvent $event)