<?php
namespace App\Controller;
use App\Entity\CGV;
use App\Entity\ResetPassword;
use App\Enum\MediaEnum;
use App\Repository\CGVRepository;
use App\Repository\Configuration\MediaRepository;
use App\Repository\UserRepository;
use App\Service\MailerService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Contracts\Translation\TranslatorInterface;
class SecurityController extends AbstractController
{
/**
* @Route("/{_locale}/index", name="app_index", options={"expose"=true})
*/
public function index(Request $request, MediaRepository $repository): Response
{
$user = $this->getUser();
if($user) {
return $this->redirectToRoute("home_secure");
}
return $this->render('security/index.html.twig');
}
/**
* @Route("/{_locale}/login", name="app_login", options={"expose"=true})
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
if ($this->getUser()) {
return $this->redirectToRoute('home_secure');
}
// 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]);
}
/**
* @return Response
* @Route("/{_locale}/term/{type}", name="term_for_rgpd")
*/
public function termRgpd(Request $request, CGVRepository $CGVRepository, $type) {
switch ($type) {
case CGV::PRIVACY_POLICY:
return $this->render("security/term/privaty.html.twig");
case CGV::TERM_SERVICE:
return $this->render("security/term/condition-general.html.twig");
}
return $this->render("security/term/privaty.html.twig");
}
/**
* @return Response
* @Route("/{_locale}/forgot-password/", name="forgot_password")
*/
public function forgotPassword(Request $request, EntityManagerInterface $manager, UserRepository $userRepository, TranslatorInterface $translator, MailerService $mailerService) {
$email = null;
if($request->isMethod("post")) {
$email = $request->get("email");
if(is_null($email) || $email == "") {
return $this->redirectToRoute("forgot_password");
}
$user = $userRepository->findOneBy(["email" => $email]);
if(!$user) {
$this->addFlash('error', $translator->trans('message.error.not_found_email', [], 'general'));
} else {
$passwordToken = new ResetPassword();
$passwordToken->setEmail($email);
$manager->persist($passwordToken);
$subject = "RĂ©initialisation du mot de passe";
$mailerService->sendEmail($email, $subject, 'email/password/template-reset-password.html.twig', [
"token" => $passwordToken->getToken(),
"user" => $user
]);
$manager->flush();
$this->addFlash('success', $translator->trans('message.success.reset_password', ['%email%' => $user->getEmail()], 'general'));
return $this->redirectToRoute("forgot_password");
}
}
return $this->render("security/forgot-password.html.twig", [
"email" => $email
]);
}
/**
* @param Request $request
* @param MailerService $mailerService
* @return Response
* @Route("/{_locale}/contact/", name="contact")
*/
public function sendMessage(Request $request, MailerService $mailerService, TranslatorInterface $translator) {
if($request->isMethod('post')) {
$email = $request->get("email");
$subject = $request->get("subject");
$message = $request->get("message");
$mailerService->sendEmailFromContactForm($subject, $email, $message);
$this->addFlash('success', $translator->trans('message.success.message_sent', [], 'general'));
return $this->redirectToRoute("contact");
}
return $this->render('security/contact.html.twig');
}
/**
* @Route("{_locale}/logout", name="app_logout")
*/
public function logout(Request $request): void
{
$this->redirectToRoute("app_login", ["_locale" => $request->getLocale()]);
}
}