Add back support for LoginButtonEvent

master v0.3.0
Lars Vierbergen 7 years ago
parent e6ec250cf5
commit 3d6a9ffea2
  1. 32
      EventListener/LoginTemplateEventListener.php
  2. 4
      ExternalAccount/ExternalAccountProviderManager.php
  3. 1
      Resources/config/services.xml
  4. 4
      Resources/views/Login/buttons.html.twig

@ -33,30 +33,52 @@ use vierbergenlars\AuthserverExternalAccountBundle\ExternalAccountEvents;
class LoginTemplateEventListener implements EventSubscriberInterface class LoginTemplateEventListener implements EventSubscriberInterface
{ {
/** /**
*
* @var ExternalAccountProviderManager * @var ExternalAccountProviderManager
*/ */
private $accountProviderManager; private $accountProviderManager;
public function __construct(ExternalAccountProviderManager $accountProviderManager) /**
*
* @var UrlGeneratorInterface
*/
private $urlGenerator;
public function __construct(ExternalAccountProviderManager $accountProviderManager, UrlGeneratorInterface $urlGenerator)
{ {
$this->accountProviderManager = $accountProviderManager; $this->accountProviderManager = $accountProviderManager;
$this->urlGenerator = $urlGenerator;
} }
public static function getSubscribedEvents() public static function getSubscribedEvents()
{ {
return [ 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(); $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->setArgument('hiddenPasswordLogin', true);
$event->addTemplate(new TemplateReference('AuthserverExternalAccountBundle', 'Login', 'buttons', 'html', 'twig'), [ $event->addTemplate(new TemplateReference('AuthserverExternalAccountBundle', 'Login', 'buttons', 'html', 'twig'), [
'accountProviders' => $providers, 'buttons' => $buttons
]); ]);
} }
} }

@ -37,6 +37,10 @@ class ExternalAccountProviderManager
$this->externalAccountProviders[$accountProvider->getName()] = $accountProvider; $this->externalAccountProviders[$accountProvider->getName()] = $accountProvider;
} }
/**
*
* @return ExternalAccountProviderInterface[]
*/
public function getAccountProviders() public function getAccountProviders()
{ {
return array_values($this->externalAccountProviders); return array_values($this->externalAccountProviders);

@ -25,6 +25,7 @@
<services> <services>
<service class="vierbergenlars\AuthserverExternalAccountBundle\EventListener\LoginTemplateEventListener"> <service class="vierbergenlars\AuthserverExternalAccountBundle\EventListener\LoginTemplateEventListener">
<argument type="service" id="vierbergenlars.authserver_external_account.account_provider_manager" /> <argument type="service" id="vierbergenlars.authserver_external_account.account_provider_manager" />
<argument type="service" id="router" />
<tag name="kernel.event_subscriber" /> <tag name="kernel.event_subscriber" />
</service> </service>
<service class="vierbergenlars\AuthserverExternalAccountBundle\EventListener\ProfileTemplateListener"> <service class="vierbergenlars\AuthserverExternalAccountBundle\EventListener\ProfileTemplateListener">

@ -1,5 +1,5 @@
<div class="panel-body"> <div class="panel-body">
{% for provider in accountProviders %} {% for button in buttons %}
{% include 'AuthserverExternalAccountBundle:Login:button.html.twig' with {button: provider.loginButton} only %} {% include 'AuthserverExternalAccountBundle:Login:button.html.twig' with {button: button} only %}
{% endfor %} {% endfor %}
</div> </div>