. */ namespace vierbergenlars\AuthserverExternalAccountBundle\EventListener; use App\AppEvents; use App\Event\TemplateEvent; use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use vierbergenlars\AuthserverExternalAccountBundle\Event\LoginButtonEvent; use vierbergenlars\AuthserverExternalAccountBundle\ExternalAccount\ExternalAccountProviderManager; use vierbergenlars\AuthserverExternalAccountBundle\ExternalAccountEvents; class LoginTemplateEventListener implements EventSubscriberInterface { /** * * @var ExternalAccountProviderManager */ private $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 ] ]; } public function onLoginViewBody(TemplateEvent $event, $eventName, EventDispatcherInterface $eventDispatcher) { $loginButtonEvent = new LoginButtonEvent($this->urlGenerator); $providers = $this->accountProviderManager->getAccountProviders(); 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'), [ 'buttons' => $buttons ]); } } }