src/Security/PmiAuthenticator.php line 19
<?phpnamespace App\Security;use App\Entity\Pmi\User;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\Session\Session;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Core\Security;use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;use Symfony\Component\Security\Http\Util\TargetPathTrait;class PmiAuthenticator extends AbstractLoginFormAuthenticator{use TargetPathTrait;public const LOGIN_ROUTE = 'app_login';private UrlGeneratorInterface $urlGenerator;private EntityManagerInterface $entityManager;public function __construct(UrlGeneratorInterface $urlGenerator, EntityManagerInterface $pmiEntityManager){$this->urlGenerator = $urlGenerator;$this->entityManager = $pmiEntityManager;}public function authenticate(Request $request): SelfValidatingPassport{$code = $request->request->get('_code', '');$request->getSession()->set(Security::LAST_USERNAME, $code);return new SelfValidatingPassport(new UserBadge($code));}public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response{$this->setUserLocale(user: $token->getUser(),session: $request->getSession());if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {return new RedirectResponse($targetPath);}return new RedirectResponse($this->urlGenerator->generate('app_dashboard'));}protected function getLoginUrl(Request $request): string{return $this->urlGenerator->generate(self::LOGIN_ROUTE);}private function setUserLocale(User $user, Session $session): void{$conn = $this->entityManager->getConnection();$stmt = "SELECT PACNUM02FROM PARAMWHERE PAKTSOC = 'UTI' AND PAKTNOPAR = '974' AND PAKTCODE = '" . $user->getCode() . "'";$locale = $conn->fetchAllAssociative($stmt)[0]['PACNUM02'];if ($locale == 1) {$session->set('_locale', 'fr');} else {$session->set('_locale', 'en');}}}