. */ namespace vierbergenlars\AuthserverOAuthAccountBundle\EventListener; use App\Event\TemplateEvent; use HWI\Bundle\OAuthBundle\Security\OAuthUtils; use Symfony\Bridge\Doctrine\ManagerRegistry; use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use User\UserEvents; use vierbergenlars\AuthserverExternalAccountBundle\Entity\ExternalUser; use vierbergenlars\AuthserverOAuthAccountBundle\ResourceOwner\ResourceOwnerMap; class ProfileTemplateListener implements EventSubscriberInterface { /** * @var ManagerRegistry */ private $registry; /** * @var ResourceOwnerMap */ private $resourceOwnerConfig; /** * @var OAuthUtils */ private $oAuthUtils; public function __construct(ManagerRegistry $registry, ResourceOwnerMap $resourceOwnerConfig, OAuthUtils $oAuthUtils) { $this->registry = $registry; $this->resourceOwnerConfig = $resourceOwnerConfig; $this->oAuthUtils = $oAuthUtils; } public static function getSubscribedEvents() { return [ UserEvents::USER_PROFILE_VIEW => [ ['addOAuthAccountsTop', -50], ['addOAuthAccounts', -60], ['addOAuthAccountsBottom', -70], ], ]; } public function addOAuthAccountsTop(TemplateEvent $event) { $event->addTemplate(new TemplateReference('AuthserverOAuthAccountBundle', 'Profile', 'oauth_accounts_top', 'html', 'twig')); } public function addOAuthAccounts(TemplateEvent $event) { $externalUsers = $this->registry->getManagerForClass(ExternalUser::class) ->getRepository(ExternalUser::class) ->findBy([ 'user' => $event->getSubject(), ]); foreach($this->oAuthUtils->getResourceOwners() as $resourceOwner) { /* @var $resourceOwner string */ $roExternalUsers = array_filter($externalUsers, function(ExternalUser $externalUser) use($resourceOwner) { return $externalUser->getProvider() === $resourceOwner; }); $event->addTemplate(new TemplateReference('AuthserverOAuthAccountBundle', 'Profile', 'oauth_account', 'html', 'twig'), [ 'externalUsers' => $roExternalUsers, 'resourceOwnerConfig' => $this->resourceOwnerConfig[$resourceOwner], 'resourceOwner' => $resourceOwner, ]); } } public function addOAuthAccountsBottom(TemplateEvent $event) { $event->addTemplate(new TemplateReference('AuthserverOAuthAccountBundle', 'Profile', 'oauth_accounts_bottom', 'html', 'twig')); } }