<?php
namespace App\Controller\App;
use App\Entity\User;
use App\Form\RegisterType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
#[Route('/login', name: 'login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
//Vérification de l'autorisation de l'utilisateur
$user = $this->getUser();
if ($user && !$user->isEnabled()) {
// Rediriger l'utilisateur vers une page d'activation ou afficher un message d'erreur
$this->addFlash('error', 'Votre compte n\'est pas activé. Veuillez contacter l\'administrateur.');
return $this->redirectToRoute('app_login');
}
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error,
]);
}
#[Route('/login_check', name: 'login_check')]
public function check(Request $request): Response
{
$expires = $request->query->get('expires');
$username = $request->query->get('user');
$hash = $request->query->get('hash');
return $this->render('security/check.html.twig', [
'expires' => $expires,
'user' => $username,
'hash' => $hash,
]);
}
/**
* @throws Exception
*/
#[Route('/logout', name: 'logout', methods: ['GET'])]
public function logout()
{
die;
// controller can be blank: it will never be called!
throw new Exception('Don\'t forget to activate logout in security.yaml');
}
/**
* @throws TransportExceptionInterface
*/
#[Route('/register', name: 'register', methods: ['GET', 'POST'])]
public function register(Request $request, UserPasswordHasherInterface $hasher, EntityManagerInterface $entityManager, MailerInterface $mailer,): Response
{
$form = $this->createForm(RegisterType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$nom = $form->get('name')->getData();
$prenom = $form->get('surname')->getData();
$email = $form->get('email')->getData();
$comment = $form->get('comment')->getData();
$password = $form->get('password')->getData();
$existingUser = $entityManager->getRepository(User::class)->findOneBy(['email' => $email]);
if($existingUser) {
$this->addFlash('error', 'Cet email est déjà utilisé. Veuillez choisir un autre email.');
return $this->redirectToRoute('app_register');
}
$user = new User();
$user->setName($nom);
$user->setSurname($prenom);
$user->setEmail($email);
$user->setcomment($comment);
$user->setEnabled(false);
$password = $hasher->hashPassword($user, $password);
$user->setPassword($password);
$entityManager->persist($user);
$entityManager->flush();
$emailContent = 'Bonjour, une nouvelle demande d\'accès a été demandée pour DM.Collection de :
' . $prenom . ' ' . $nom . ' ' . PHP_EOL;
$emailContent .= 'Adresse e-mail : ' . $email .PHP_EOL;
$emailContent .= 'Commentaire : ' . $comment;
$email = (new Email())
->from('n2msolution.digital@gmail.com')
->to('michelin.david01@gmail.com')
//->cc('cc@example.com')
//->replyTo('fabien@example.com')
->subject('Nouvelle demande d\'accès')
->text($emailContent)
->html('<p>' . nl2br($emailContent) . '</p>');
$mailer->send($email);
$this->addFlash('success', 'flash.register.success');
return $this->redirectToRoute('app_login');
}
return $this->renderForm('security/register.html.twig', [
'form' => $form,
]);
}
#[Route('/delete', name: 'delete')]
public function delete(User $user, EntityManagerInterface $entityManager): Response
{
$entityManager->flush();
$entityManager->remove($user);
$entityManager->flush();
return $this->render('security/users.html.twig');
}
#[Route('/modify', name: 'modify')]
public function modify(User $user, EntityManagerInterface $entityManager, UserRepository $userRepository ): Response
{
$user->setEnabled(true);
$entityManager->persist($user);
$entityManager->flush();
$users = $userRepository->findAll();
return $this->render('security/users.html.twig', [
'users' => $users,
]);
}
}