<?php
namespace App\Controller;
use Dompdf\Dompdf;
use Dompdf\Options;
use Knp\Snappy\Pdf;
use App\Form\LoginType;
use App\Form\AccountType;
use App\Service\GenererPDF;
use spipu\html2pdf\HTML2PDF;
use App\Entity\PasswordUpdate;
use App\Service\MyOtherService;
use App\Form\PasswordUpdateType;
use App\Repository\UserRepository;
use Symfony\Component\Form\FormError;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Nucleos\DompdfBundle\Wrapper\DompdfWrapperInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="security_login")
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
$form = $this->createForm(LoginType::class, [
'email' => $authenticationUtils->getLastUsername()
]);
// $form = $factory->createNamed('', LoginType::class, [
// '_username' => $utils->getLastUsername()
// ]);
$error = $authenticationUtils->getLastAuthenticationError();
return $this->render('security/login.html.twig', [
'formView' => $form->createView(),
'error' => $error
]);
}
/**
* @Route("/logout", name="security_logout")
*/
public function logout()
{
}
/**
* Permet d'afficher et de traiter le formulaire de modification de profil
*
* @Route("/profile/edit", name="security_profile")
* @IsGranted("ROLE_USER")
*
* @return Response
*/
public function profile(Request $request, EntityManagerInterface $manager)
{
$user = $this->getUser();
$accountForm = $this->createForm(AccountType::class, $user);
$passwordUpdateForm = $this->createForm(PasswordUpdateType::class);
$accountForm->handleRequest($request);
$passwordUpdateForm->handleRequest($request);
if ($accountForm->isSubmitted() && $accountForm->isValid()) {
$manager->persist($user);
$manager->flush();
$this->addFlash(
'success',
"Les données du profil ont été enregistrée avec succès !"
);
return $this->redirectToRoute('homepage');
}
if ($passwordUpdateForm->isSubmitted() && $passwordUpdateForm->isValid()) {
// $manager->persist();
// $manager->flush();
// return $this->redirectToRoute('homepage');
}
return $this->render('security/profile.html.twig', [
'user' => $user,
'etudiant' => $user->getEtudiant(),
'admin' => $user->getAdmin(),
'accountForm' => $accountForm->createView(),
'passwordUpdateForm' => $passwordUpdateForm->createView()
]);
}
// /**
// * Permet de modifier le mot de passe
// *
// * @Route("/account/test", name="account_test")
// * @IsGranted("ROLE_USER")
// *
// * @return Response
// */
// public function test()
// {
// //return $this->render('facture/facture.html.twig', []);
// $knpSnappyPdf = new Pdf('/usr/local/bin/wkhtmltopdf');
// $html = $this->renderView('facture/facture.html.twig');
// $header = $this->renderView('facture/_header.html.twig');
// $footer = $this->renderView('facture/_footer.html.twig');
// $options = [
// 'margin-top' => 30,
// 'margin-right' => 20,
// 'margin-bottom' => 40,
// 'margin-left' => 20,
// 'header-html' => $header,
// 'footer-html' => $footer
// ];
// header('Content-Type: application/pdf');
// echo $knpSnappyPdf->getOutputFromHtml($html, $options);
// }
// $passwordUpdate = new PasswordUpdate();
// $user = $this->getUser();
// $form = $this->createForm(PasswordUpdateType::class, $passwordUpdate);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// //Verifier que le old password est le bon
// if (!password_verify($passwordUpdate->getOldPassword(), $user->getHash())) {
// $form->get('oldPassword')->addError(new FormError("Le mot de passe saisie est différent du mot de passe actuel !"));
// } else {
// $newPassword = $passwordUpdate->getNewPassword();
// $hash = $encoder->encodePassword($user, $newPassword);
// $user->setHash($hash);
// $manager->persist($user);
// $manager->flush();
// $this->addFlash(
// 'success',
// "Votre mot de passe a bien été changé !"
// );
// return $this->redirectToRoute('home');
// }
// }
// return $this->render('account/updatePassword.html.twig', [
// 'form' => $form->createView()
// ]);
// }
/**
* Permet de modifier le mot de passe
*
* @Route("/password-update", name="security_updatePassword")
* @IsGranted("ROLE_USER")
*
* @return Response
*/
public function updatePassword(Request $request, EntityManagerInterface $manager, UserPasswordEncoderInterface $encoder)
{
$passwordUpdate = new PasswordUpdate();
$user = $this->getUser();
$form = $this->createForm(PasswordUpdateType::class, $passwordUpdate);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//Verifier que le old password est le bon
if (!password_verify($passwordUpdate->getOldPassword(), $user->getPassword())) {
$form->get('oldPassword')->addError(new FormError("Le mot de passe saisie est différent du mot de passe actuel !"));
} else {
$newPassword = $passwordUpdate->getNewPassword();
$hash = $encoder->encodePassword($user, $newPassword);
$user->setPassword($hash);
$user->setNouveauMDP(false);
$manager->persist($user);
$manager->flush();
$this->addFlash(
'success',
"Votre mot de passe a bien été changé !"
);
return $this->redirectToRoute('homepage');
}
}
return $this->render('account/updatePassword.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route("/login_check", name="login_check")
*/
public function check()
{
throw new \LogicException('This code should never be reached');
}
}