src/Controller/RegistrationController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\RegistrationFormType;
  5. use App\Repository\CategorieElearningRepository;
  6. use App\Repository\InscritSessionRepository;
  7. use App\Repository\SettingRepository;
  8. use App\Repository\UserRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  16. use Symfony\Component\Mailer\MailerInterface;
  17. use Symfony\Component\Mime\Address;
  18. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class RegistrationController extends AbstractController
  22. {
  23.     private $fromAddress;
  24.     public function __construct(
  25.         ParameterBagInterface $parameterBag  // Injection du service ParameterBagInterface
  26.     ) {
  27.         $this->fromAddress $parameterBag->get('mailer_from_address');
  28.     }
  29.     #[Route('/register'name'app_register')]
  30.     public function register(CategorieElearningRepository $categorieElearningRepository,InscritSessionRepository $inscritSessionRepositorySettingRepository $settingRepositoryUserRepository $userRepositoryMailerInterface $mailerRequest $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $entityManagerSessionInterface $session): Response
  31.     {
  32.         $setting $settingRepository->find(1);
  33.         $user = new User();
  34.         $form $this->createForm(RegistrationFormType::class, $user);
  35.         $form->handleRequest($request);
  36.         if ($form->isSubmitted() && $form->isValid()) {
  37.             $pwd $form->get('plainPassword')->getData();
  38.             $nom=$request->request->get('nom');
  39.             $adresse=$request->request->get('adresse');
  40.             $matricule=$request->request->get('matricule');
  41.         //    dd($nom,$adresse,$matricule);
  42. //            $user->setNomsociete($nom);
  43. //            $user->setAdressesociete($adresse);
  44. //            $user->setMatricule($matricule);
  45. $roleuser=$form->get('options')->getData();
  46.             $rolefinal="ROLE_STUDENT";
  47.             switch ($roleuser) {
  48.                 case 'Student':
  49.                     $rolefinal='ROLE_STUDENT';
  50.                     break;
  51.                 case 'Goach':
  52.                     $rolefinal='ROLE_COACH';
  53.                     break;
  54.                 case 'Partner':
  55.                     $rolefinal='ROLE_PARTNER';
  56.                     break;
  57.                 default:
  58.                     // Valeur d'option inconnue, ne rien faire
  59.                     break;
  60.             }
  61.             // Store user data and password in session
  62.             $session->set('user_data', [
  63.                 'email' => $user->getEmail(),
  64.                 'nom'=>$user->getNom(),
  65.                 'nomsociete'=>$nom,
  66.                 'adrsociete'=>$adresse,
  67.                 'matricule'=>$matricule,
  68.                 'prenom'=>$user->getPrenom(),
  69.                 'adresse'=>$user->getAdresse(),
  70.                 'tel'=>$user->getPhone(),
  71.                 'password' => $userPasswordHasher->hashPassword($user$pwd),
  72.                 'pwd'=>$pwd,
  73.                 'roles' => $rolefinal,
  74.                 'clientIP' => file_get_contents('https://api.ipify.org'),
  75.                 'date' => new \DateTime('now')
  76.             ]);
  77.             // Generate verification code
  78.             $verificationCode random_int(100000999999);
  79.             $session->set('verification_code'$verificationCode);
  80.             // Send verification email
  81.             $email = (new TemplatedEmail())
  82.                 ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  83.                 ->to($user->getEmail())
  84.                 ->subject('Votre code de vérification')
  85.                 ->htmlTemplate('registration/send_verification_code.html.twig')
  86.                 ->context(['code' => $verificationCode]);
  87.             $mailer->send($email);
  88.             // Redirect to verification page
  89.             return $this->redirectToRoute('app_verify_codeInscri');
  90.         }
  91.         return $this->render('registration/register.html.twig', [
  92.             'registrationForm' => $form->createView(),
  93.             'setting' => $setting,'categories'=>$categorieElearningRepository->findAll()
  94.         ]);
  95.     }
  96.     #[Route('/verifyinscription'name'app_verify_codeInscri')]
  97.     public function verify(CategorieElearningRepository $categorieElearningRepository,UserRepository $userRepository,MailerInterface $mailer,InscritSessionRepository $inscritSessionRepository,SettingRepository $settingRepository,Request $requestSessionInterface $sessionEntityManagerInterface $entityManager): Response
  98.     {
  99.             $inputCode $request->request->get('code');
  100.             $storedCode $session->get('verification_code');
  101.         $setting=$settingRepository->find(1);
  102.         if ($request->isMethod('POST')) {
  103.             if ($inputCode == $storedCode) {
  104.                 // Retrieve user data from session
  105.                 $userData $session->get('user_data');
  106.                 // Create and save user
  107.                 $user = new User();
  108.                 $user->setEmail($userData['email']);
  109.                 $user->setAdressesociete($userData['adrsociete']);
  110.                 $user->setNomsociete($userData['nomsociete']);
  111.                 $user->setMatricule($userData['matricule']);
  112.                 $user->setPassword($userData['password']);
  113.                 $user->setNom($userData['nom']);
  114.                 $user->setPrenom($userData['prenom']);
  115.                 $user->setAdresse($userData['adresse']);
  116.                 $user->setPhone($userData['tel']);
  117.                 $user->setIsActive(true);
  118.                 $user->setRoles([$userData['roles']]);
  119.                 $user->setIpadress($userData['clientIP']);
  120.                 $user->setDate($userData['date']);
  121.                 $user->setLogo('student.jpg');
  122.                 $user->setvu(0);
  123.                 $entityManager->persist($user);
  124.                 $entityManager->flush();
  125.                 // Clear the session data
  126.                 $session->remove('user_data');
  127.                 $session->remove('verification_code');
  128.                     $inscrits=$inscritSessionRepository->findBy(['email'=>$user->getEmail()]);
  129.                     if($inscrits) {
  130.                         foreach ($inscrits as $inscrit) {
  131.                     $inscrit->setStagiaire($user);
  132.                     $inscritSessionRepository->save($inscrit,true);
  133.                         }
  134.                     }
  135.             $email = (new TemplatedEmail())
  136.                 ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  137.                 ->to($user->getEmail())
  138.                 ->subject('Bienvenue sur Sip Academy')
  139.                 ->htmlTemplate(
  140.                     'registration/send_email.html.twig'
  141.                 )
  142.                 ->context([
  143.                     'emails' => $user->getEmail(),
  144.                     'password' => $userData['pwd'],'user'=>$user,
  145.                     'setting'=>$setting
  146.                 ]);
  147.             $mailer->send($email);
  148.             $us=$userRepository->findByRoleAdmin();
  149.             $tabusers=array();
  150.             foreach ($us as $user1) {
  151.                 $email = (new TemplatedEmail())
  152.                     ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  153.                     ->to($user1->getEmail())
  154.                     ->subject('Nouveau inscrit ')
  155.                     ->htmlTemplate(
  156.                         'registration/emailadmin.html.twig'
  157.                     )
  158.                     ->context([
  159.                         'user'=>$user1,'us'=>$user,
  160.                         'setting'=> $settingRepository->find(1),
  161.                     ]);
  162.                 $mailer->send($email);
  163.             }
  164.                 $this->addFlash("success""Votre compte a été créé avec succès!");
  165.                 return $this->redirectToRoute('app_login');
  166.             }
  167.             $this->addFlash('error''Code de vérification incorrect.');
  168.         }
  169.         return $this->render('registration/verify_codeInscri.html.twig', ['setting'=>$setting,
  170.             'categories'=>$categorieElearningRepository->findAll()
  171.         ]);
  172.     }
  173. //    #[Route('/register', name: 'app_register')]
  174. //    public function register(InscritSessionRepository $inscritSessionRepository,SettingRepository $settingRepository,UserRepository $userRepository,MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
  175. //    {
  176. //        $setting = $settingRepository->find(1);
  177. //        $user = new User();
  178. //        $form = $this->createForm(RegistrationFormType::class, $user);
  179. //        $form->handleRequest($request);
  180. //        $emails= $user->getEmail();
  181. //
  182. //        if ($form->isSubmitted() && $form->isValid()) {
  183. //            $pwd = $form->get('plainPassword')->getData();
  184. //            // encode the plain password
  185. //            $user->setPassword(
  186. //                $userPasswordHasher->hashPassword(
  187. //                    $user,
  188. //                    $form->get('plainPassword')->getData()
  189. //                )
  190. //            );
  191. //            $options = $form->get('options')->getData();
  192. //            $clientIP = file_get_contents('https://api.ipify.org');
  193. //            $user->setIpadress($clientIP);
  194. //            $user->setLogo('student.jpg');
  195. //            // Donner des rôles différents en fonction de l'option sélectionnée
  196. //            switch ($options) {
  197. //                case 'Student':
  198. //                    $user->setRoles(['ROLE_STUDENT']);
  199. //                    break;
  200. //                case 'Goach':
  201. //                    $user->setRoles(['ROLE_COACH']);
  202. //                    break;
  203. //                case 'Partner':
  204. //                    $user->setRoles(['ROLE_PARTNER']);
  205. //                    break;
  206. //                default:
  207. //                    // Valeur d'option inconnue, ne rien faire
  208. //                    break;
  209. //            }
  210. //            $user->setDate(new \DateTime('now'));
  211. //            $user->setvu(0);
  212. //            $entityManager->persist($user);
  213. //            $entityManager->flush();
  214. //                    $inscrits=$inscritSessionRepository->findBy(['email'=>$user->getEmail()]);
  215. //                    if($inscrits) {
  216. //                        foreach ($inscrits as $inscrit) {
  217. //                    $inscrit->setStagiaire($user);
  218. //                    $inscritSessionRepository->save($inscrit,true);
  219. //                        }
  220. //                    }
  221. //            $email = (new TemplatedEmail())
  222. //                ->from(new Address('support@smart-it-partner.com', 'Sip Academy '))
  223. ////            ->to("athimni.afrah@gmail.com")
  224. //                ->to($user->getEmail())
  225. //                ->subject('Bienvenue sur Sip Academy')
  226. //                ->htmlTemplate(
  227. //                    'registration/send_email.html.twig'
  228. //                )
  229. //
  230. //
  231. //                ->context([
  232. //                    'emails' => $emails,
  233. //                    'password' => $pwd,'user'=>$user,
  234. //                    'setting'=>$setting
  235. //
  236. //
  237. //                ]);
  238. //
  239. //
  240. //            $mailer->send($email);
  241. //            $us=$userRepository->findByRoleAdmin();
  242. //            $tabusers=array();
  243. //            foreach ($us as $user1) {
  244. //                $email = (new TemplatedEmail())
  245. //                    ->from(new Address('support@smart-it-partner.com', 'Sip Academy '))
  246. ////            ->to("athimni.afrah@gmail.com")
  247. //                    ->to($user1->getEmail())
  248. //                    ->subject('Nouveau inscrit ')
  249. //                    ->htmlTemplate(
  250. //                        'registration/emailadmin.html.twig'
  251. //                    )
  252. //
  253. //
  254. //                    ->context([
  255. //
  256. //                        'user'=>$user1,'us'=>$user,
  257. //                        'setting'=> $settingRepository->find(1),
  258. //
  259. //
  260. //
  261. //                    ]);
  262. //
  263. //
  264. //                $mailer->send($email);
  265. //            }
  266. //
  267. //            // do anything else you need here, like send an email
  268. //
  269. //            $this->addFlash("success", "Votre compte à été créé avec succès!");
  270. //
  271. //            return $this->redirectToRoute('app_login');
  272. //        }
  273. //
  274. //        return $this->render('registration/register.html.twig', [
  275. //            'registrationForm' => $form->createView(),
  276. //            'setting'=>$setting,
  277. //        ]);
  278. //    }
  279. }