<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\AbstractInscription;
use App\Form\RegistrationFormType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;
class RegistrationController extends AbstractController
{
// private $mailer;
// public function __construct(MailerInterface $mailer)
// {
// $this->mailer = $mailer;
// }
/**
* @Route("/register", name="app_register")
*/
public function register(MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
{
return $this->render('registration/register.html.twig', [
]);
}
/**
* @Route("/registerJunior", name="front_registerJunior")
*/
public function registerJunior(MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserRepository $userrepository): Response
{
$user = new User();
if ($request->isMethod('post')) {
if ($userrepository->findOneBy(['email'=>$request->request->get('email')])!=null){
if($request->getLocale()=='fr'){
$this->addFlash('danger', 'Email déja utilisé');
}else{
$this->addFlash('danger', 'Email already used');
}
return $this->render('registration/register.html.twig', [
]);
}
// encode the plain password.
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$request->request->get('plainPassword')
)
);
$user->setVerifCode($this->generateVerifCode());
$user->setNom($request->request->get('nom'));
$user->setPrenom($request->request->get('prenom'));
$user->setTel($request->request->get('tel'));
$user->setEmail($request->request->get('email'));
$user->setCivilite($request->request->get('civilite'));
$user->setAddresse($request->request->get('addresse'));
$user->setSpecialite($request->request->get('specialite'));
if(!empty($request->request->get('code_postal'))){ $user->setCodePostal($request->request->get('code_postal'));}
$user->setActivite('Public');
$user->setVille($request->request->get('ville'));
$user->setTitre('Résident');
$proofofStatus=$request->files->get("proofofStatus");
if ($proofofStatus != null) {
$fileNamepdf = md5(uniqid()) . '.' . $proofofStatus->guessExtension();
$user->setProofOfStatus($fileNamepdf);
$proofofStatus->move(
$this->getParameter('pdfUserProofOfStatus_directory'),
$fileNamepdf
);
}
$photoUser=$request->files->get("photoUser");
if ($photoUser != null) {
$fileNameimage = md5(uniqid()) . '.' . $photoUser->guessExtension();
$user->setPhotoUser($fileNameimage);
$photoUser->move(
$this->getParameter('imagePhotoUser_directory'),
$fileNameimage
);
}
$user->setNumOrdre(null);
$user->setPays($request->request->get('pays'));
$user->setRoles(["ROLE_MEMBRE_EN_ATTENTE"]);
$user->setStatut("en attente");
$user->setVerified(0);
$entityManager->persist($user);
$entityManager->flush();
if($request->getLocale()=='fr'){
$this->addFlash('success', 'Votre compte est créé avec succès');
}else{
$this->addFlash('success', 'Your account is successfully created');
}
return $this->redirectToRoute('app_login');
}
return $this->render('registration/register.html.twig', [
]);
}
/**
* @Route("/registerSenior", name="front_registerSenior")
*/
public function registerSenior(MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserRepository $userrepository): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($request->isMethod('post')) {
if ($userrepository->findOneBy(['email'=>$request->request->get('email')])!=null){
if($request->getLocale()=='fr'){
$this->addFlash('danger', 'Email déja utilisé');
}else{
$this->addFlash('danger', 'Email already used');
}
return $this->render('registration/register.html.twig', [
]);
}
// var_dump($request->request->get('plainPassword')->getData());
// die();
// encode the plain password.
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$request->request->get('plainPassword')
)
);
$user->setVerifCode($this->generateVerifCode());
$user->setNom($request->request->get('nom'));
$user->setPrenom($request->request->get('prenom'));
$user->setTel($request->request->get('tel'));
$user->setEmail($request->request->get('email'));
$user->setCivilite($request->request->get('civilite'));
$user->setAddresse($request->request->get('addresse'));
$user->setSpecialite($request->request->get('specialite'));
if(!empty($request->request->get('code_postal'))){$user->setCodePostal($request->request->get('code_postal'));}
$user->setActivite($request->request->get('activite'));
$user->setVille($request->request->get('ville'));
$user->setTitre($request->request->get('titre'));
$user->setNumOrdre($request->request->get('numOrdre'));
$user->setPays($request->request->get('pays'));
$user->setRoles(["ROLE_MEMBRE_EN_ATTENTE"]);
$user->setStatut("en attente");
$user->setSousSpecialite($request->request->get('sousSpecialite'));
$user->setFieldOfInterest($request->request->get('fieldOfInterest'));
$biographie=$request->files->get("biographie");
if ($biographie != null) {
$fileNamepdfBiographie = md5(uniqid()) . '.' . $biographie->guessExtension();
$user->setBiographie($fileNamepdfBiographie);
$biographie->move(
$this->getParameter('pdfBiographie_directory'),
$fileNamepdfBiographie
);
}
$photoUser=$request->files->get("photoUser");
if ($photoUser != null) {
$fileNameimage = md5(uniqid()) . '.' . $photoUser->guessExtension();
$user->setPhotoUser($fileNameimage);
$photoUser->move(
$this->getParameter('imagePhotoUser_directory'),
$fileNameimage
);
}
$user->setAddressPro($request->request->get('addressPro'));
$user->setVerified(0);
$entityManager->persist($user);
$entityManager->flush();
if($request->getLocale()=='fr'){
$this->addFlash('success', 'Votre compte est créé avec succès');
}else{
$this->addFlash('success', 'Your account is successfully created');
}
return $this->redirectToRoute('app_login');
}
return $this->render('registration/register.html.twig', [
]);
}
/**
* @Route("/forgot-password", name="forgot_password")
*/
public function forgetPassword(Request $request, MailerInterface $mailer): Response
{
if($request->isMethod('POST')){
$repository = $this->getDoctrine()->getRepository(User::class);
$email=$request->request->get('email');
$user = $this->getDoctrine()->getRepository(User::class)->findOneBy(['email'=>$email]);
//dd($user);
if($user){
$to = $user->getEmail();
$subject = 'ATU - Réinitialisation de votre mot de passe';
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= 'From: contact@urotunisia.com' . "\r\n" .
'Reply-To: contact@urotunisia.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// $template= new TwigEngine();
$message = "<h1>Bonjour ".$user->getNom()." ".$user->getPrenom()."!</h1><p>Pour réinitialiser votre mot de passe, merci de vous rendre sur <a href='http://urotunisia.com/verif_code/".$user->getId()."/".$user->getVerifCode()."'>http://urotunisia.com/verif_code/".$user->getId()."/".$user->getVerifCode()."</a></p>
<p>Cordialement</p><p>Association Tunisienne d'Urologie</p>";
mail($to, $subject, $message, $headers);
if($request->getLocale()=="en"){
$this->addFlash('success','A reset link will be sent to your email'); }
else {
$this->addFlash('success','Un lien de réinitialisation sera envoyé à votre email');
}
return $this->redirectToRoute('check-email', array('email' => $user->getEmail()));
}else{
if($request->getLocale()=="en"){
$this->addFlash('danger','invalid email'); }
else {
$this->addFlash('danger','email invalide');
}
return $this->redirectToRoute('forgot_password', array());
}
}
return $this->render('registration/forgot_password.html.twig');
}
/**
* @Route("/forgot-password-abstract", name="forgot_password_abstract")
*/
public function forgetPasswordAbstractIncri(Request $request, MailerInterface $mailer): Response
{
if($request->isMethod('POST')){
$repository = $this->getDoctrine()->getRepository(User::class);
$email=$request->request->get('email');
$user = $this->getDoctrine()->getRepository(AbstractInscription::class)->findOneBy(['email'=>$email]);
//dd($user);
if($user){
$to = $user->getEmail();
$subject = 'ATU - Réinitialisation de votre mot de passe pour les inscriptions aux abstracts';
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= 'From: contact@urotunisia.com' . "\r\n" .
'Reply-To: contact@urotunisia.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// $template= new TwigEngine();
$message = "<h1>Bonjour ".$user->getNom()." ".$user->getPrenom()."!</h1><p>Pour réinitialiser votre mot de passe pour les inscriptions aux abstracts, merci de vous rendre sur <a href='http://urotunisia.com/verif_code_abstract/".$user->getId()."/".$user->getVerifCode()."'>http://urotunisia.com/verif_code_abstract/".$user->getId()."/".$user->getVerifCode()."</a></p>
<p>Cordialement</p><p>Association Tunisienne d'Urologie</p>";
mail($to, $subject, $message, $headers);
if($request->getLocale()=="en"){
$this->addFlash('success','A reset link will be sent to your email'); }
else {
$this->addFlash('success','Un lien de réinitialisation sera envoyé à votre email');
}
return $this->redirectToRoute('check-email-abstract', array('email' => $user->getEmail()));
}else{
if($request->getLocale()=="en"){
$this->addFlash('danger','invalid email'); }
else {
$this->addFlash('danger','email invalide');
}
return $this->redirectToRoute('forgot_password_abstract', array());
}
}
return $this->render('registration/forgot_password_abstract.html.twig');
}
/**
* @Route("/check-email-abstract/{email}", name="check-email-abstract")
*/
public function checkEmail(Request $request,$email): Response
{
return $this->render('registration/check_email_abstract.html.twig');
}
/**
* @Route("/check-email/{email}", name="check-email")
*/
public function checkEmailAbstract(Request $request,$email): Response
{
return $this->render('registration/check_email.html.twig');
}
/**
* @Route("/verif_code/{id}/{code}", name="verif_code")
*/
public function verifCode(Request $request, int $id, string $code, EntityManagerInterface $entityManager, UserPasswordEncoderInterface $userPasswordEncoder): Response
{
$repository = $this->getDoctrine()->getRepository(User::class);
$user = $this->getDoctrine()
->getRepository(User::class)
->findOneBy(['id'=>$id,'verifCode'=>$code]);
if(!$user){
if($request->getLocale()=="en"){
$this->addFlash('fail','Invalid verifying code'); }
else {
$this->addFlash('fail','Code de vérification invalide');
}
return $this->redirectToRoute('forgot_password');
}
if($request->isMethod('POST')){
$user->setVerifCode($this->generateVerifCode());
$user->setPassword(
$userPasswordEncoder->encodePassword(
$user,
$request->request->get('password')
)
);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('app_accueil');
}
return $this->render('registration/verif_code.html.twig',["email"=>$user->getEmail()]);
}
/**
* @Route("/verif_code_abstract/{id}/{code}", name="verif_code_abstract")
*/
public function verifCodeAbstract(Request $request, int $id, string $code, EntityManagerInterface $entityManager, UserPasswordHasherInterface $userPasswordHasher): Response
{
$repository = $this->getDoctrine()->getRepository(AbstractInscription::class);
$user = $this->getDoctrine()
->getRepository(AbstractInscription::class)
->findOneBy(['id'=>$id,'verifCode'=>$code]);
if(!$user){
if($request->getLocale()=="en"){
$this->addFlash('fail','Invalid verifying code'); }
else {
$this->addFlash('fail','Code de vérification invalide');
}
return $this->redirectToRoute('forgot_password_abstract');
}
if($request->isMethod('POST')){
$user->setVerifCode($this->generateVerifCode());
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$request->request->get('password')
)
);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('app_accueil');
}
return $this->render('registration/verif_code_abstract.html.twig',["email"=>$user->getEmail()]);
}
function generateVerifCode(){
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 15; $i++) {
$randstring .= $characters[rand(0, strlen($characters)-1)];
}
return $randstring;
}
}