src/Controller/RegistrationController.php line 62

Open in your IDE?
  1. <?php
  2. /*
  3. * Ce fichier est la propriété de l'association (c) Projets Métiers
  4. *
  5. * (c) crée par Jean-Marc CATALA <jeanmmarccatala@gmail.com>
  6. *
  7. */
  8. namespace App\Controller;
  9. use App\Entity\User;
  10. use App\Form\RecupPwdFormType;
  11. use App\Form\RegistrationFormType;
  12. use App\Form\RegistrationFormTypeExpert;
  13. use App\Security\EmailVerifier;
  14. use App\Security\LoginFormAuthenticator;
  15. use App\Service\EmailService;
  16. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Mime\Address;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  23. use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
  24. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  25. use function date_date_set;
  26. use function dd;
  27. use function dump;
  28. use function filter_var;
  29. use const FILTER_VALIDATE_EMAIL;
  30. class RegistrationController extends AbstractController
  31. {
  32. private $emailVerifier;
  33. /**
  34. * @var EmailService
  35. */
  36. private $emailService;
  37. public function __construct(EmailVerifier $emailVerifier, EmailService $emailService)
  38. {
  39. $this->emailVerifier = $emailVerifier;
  40. $this->emailService = $emailService;
  41. }
  42. public function newToken()
  43. {
  44. $bytes = random_bytes(15);
  45. return bin2hex($bytes);
  46. }
  47. /**
  48. * @Route("/registration/expert", name="app_register_expert")
  49. *
  50. */
  51. public function registerExpert(Request $request, UserPasswordEncoderInterface $passwordEncoder, EmailService $emailService): Response
  52. {
  53. $type = "expert";
  54. $role = User::getRolefromString($type);
  55. //dd($role);
  56. $user = new User();
  57. $user->setEmail($request->query->get('email', ''));
  58. $user->setRoles([$role]);
  59. $roleString = $role;
  60. $user->setRole($roleString);
  61. //dd($roleString);
  62. $form = $this->createForm(RegistrationFormTypeExpert::class, $user, [
  63. ]);
  64. $form->handleRequest($request);
  65. if ($form->isSubmitted() && $form->isValid()) {
  66. // encode the plain password
  67. $user->setPassword(
  68. $passwordEncoder->encodePassword(
  69. $user,
  70. $form->get('plainPassword')->getData()
  71. )
  72. );
  73. if ($form->has('institution')) {
  74. $user->setInstitution($form->get('institution')->getData());
  75. }
  76. $user->setRole($roleString);
  77. $user->setToken($this->newToken());
  78. $entityManager = $this->getDoctrine()->getManager();
  79. $user->setBilanStepProf(1);
  80. $user->setStatus(1);
  81. //anti robots
  82. if (($user->getInstitution()) == 2500) {
  83. echo 'merci de ne pas spammer';
  84. } else {
  85. $entityManager->persist($user);
  86. $entityManager->flush();
  87. }
  88. /*
  89. $emailService->sendEmail([
  90. 'to' => $user->getEmail(),
  91. 'toName' => $user->getName(),
  92. 'template' => 'emails/verif.email.twig',
  93. 'subject' => 'Vérifier votre adresse mail',
  94. 'context' => [
  95. 'user'=> $user,
  96. ],
  97. ]);
  98. $this->registrationProcess($user);
  99. */
  100. $this->addFlash('success', 'Merci pour votre inscription');
  101. //return $this->redirectToRoute('after_login');
  102. return $this->redirectToRoute('app_redirect');
  103. }
  104. return $this->render('registration/registerExpert.html.twig', [
  105. 'registrationForm' => $form->createView(),
  106. 'role' => $role
  107. ]);
  108. }
  109. /**
  110. * @Route("/register/{type}", name="app_register", requirements={
  111. * "type"="college|lycee|adulte|professeur|parent|conseiller|mentor"
  112. * })
  113. */
  114. public function register($type, Request $request, UserPasswordEncoderInterface $passwordEncoder, EmailService $emailService): Response
  115. {
  116. $role = User::getRolefromString($type);
  117. //dd($role);
  118. $user = new User();
  119. $user->setEmail($request->query->get('email', ''));
  120. $user->setRoles([$role]);
  121. $roleString = $role;
  122. $user->setRole($roleString);
  123. //dd($roleString);
  124. $form = $this->createForm(RegistrationFormType::class, $user, [
  125. 'which_role' => $role,
  126. 'emailEnfant' => $request->query->get('email-enfant'),
  127. ]);
  128. $form->handleRequest($request);
  129. if ($form->isSubmitted() && $form->isValid()) {
  130. // encode the plain password
  131. $user->setPassword(
  132. $passwordEncoder->encodePassword(
  133. $user,
  134. $form->get('plainPassword')->getData()
  135. )
  136. );
  137. if ($form->has('institution')) {
  138. $user->setInstitution($form->get('institution')->getData());
  139. }
  140. //dd($roleString);
  141. if ($roleString === "ROLE_COLLEGE" || $roleString === "ROLE_LYCEE") {
  142. $user->setProfPrincipal($form->get('profPrincipal')->getData());
  143. $pp = $user->getProfPrincipal();
  144. //$now = new DateTime();
  145. //dd($pp, $now);
  146. if (!$pp) {
  147. $prof = $this->getDoctrine()
  148. ->getRepository(User::class)
  149. ->find(5);
  150. $user->setProfPrincipal($prof);
  151. //$pp = $user->getProfPrincipal();
  152. //dd($pp);
  153. }
  154. }
  155. if ($roleString === "ROLE_ADULTE") {
  156. $user->setConseille($form->get('conseille')->getData());
  157. $conseil = $user->getConseille();
  158. if (!$conseil) {
  159. $conseille = $this->getDoctrine()
  160. ->getRepository(User::class)
  161. ->find(6);
  162. $user->setConseille($conseille);
  163. $conseille = $user->getConseille();
  164. //dd($conseille);
  165. }
  166. }
  167. $roleString = $role;
  168. $user->setRole($roleString);
  169. //supprimer la ligne suivante pour reactiver l'envoi des mails
  170. $user->setStatus(1);
  171. $user->setToken($this->newToken());
  172. $entityManager = $this->getDoctrine()->getManager();
  173. $user->setBilanStepProf(1);
  174. $entityManager->persist($user);
  175. $entityManager->flush();
  176. // ajouter pour reactiver l'envoi des mails
  177. /*
  178. $emailService->sendEmail([
  179. 'to' => $user->getEmail(),
  180. 'toName' => $user->getName(),
  181. 'template' => 'emails/verif.email.twig',
  182. 'subject' => 'Vérifier votre adresse mail',
  183. 'context' => [
  184. 'user'=> $user,
  185. ],
  186. ]);
  187. $this->registrationProcess($user);
  188. */
  189. $this->addFlash('success', 'Merci pour votre inscription');
  190. //return $this->redirectToRoute('after_login');
  191. return $this->redirectToRoute('app_redirect');
  192. }
  193. return $this->render('registration/register.html.twig', [
  194. 'registrationForm' => $form->createView(),
  195. 'role' => $role
  196. ]);
  197. }
  198. /**
  199. * @Route("/register-verification/{email}/{token}", name="app_register_verification")
  200. */
  201. public function verifMail(User $user, GuardAuthenticatorHandler $guardHandler, LoginFormAuthenticator $authenticator, Request $request)
  202. {
  203. $user->setStatus(User::STATUS_ACTIF);
  204. $user->setToken($this->newToken());
  205. $em = $this->getDoctrine()->getManager();
  206. $em->flush();
  207. return $guardHandler->authenticateUserAndHandleSuccess(
  208. $user,
  209. $request,
  210. $authenticator,
  211. 'main' // firewall name in security.yaml
  212. );
  213. }
  214. public function registrationProcess(User $user)
  215. {
  216. if ($user->hasRole(User::ROLE_COLLEGE) or $user->hasRole(User::ROLE_LYCEE)) {
  217. foreach ([$user->getEmailParent1(), $user->getEmailParent2()] as $emailParent) {
  218. if (!filter_var($emailParent, FILTER_VALIDATE_EMAIL)) continue;
  219. $this->emailService->sendEmail([
  220. 'to' => $emailParent,
  221. 'template' => 'emails/invitationParent.email.twig',
  222. 'subject' => 'Suivi de votre enfant sur projets métiers',
  223. 'context' => [
  224. 'user' => $user,
  225. 'mail' => $emailParent
  226. ],
  227. ]);
  228. }
  229. }
  230. if ($user->hasRole(User::ROLE_PARENT)) {
  231. $enfant = $user->getEnfants()->first();
  232. /** @var User $enfant */
  233. if ($enfant->hasRole(User::ROLE_LYCEE)) {
  234. $this->emailService->sendEmail([
  235. 'to' => $enfant->getEmail(),
  236. 'template' => 'emails/confirmationLyceen.email.twig',
  237. 'subject' => "Votre parent vient de s'inscrire sur votre compte",
  238. 'context' => [
  239. 'user' => $enfant,
  240. 'parent' => $user
  241. ],
  242. ]);
  243. }
  244. }
  245. }
  246. }