<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Repository\CategorieElearningRepository;
use App\Repository\InscritSessionRepository;
use App\Repository\SettingRepository;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
class RegistrationController extends AbstractController
{
private $fromAddress;
public function __construct(
ParameterBagInterface $parameterBag // Injection du service ParameterBagInterface
) {
$this->fromAddress = $parameterBag->get('mailer_from_address');
}
#[Route('/register', name: 'app_register')]
public function register(CategorieElearningRepository $categorieElearningRepository,InscritSessionRepository $inscritSessionRepository, SettingRepository $settingRepository, UserRepository $userRepository, MailerInterface $mailer, Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, SessionInterface $session): Response
{
$setting = $settingRepository->find(1);
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$pwd = $form->get('plainPassword')->getData();
$nom=$request->request->get('nom');
$adresse=$request->request->get('adresse');
$matricule=$request->request->get('matricule');
// dd($nom,$adresse,$matricule);
// $user->setNomsociete($nom);
// $user->setAdressesociete($adresse);
// $user->setMatricule($matricule);
$roleuser=$form->get('options')->getData();
$rolefinal="ROLE_STUDENT";
switch ($roleuser) {
case 'Student':
$rolefinal='ROLE_STUDENT';
break;
case 'Goach':
$rolefinal='ROLE_COACH';
break;
case 'Partner':
$rolefinal='ROLE_PARTNER';
break;
default:
// Valeur d'option inconnue, ne rien faire
break;
}
// Store user data and password in session
$session->set('user_data', [
'email' => $user->getEmail(),
'nom'=>$user->getNom(),
'nomsociete'=>$nom,
'adrsociete'=>$adresse,
'matricule'=>$matricule,
'prenom'=>$user->getPrenom(),
'adresse'=>$user->getAdresse(),
'tel'=>$user->getPhone(),
'password' => $userPasswordHasher->hashPassword($user, $pwd),
'pwd'=>$pwd,
'roles' => $rolefinal,
'clientIP' => file_get_contents('https://api.ipify.org'),
'date' => new \DateTime('now')
]);
// Generate verification code
$verificationCode = random_int(100000, 999999);
$session->set('verification_code', $verificationCode);
// Send verification email
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($user->getEmail())
->subject('Votre code de vérification')
->htmlTemplate('registration/send_verification_code.html.twig')
->context(['code' => $verificationCode]);
$mailer->send($email);
// Redirect to verification page
return $this->redirectToRoute('app_verify_codeInscri');
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
'setting' => $setting,'categories'=>$categorieElearningRepository->findAll()
]);
}
#[Route('/verifyinscription', name: 'app_verify_codeInscri')]
public function verify(CategorieElearningRepository $categorieElearningRepository,UserRepository $userRepository,MailerInterface $mailer,InscritSessionRepository $inscritSessionRepository,SettingRepository $settingRepository,Request $request, SessionInterface $session, EntityManagerInterface $entityManager): Response
{
$inputCode = $request->request->get('code');
$storedCode = $session->get('verification_code');
$setting=$settingRepository->find(1);
if ($request->isMethod('POST')) {
if ($inputCode == $storedCode) {
// Retrieve user data from session
$userData = $session->get('user_data');
// Create and save user
$user = new User();
$user->setEmail($userData['email']);
$user->setAdressesociete($userData['adrsociete']);
$user->setNomsociete($userData['nomsociete']);
$user->setMatricule($userData['matricule']);
$user->setPassword($userData['password']);
$user->setNom($userData['nom']);
$user->setPrenom($userData['prenom']);
$user->setAdresse($userData['adresse']);
$user->setPhone($userData['tel']);
$user->setIsActive(true);
$user->setRoles([$userData['roles']]);
$user->setIpadress($userData['clientIP']);
$user->setDate($userData['date']);
$user->setLogo('student.jpg');
$user->setvu(0);
$entityManager->persist($user);
$entityManager->flush();
// Clear the session data
$session->remove('user_data');
$session->remove('verification_code');
$inscrits=$inscritSessionRepository->findBy(['email'=>$user->getEmail()]);
if($inscrits) {
foreach ($inscrits as $inscrit) {
$inscrit->setStagiaire($user);
$inscritSessionRepository->save($inscrit,true);
}
}
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($user->getEmail())
->subject('Bienvenue sur Sip Academy')
->htmlTemplate(
'registration/send_email.html.twig'
)
->context([
'emails' => $user->getEmail(),
'password' => $userData['pwd'],'user'=>$user,
'setting'=>$setting
]);
$mailer->send($email);
$us=$userRepository->findByRoleAdmin();
$tabusers=array();
foreach ($us as $user1) {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($user1->getEmail())
->subject('Nouveau inscrit ')
->htmlTemplate(
'registration/emailadmin.html.twig'
)
->context([
'user'=>$user1,'us'=>$user,
'setting'=> $settingRepository->find(1),
]);
$mailer->send($email);
}
$this->addFlash("success", "Votre compte a été créé avec succès!");
return $this->redirectToRoute('app_login');
}
$this->addFlash('error', 'Code de vérification incorrect.');
}
return $this->render('registration/verify_codeInscri.html.twig', ['setting'=>$setting,
'categories'=>$categorieElearningRepository->findAll()
]);
}
// #[Route('/register', name: 'app_register')]
// public function register(InscritSessionRepository $inscritSessionRepository,SettingRepository $settingRepository,UserRepository $userRepository,MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
// {
// $setting = $settingRepository->find(1);
// $user = new User();
// $form = $this->createForm(RegistrationFormType::class, $user);
// $form->handleRequest($request);
// $emails= $user->getEmail();
//
// if ($form->isSubmitted() && $form->isValid()) {
// $pwd = $form->get('plainPassword')->getData();
// // encode the plain password
// $user->setPassword(
// $userPasswordHasher->hashPassword(
// $user,
// $form->get('plainPassword')->getData()
// )
// );
// $options = $form->get('options')->getData();
// $clientIP = file_get_contents('https://api.ipify.org');
// $user->setIpadress($clientIP);
// $user->setLogo('student.jpg');
// // Donner des rôles différents en fonction de l'option sélectionnée
// switch ($options) {
// case 'Student':
// $user->setRoles(['ROLE_STUDENT']);
// break;
// case 'Goach':
// $user->setRoles(['ROLE_COACH']);
// break;
// case 'Partner':
// $user->setRoles(['ROLE_PARTNER']);
// break;
// default:
// // Valeur d'option inconnue, ne rien faire
// break;
// }
// $user->setDate(new \DateTime('now'));
// $user->setvu(0);
// $entityManager->persist($user);
// $entityManager->flush();
// $inscrits=$inscritSessionRepository->findBy(['email'=>$user->getEmail()]);
// if($inscrits) {
// foreach ($inscrits as $inscrit) {
// $inscrit->setStagiaire($user);
// $inscritSessionRepository->save($inscrit,true);
// }
// }
// $email = (new TemplatedEmail())
// ->from(new Address('support@smart-it-partner.com', 'Sip Academy '))
//// ->to("athimni.afrah@gmail.com")
// ->to($user->getEmail())
// ->subject('Bienvenue sur Sip Academy')
// ->htmlTemplate(
// 'registration/send_email.html.twig'
// )
//
//
// ->context([
// 'emails' => $emails,
// 'password' => $pwd,'user'=>$user,
// 'setting'=>$setting
//
//
// ]);
//
//
// $mailer->send($email);
// $us=$userRepository->findByRoleAdmin();
// $tabusers=array();
// foreach ($us as $user1) {
// $email = (new TemplatedEmail())
// ->from(new Address('support@smart-it-partner.com', 'Sip Academy '))
//// ->to("athimni.afrah@gmail.com")
// ->to($user1->getEmail())
// ->subject('Nouveau inscrit ')
// ->htmlTemplate(
// 'registration/emailadmin.html.twig'
// )
//
//
// ->context([
//
// 'user'=>$user1,'us'=>$user,
// 'setting'=> $settingRepository->find(1),
//
//
//
// ]);
//
//
// $mailer->send($email);
// }
//
// // do anything else you need here, like send an email
//
// $this->addFlash("success", "Votre compte à été créé avec succès!");
//
// return $this->redirectToRoute('app_login');
// }
//
// return $this->render('registration/register.html.twig', [
// 'registrationForm' => $form->createView(),
// 'setting'=>$setting,
// ]);
// }
}