src/Controller/RegistrationController.php line 62

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. /* use App\Entity\Main\Offre;
  4. use App\Entity\Main\Abonnement;
  5. use App\Entity\Main\User;
  6. use App\Entity\Main\UserPlatform; */
  7. use App\Entity\Abonnement;
  8. use App\Entity\Offre;
  9. use App\Entity\User;
  10. use App\Entity\UserPlatform;
  11. use App\Form\RegistrationFormType;
  12. use App\Repository\OffreRepository;
  13. use App\Repository\UserRepository;
  14. use App\Security\EmailVerifier;
  15. use Doctrine\ORM\EntityManagerInterface;
  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\Mailer\MailerInterface;
  21. use Symfony\Component\Mime\Address;
  22. use Symfony\Component\Mime\Email;
  23. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Contracts\Translation\TranslatorInterface;
  26. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  27. use Symfony\Component\Security\Core\Security;
  28. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  29. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  30. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  31. use Twig\Environment;
  32. class RegistrationController extends AbstractCoreController
  33. {
  34.     private EmailVerifier $emailVerifier;
  35.     public function __construct(EmailVerifier $emailVerifier)
  36.     {
  37.         $this->emailVerifier $emailVerifier;
  38.     }
  39.     /**
  40.      * @Route("/register", name="app_register")
  41.      */
  42.     public function register(Request $requestOffreRepository $offreRepositoryUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $entityManagerSecurity $securityEnvironment $twigMailerInterface $mailer): Response
  43.     {
  44.         if (null !== $security->getUser()) {
  45.             return $this->redirectToRoute('index', [], Response::HTTP_SEE_OTHER);
  46.         }
  47.         $user = new User();
  48.         
  49.         $datas $request->request->get('registration_form');
  50.         if(!isset($datas['offre'])) {
  51.             $datas['offre'] = (int)$request->query->get('offre');
  52.         }
  53.         $offre $offreRepository->find((int)$datas['offre']);
  54.         /* if($offre instanceof Offre) {
  55.             $user->setOffreId($offre);
  56.         } */
  57.         $form $this->createForm(RegistrationFormType::class, $user);
  58.         $form->handleRequest($request);
  59.         if ($form->isSubmitted() && $form->isValid()) {
  60.             // encode the plain password
  61.             $user->setPassword(
  62.             $userPasswordHasher->hashPassword(
  63.                     $user,
  64.                     $form->get('plainPassword')->getData()
  65.                 )
  66.             );
  67.             $user->setRoles(["ROLE_USER"]);
  68.             $user->setIsVerified(true);
  69.             $entityManager->persist($user);
  70.             $entityManager->flush();
  71.             $userPlatform = new UserPlatform();
  72.             $userPlatform->setEmail($user);
  73.             $userPlatform->setFirstname($request->request->get('registration_form')['firstname']);
  74.             $userPlatform->setLastname($request->request->get('registration_form')['lastname']);
  75.             $userPlatform->setPays($request->request->get('registration_form')['pays']);
  76.             $userPlatform->setTelephone($request->request->get('registration_form')['phoneNumber']);
  77.             $userPlatform->setStatut('Non actif');
  78.             $userPlatform->setCreatedAt(new \DateTimeImmutable(date('Y-m-d H:i:s')));
  79.             $entityManager->persist($userPlatform);
  80.             $entityManager->flush();
  81.             // generate a signed url and email it to the user
  82.             $to $user->getEmail();
  83.             $subject "Inscription";
  84.     
  85.             $message $twig->render('registration/confirmation_email.html.twig', [
  86.                 'email' => $user->getEmail(),
  87.                 'name' => $userPlatform->getFirstname() . (!empty($userPlatform->getLastname()) ? ' ' $userPlatform->getLastname() : ''),
  88.             ]);
  89.     
  90.             // Always set content-type when sending HTML email
  91.             $headers "MIME-Version: 1.0" "\r\n";
  92.             $headers .= "Content-type:text/html;charset=UTF-8" "\r\n";
  93.             // More headers
  94.             $headers .= 'From: '.$_ENV["EMAIL_SENDER_NAME"].' <'.$_ENV["EMAIL_SENDER"].'>' "\r\n";
  95.     
  96.             //code nampiako
  97.             $mail = (new Email())
  98.                 ->from($_ENV["EMAIL_SENDER"])
  99.                 ->to($to)
  100.                 ->subject($subject)
  101.                 ->html($message);
  102.             $mail->getHeaders()->addTextHeader('MIME-Version','1.0')
  103.                 ->addTextHeader('Content-type','text/html;charset=UTF-8');
  104.             $mailer->send($mail);
  105.             // Manually login user / authenticate user after registration
  106.             $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  107.             $this->get('security.token_storage')->setToken($token);
  108.             $this->get('session')->set('_security_secured_area'serialize($token));
  109.             if($offre instanceof Offre) {
  110.                 $abonnement = new Abonnement();
  111.                 $abonnement->setAbonOffre($offre);
  112.                 /* $abonnement->setAbonOffre($offre->getId()); */
  113.                 $abonnement->setAbonUser($userPlatform);
  114.                 $abonnement->setStatutPaiement(0);
  115.                 $abonnement->setIsSubscriber(false);
  116.                 $abonnement->setCreatedAt(new \DateTime(date('Y-m-d H:i:s')));
  117.                 $entityManager->persist($abonnement);
  118.                 $entityManager->flush();
  119.                 return $this->redirectToRoute('app_abonnement_pay', ['id' => $abonnement->getId()]);
  120.             }
  121.             else {
  122.                 return $this->redirectToRoute('app_offre_index');
  123.             }
  124.         }
  125.         return $this->render('registration/register.html.twig', [
  126.             'registrationForm' => $form->createView(),
  127.             'offres' => $offreRepository->findOffreActifWithPlan(),
  128.         ]);
  129.     }
  130.     /**
  131.      * @Route("/verify/email", name="app_verify_email")
  132.      */
  133.     public function verifyUserEmail(Request $requestTranslatorInterface $translatorUserRepository $userRepository): Response
  134.     {
  135.         $id $request->get('id');
  136.         if (null === $id) {
  137.             return $this->redirectToRoute('app_register');
  138.         }
  139.         $user $userRepository->find($id);
  140.         if (null === $user) {
  141.             return $this->redirectToRoute('app_register');
  142.         }
  143.         // validate email confirmation link, sets User::isVerified=true and persists
  144.         try {
  145.             $this->emailVerifier->handleEmailConfirmation($request$user);
  146.         } catch (VerifyEmailExceptionInterface $exception) {
  147.             $this->addFlash('verify_email_error'$translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));
  148.             return $this->redirectToRoute('app_register');
  149.         }
  150.         // @TODO Change the redirect on success and handle or remove the flash message in your templates
  151.         $this->addFlash('success''Votre adresse e-mail a été vérifiée.');
  152.         return $this->redirectToRoute('app_register');
  153.     }
  154.     /**
  155.      * @Route("delete-user", name="app_delete_user")
  156.      */
  157.     public function removeUser(UserRepository $userRepoEntityManagerInterface $em){
  158.         $user $userRepo->findOneBy(['email' => 'vonintsoa.teko@gmail.com']);
  159.         $em->remove($user);
  160.         $res $em->flush();
  161.         dd($user);
  162.     }
  163. }