From 3d6a9ffea253909ae27f5a1058d6153a3a463603 Mon Sep 17 00:00:00 2001 From: Lars Vierbergen Date: Sun, 19 Nov 2017 13:09:58 +0100 Subject: [PATCH] Add back support for LoginButtonEvent --- EventListener/LoginTemplateEventListener.php | 32 ++++++++++++++++--- .../ExternalAccountProviderManager.php | 4 +++ Resources/config/services.xml | 1 + Resources/views/Login/buttons.html.twig | 4 +-- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/EventListener/LoginTemplateEventListener.php b/EventListener/LoginTemplateEventListener.php index 15f44c5..9a53357 100644 --- a/EventListener/LoginTemplateEventListener.php +++ b/EventListener/LoginTemplateEventListener.php @@ -33,30 +33,52 @@ use vierbergenlars\AuthserverExternalAccountBundle\ExternalAccountEvents; class LoginTemplateEventListener implements EventSubscriberInterface { + /** + * * @var ExternalAccountProviderManager */ private $accountProviderManager; - public function __construct(ExternalAccountProviderManager $accountProviderManager) + /** + * + * @var UrlGeneratorInterface + */ + private $urlGenerator; + + public function __construct(ExternalAccountProviderManager $accountProviderManager, UrlGeneratorInterface $urlGenerator) { $this->accountProviderManager = $accountProviderManager; + $this->urlGenerator = $urlGenerator; } public static function getSubscribedEvents() { return [ - AppEvents::LOGIN_VIEW_BODY => ['onLoginViewBody', 1], + AppEvents::LOGIN_VIEW_BODY => [ + 'onLoginViewBody', + 1 + ] ]; } - public function onLoginViewBody(TemplateEvent $event) + public function onLoginViewBody(TemplateEvent $event, $eventName, EventDispatcherInterface $eventDispatcher) { + $loginButtonEvent = new LoginButtonEvent($this->urlGenerator); + $providers = $this->accountProviderManager->getAccountProviders(); - if(count($providers) > 0) { + foreach ($providers as $provider) { + $loginButtonEvent->addButton($provider->getLoginButton()); + } + + $eventDispatcher->dispatch(ExternalAccountEvents::LOGIN_BUTTON, $loginButtonEvent); + + $buttons = $loginButtonEvent->getButtons(); + + if (count($buttons) > 0) { $event->setArgument('hiddenPasswordLogin', true); $event->addTemplate(new TemplateReference('AuthserverExternalAccountBundle', 'Login', 'buttons', 'html', 'twig'), [ - 'accountProviders' => $providers, + 'buttons' => $buttons ]); } } diff --git a/ExternalAccount/ExternalAccountProviderManager.php b/ExternalAccount/ExternalAccountProviderManager.php index ec79962..68a54bd 100644 --- a/ExternalAccount/ExternalAccountProviderManager.php +++ b/ExternalAccount/ExternalAccountProviderManager.php @@ -37,6 +37,10 @@ class ExternalAccountProviderManager $this->externalAccountProviders[$accountProvider->getName()] = $accountProvider; } + /** + * + * @return ExternalAccountProviderInterface[] + */ public function getAccountProviders() { return array_values($this->externalAccountProviders); diff --git a/Resources/config/services.xml b/Resources/config/services.xml index e75eb6a..6052e27 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -25,6 +25,7 @@ + diff --git a/Resources/views/Login/buttons.html.twig b/Resources/views/Login/buttons.html.twig index a8d5da2..c68a1ae 100644 --- a/Resources/views/Login/buttons.html.twig +++ b/Resources/views/Login/buttons.html.twig @@ -1,5 +1,5 @@
- {% for provider in accountProviders %} - {% include 'AuthserverExternalAccountBundle:Login:button.html.twig' with {button: provider.loginButton} only %} + {% for button in buttons %} + {% include 'AuthserverExternalAccountBundle:Login:button.html.twig' with {button: button} only %} {% endfor %}