<?php
/*
* Ce fichier est la propriété de l'association (c) Projets Métiers
*
* (c) crée par Jean-Marc CATALA <jeanmmarccatala@gmail.com>
*
*/
namespace App\Controller;
use App\Entity\User;
use App\Form\RecupPwdFormType;
use App\Form\RegistrationFormType;
use App\Form\RegistrationFormTypeExpert;
use App\Security\EmailVerifier;
use App\Security\LoginFormAuthenticator;
use App\Service\EmailService;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
use function date_date_set;
use function dd;
use function dump;
use function filter_var;
use const FILTER_VALIDATE_EMAIL;
class RegistrationController extends AbstractController
{
private $emailVerifier;
/**
* @var EmailService
*/
private $emailService;
public function __construct(EmailVerifier $emailVerifier, EmailService $emailService)
{
$this->emailVerifier = $emailVerifier;
$this->emailService = $emailService;
}
public function newToken()
{
$bytes = random_bytes(15);
return bin2hex($bytes);
}
/**
* @Route("/registration/expert", name="app_register_expert")
*
*/
public function registerExpert(Request $request, UserPasswordEncoderInterface $passwordEncoder, EmailService $emailService): Response
{
$type = "expert";
$role = User::getRolefromString($type);
//dd($role);
$user = new User();
$user->setEmail($request->query->get('email', ''));
$user->setRoles([$role]);
$roleString = $role;
$user->setRole($roleString);
//dd($roleString);
$form = $this->createForm(RegistrationFormTypeExpert::class, $user, [
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('plainPassword')->getData()
)
);
if ($form->has('institution')) {
$user->setInstitution($form->get('institution')->getData());
}
$user->setRole($roleString);
$user->setToken($this->newToken());
$entityManager = $this->getDoctrine()->getManager();
$user->setBilanStepProf(1);
$user->setStatus(1);
//anti robots
if (($user->getInstitution()) == 2500) {
echo 'merci de ne pas spammer';
} else {
$entityManager->persist($user);
$entityManager->flush();
}
/*
$emailService->sendEmail([
'to' => $user->getEmail(),
'toName' => $user->getName(),
'template' => 'emails/verif.email.twig',
'subject' => 'Vérifier votre adresse mail',
'context' => [
'user'=> $user,
],
]);
$this->registrationProcess($user);
*/
$this->addFlash('success', 'Merci pour votre inscription');
//return $this->redirectToRoute('after_login');
return $this->redirectToRoute('app_redirect');
}
return $this->render('registration/registerExpert.html.twig', [
'registrationForm' => $form->createView(),
'role' => $role
]);
}
/**
* @Route("/register/{type}", name="app_register", requirements={
* "type"="college|lycee|adulte|professeur|parent|conseiller|mentor"
* })
*/
public function register($type, Request $request, UserPasswordEncoderInterface $passwordEncoder, EmailService $emailService): Response
{
$role = User::getRolefromString($type);
//dd($role);
$user = new User();
$user->setEmail($request->query->get('email', ''));
$user->setRoles([$role]);
$roleString = $role;
$user->setRole($roleString);
//dd($roleString);
$form = $this->createForm(RegistrationFormType::class, $user, [
'which_role' => $role,
'emailEnfant' => $request->query->get('email-enfant'),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('plainPassword')->getData()
)
);
if ($form->has('institution')) {
$user->setInstitution($form->get('institution')->getData());
}
//dd($roleString);
if ($roleString === "ROLE_COLLEGE" || $roleString === "ROLE_LYCEE") {
$user->setProfPrincipal($form->get('profPrincipal')->getData());
$pp = $user->getProfPrincipal();
//$now = new DateTime();
//dd($pp, $now);
if (!$pp) {
$prof = $this->getDoctrine()
->getRepository(User::class)
->find(5);
$user->setProfPrincipal($prof);
//$pp = $user->getProfPrincipal();
//dd($pp);
}
}
if ($roleString === "ROLE_ADULTE") {
$user->setConseille($form->get('conseille')->getData());
$conseil = $user->getConseille();
if (!$conseil) {
$conseille = $this->getDoctrine()
->getRepository(User::class)
->find(6);
$user->setConseille($conseille);
$conseille = $user->getConseille();
//dd($conseille);
}
}
$roleString = $role;
$user->setRole($roleString);
//supprimer la ligne suivante pour reactiver l'envoi des mails
$user->setStatus(1);
$user->setToken($this->newToken());
$entityManager = $this->getDoctrine()->getManager();
$user->setBilanStepProf(1);
$entityManager->persist($user);
$entityManager->flush();
// ajouter pour reactiver l'envoi des mails
/*
$emailService->sendEmail([
'to' => $user->getEmail(),
'toName' => $user->getName(),
'template' => 'emails/verif.email.twig',
'subject' => 'Vérifier votre adresse mail',
'context' => [
'user'=> $user,
],
]);
$this->registrationProcess($user);
*/
$this->addFlash('success', 'Merci pour votre inscription');
//return $this->redirectToRoute('after_login');
return $this->redirectToRoute('app_redirect');
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
'role' => $role
]);
}
/**
* @Route("/register-verification/{email}/{token}", name="app_register_verification")
*/
public function verifMail(User $user, GuardAuthenticatorHandler $guardHandler, LoginFormAuthenticator $authenticator, Request $request)
{
$user->setStatus(User::STATUS_ACTIF);
$user->setToken($this->newToken());
$em = $this->getDoctrine()->getManager();
$em->flush();
return $guardHandler->authenticateUserAndHandleSuccess(
$user,
$request,
$authenticator,
'main' // firewall name in security.yaml
);
}
public function registrationProcess(User $user)
{
if ($user->hasRole(User::ROLE_COLLEGE) or $user->hasRole(User::ROLE_LYCEE)) {
foreach ([$user->getEmailParent1(), $user->getEmailParent2()] as $emailParent) {
if (!filter_var($emailParent, FILTER_VALIDATE_EMAIL)) continue;
$this->emailService->sendEmail([
'to' => $emailParent,
'template' => 'emails/invitationParent.email.twig',
'subject' => 'Suivi de votre enfant sur projets métiers',
'context' => [
'user' => $user,
'mail' => $emailParent
],
]);
}
}
if ($user->hasRole(User::ROLE_PARENT)) {
$enfant = $user->getEnfants()->first();
/** @var User $enfant */
if ($enfant->hasRole(User::ROLE_LYCEE)) {
$this->emailService->sendEmail([
'to' => $enfant->getEmail(),
'template' => 'emails/confirmationLyceen.email.twig',
'subject' => "Votre parent vient de s'inscrire sur votre compte",
'context' => [
'user' => $enfant,
'parent' => $user
],
]);
}
}
}
}