Loading config/module.config.php +3 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace UnicaenAuth; use UnicaenApp\Service\Mailer\MailerService; use UnicaenAuth\Authentication\Adapter\AdapterChainServiceFactory; use UnicaenAuth\Authentication\Adapter\Cas; use UnicaenAuth\Authentication\Adapter\CasAdapterFactory; Loading Loading @@ -40,6 +41,7 @@ use UnicaenAuth\ORM\Event\Listeners\HistoriqueListenerFactory; use UnicaenAuth\Provider\Rule\PrivilegeRuleProviderFactory; use UnicaenAuth\Service\CasService; use UnicaenAuth\Service\CasServiceFactory; use UnicaenAuth\Service\Mailer\MailerServiceFactory; use UnicaenAuth\Service\ShibService; use UnicaenAuth\Service\ShibServiceFactory; use UnicaenAuth\Service\UserContext; Loading Loading @@ -696,6 +698,7 @@ return [ 'UnicaenAuth\Guard\PrivilegeRoute' => PrivilegeRouteFactory::class, 'UnicaenAuth\Provider\Rule\PrivilegeRuleProvider' => PrivilegeRuleProviderFactory::class, MailerService::class => MailerServiceFactory::class, // verrue pour forcer le label de l'identifiant qqsoit l'options 'auth_identity_fields' LoginForm::class => LoginFormFactory::class, Loading src/UnicaenAuth/Service/Mailer/MailerServiceFactory.php 0 → 100644 +62 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Service\Mailer; use Psr\Container\ContainerInterface; use UnicaenApp\Service\Mailer\MailerService; use UnicaenAuth\Service\UserContext; /** * @author Unicaen */ class MailerServiceFactory extends \UnicaenApp\Service\Mailer\MailerServiceFactory { const CURRENT_USER = 'CURRENT_USER'; /** * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container): MailerService { $service = parent::__invoke($container); // prise en compte de 'CURRENT_USER' dans les adresses de redirection $this->addCurrentUserToRedirection($service, $container); return $service; } /** * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface */ protected function addCurrentUserToRedirection(MailerService $service, ContainerInterface $container): void { $redirectTo = $service->getRedirectTo(); // si 'CURRENT_USER' est trouvé dans les éventuelles adresses de redirection des mails, // on va ajouter l'email de l'utilisateur connecté aux destinataires des redirections... if (!in_array(static::CURRENT_USER, $redirectTo)) { return; } /** @var \UnicaenAuth\Service\UserContext $userContext */ $userContext = $container->get(UserContext::class); $user = $userContext->getDbUser(); if ($user === null) { return; } // retrait de 'CURRENT_USER' $redirectTo = array_diff($redirectTo, [static::CURRENT_USER]); // ajout de l'utilisateur connecté si besoin if (!in_array($email = $user->getEmail(), $redirectTo) && !array_key_exists($email, $redirectTo)) { $redirectTo[$email] = $user->getDisplayName(); } $service->setRedirectTo($redirectTo); } } Loading
config/module.config.php +3 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace UnicaenAuth; use UnicaenApp\Service\Mailer\MailerService; use UnicaenAuth\Authentication\Adapter\AdapterChainServiceFactory; use UnicaenAuth\Authentication\Adapter\Cas; use UnicaenAuth\Authentication\Adapter\CasAdapterFactory; Loading Loading @@ -40,6 +41,7 @@ use UnicaenAuth\ORM\Event\Listeners\HistoriqueListenerFactory; use UnicaenAuth\Provider\Rule\PrivilegeRuleProviderFactory; use UnicaenAuth\Service\CasService; use UnicaenAuth\Service\CasServiceFactory; use UnicaenAuth\Service\Mailer\MailerServiceFactory; use UnicaenAuth\Service\ShibService; use UnicaenAuth\Service\ShibServiceFactory; use UnicaenAuth\Service\UserContext; Loading Loading @@ -696,6 +698,7 @@ return [ 'UnicaenAuth\Guard\PrivilegeRoute' => PrivilegeRouteFactory::class, 'UnicaenAuth\Provider\Rule\PrivilegeRuleProvider' => PrivilegeRuleProviderFactory::class, MailerService::class => MailerServiceFactory::class, // verrue pour forcer le label de l'identifiant qqsoit l'options 'auth_identity_fields' LoginForm::class => LoginFormFactory::class, Loading
src/UnicaenAuth/Service/Mailer/MailerServiceFactory.php 0 → 100644 +62 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Service\Mailer; use Psr\Container\ContainerInterface; use UnicaenApp\Service\Mailer\MailerService; use UnicaenAuth\Service\UserContext; /** * @author Unicaen */ class MailerServiceFactory extends \UnicaenApp\Service\Mailer\MailerServiceFactory { const CURRENT_USER = 'CURRENT_USER'; /** * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container): MailerService { $service = parent::__invoke($container); // prise en compte de 'CURRENT_USER' dans les adresses de redirection $this->addCurrentUserToRedirection($service, $container); return $service; } /** * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface */ protected function addCurrentUserToRedirection(MailerService $service, ContainerInterface $container): void { $redirectTo = $service->getRedirectTo(); // si 'CURRENT_USER' est trouvé dans les éventuelles adresses de redirection des mails, // on va ajouter l'email de l'utilisateur connecté aux destinataires des redirections... if (!in_array(static::CURRENT_USER, $redirectTo)) { return; } /** @var \UnicaenAuth\Service\UserContext $userContext */ $userContext = $container->get(UserContext::class); $user = $userContext->getDbUser(); if ($user === null) { return; } // retrait de 'CURRENT_USER' $redirectTo = array_diff($redirectTo, [static::CURRENT_USER]); // ajout de l'utilisateur connecté si besoin if (!in_array($email = $user->getEmail(), $redirectTo) && !array_key_exists($email, $redirectTo)) { $redirectTo[$email] = $user->getDisplayName(); } $service->setRedirectTo($redirectTo); } }