<?php
namespace App\Controller;
use App\Repository\AbstractInscriptionRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use App\Repository\CongresRepository;
use Symfony\Component\HttpFoundation\Session\Session;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="app_login")
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
// if ($this->getUser()) {
// return $this->redirectToRoute('soumettre_abstract');
// }
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
/**
* @Route("/login-abstract", name="app_login_abstract")
*/
public function loginAbstract(AuthenticationUtils $authenticationUtils, CongresRepository $congresRepository, Request $request, AbstractInscriptionRepository $abstractInscriptionRepository,UserPasswordEncoderInterface $passwordEncoder): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
if ($request->isMethod('post')) {
$email=$request->request->get('email');
$user=$abstractInscriptionRepository->findOneBy(['email'=>$email]);
if(empty($user)){
if($request->getLocale()=='fr'){
$this->addFlash('danger','Mot de passe ou bien email est incorrecte');
}
elseif($request->getLocale()=='en'){
$this->addFlash('danger','Password or email is incorrect');
}
return $this->redirectToRoute('app_login_abstract');
}
$plainPassword= $request->request->get('password');
$isPasswordValid = password_verify($plainPassword,$user->getPassword());
if($isPasswordValid){
$session = new Session();
$session->set('user_abstract', $user->getId());
return $this->redirectToRoute('congres_nationaux');
}
else{
if($request->getLocale()=='fr'){
$this->addFlash('danger','Mot de passe ou bien email est incorrecte');
}
elseif($request->getLocale()=='en'){
$this->addFlash('danger','Password or email is incorrect');
}
return $this->redirectToRoute('app_login_abstract');
}
}
return $this->render('security/loginAbstract.html.twig', ['last_username' => $lastUsername, 'error' => $error,'congresses'=>$congresRepository->findAll()]);
}
/**
* @Route("/fr/login")
*/
public function oldLinkLogin()
{
return $this->redirectToRoute('app_login');
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout(): void
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
/**
* @Route("/user/profil", name="app_profil")
*/
public function profil()
{
return $this->render('security/profile.html.twig');
}
/**
* @Route("/user/change-password", name="app_reset_password")
*/
public function resetPassword(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
// Récupérer l'utilisateur actuellement connecté
$user = $this->getUser();
// Créer le formulaire de modification de mot de passe
$form = $this->createFormBuilder()
->add('oldPassword', PasswordType::class, [
'label' => 'security.oldpassword_label',
])
->add('newPassword', RepeatedType::class, [
'type' => PasswordType::class,
'invalid_message' => 'Les mots de passe doivent correspondre.',
'required' => true,
'first_options' => ['label' => 'security.nwpassword_label'],
'second_options' => ['label' => 'security.repeatpassword_label'],
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Vérifier si l'ancien mot de passe est correct
$oldPassword = $form->get('oldPassword')->getData();
if (!$passwordEncoder->isPasswordValid($user, $oldPassword)) {
$this->addFlash('danger', 'Le mot de passe actuel est incorrect.');
return $this->redirectToRoute('app_reset_password');
}
// Mettre à jour le mot de passe de l'utilisateur
$newPassword = $form->get('newPassword')->getData();
$encodedPassword = $passwordEncoder->encodePassword($user, $newPassword);
$user->setPassword($encodedPassword);
$this->getDoctrine()->getManager()->flush();
if($request->getLocale()=='fr'){
$this->addFlash('success', 'Le mot de passe a été modifié avec succès.');
}
elseif($request->getLocale()=='en') {
$this->addFlash('success', 'The password has been changed successfully.');
}
return $this->redirectToRoute('log');
}
return $this->render('security/resetPassword.html.twig', [
'form' => $form->createView(),
]);
}
}