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
{
/**
*
* @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
]);
}
}

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

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

@ -1,5 +1,5 @@
<div class="panel-body">
{% 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 %}
</div>