<?php
namespace App\Controller;
use App\Model\ChangePassword;
use App\Form\ChangePasswordType;
use App\Form\UserType;
use App\Repository\UserRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
/**
* Permet de diriger l'utilisateur vers la bonne page lors de la connexion
*
* @Route("/", name="home")
* @return RedirectResponse|Response
*/
public function index(): RedirectResponse|Response
{
return $this->redirectToRoute('appel_a_projet_index');
}
/**
* @Route("/profil", name="profil")
*
* @return Response
*/
public function profil(UserRepository $userRepository):Response
{
return $this->render('user/profile.html.twig', [
'user' => $userRepository->find($this->getUser()->getId())
]);
}
/**
* @Route("/profil/edit", name="edit_profil", methods={"GET", "POST"})
*
* @param UserRepository $userRepository
* @return Response
*/
public function editProfil(Request $request, UserRepository $userRepository, ManagerRegistry $doctrine): Response
{
if ($this->isGranted('ROLE_EXPERT')) {
return $this->createAccessDeniedException();
}
$user = $userRepository->find($this->getUser()->getId());
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// mise à jour du nom d'utilisateur si nécessaire
if ($user->getUsername() !== $user->getEmail()) {
$user->setUsername($user->getEmail());
}
$doctrine->getManager()->flush();
$this->addFlash('success', 'Profil modifié avec succès.');
return $this->redirectToRoute('profil', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('user/edit.html.twig', [
'user' => $user,
'form' => $form,
]);
}
/**
* @Route("/profil/change-password", name="profil_change_password", methods={"GET", "POST"})
*
* @param UserRepository $userRepository
* @return Response
*/
public function changePassword(Request $request, UserRepository $userRepository, ManagerRegistry $doctrine): Response
{
$user = $userRepository->find($this->getUser()->getId());
$changePassword = new ChangePassword();
$form = $this->createForm(ChangePasswordType::class, $changePassword);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// mise à jour du nom d'utilisateur si nécessaire
$user->setRawPassword($changePassword->getNewPassword());
$doctrine->getManager()->flush();
$this->addFlash('success', 'Mot de passe modifié avec succès.');
return $this->redirectToRoute('profil', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('user/edit_password.html.twig', [
'user' => $user,
'form' => $form,
]);
}
}