src/Controller/Front/RegistrationController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Referee;
  4. use App\ImageOptimizer;
  5. use App\Security\EmailVerifier;
  6. use App\Form\RegistrationFormType;
  7. use Symfony\Component\Mime\Address;
  8. use App\Repository\RefereeRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Security\Core\Security;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\String\Slugger\AsciiSlugger;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  18. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  19. class RegistrationController extends AbstractController
  20. {
  21.     private EmailVerifier $emailVerifier;
  22.     public function __construct(EmailVerifier $emailVerifier)
  23.     {
  24.         $this->emailVerifier $emailVerifier;
  25.     }
  26.     #[Route('/register'name'app_register')]
  27.     public function register(Request $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $entityManagerImageOptimizer $imageOptimizer): Response
  28.     {
  29.         if ($this->getUser()) {
  30.             return $this->redirectToRoute('index');
  31.         }
  32.         // if($request->request->get('reponsecaptcha')) {
  33.         //     // Connecter à Google avec les clés
  34.         //     $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
  35.         //     $recaptcha_secret = '6Lf_McYqAAAAAKfaSj8d8sItDN7tEUz0W_ClFinZ';
  36.         //     $recaptcha_response = $request->request->get('reponsecaptcha');
  37.         //     // Décoder les informations récupérées
  38.         //     $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
  39.         //     $recaptcha = json_decode($recaptcha);
  40.         //     if ($recaptcha->score < 0.5) {
  41.         //         return $this->redirectToRoute('index');
  42.         //     }
  43.         // }
  44.         $user = new Referee();
  45.         $form $this->createForm(RegistrationFormType::class, $user);
  46.         $form->handleRequest($request);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             // if (229 == $user->country->id) {
  49.             //     echo "is ven";
  50.             // }
  51.             // echo "is not";;
  52.             $slugger = new AsciiSlugger();
  53.             $slug $slugger->slug($user->getFirstname().' '.$user->getLastname());
  54.             
  55.             $avatar $form['avatar']->getData();
  56.             if($avatar) {
  57.                 $avatar_name 'profil_'.$slug.'.'.$avatar->guessExtension();
  58.                 $avatar->move($this->getParameter('img_path').'/profiles'$avatar_name);
  59.                 $user->setAvatar($avatar_name);
  60.                 $imageOptimizer->resize($this->getParameter('img_path').'/profiles/'.$avatar_name$this->getParameter('img_size_profil'));
  61.             }
  62.             $badge $form['kyorugiIRCard']->getData();
  63.             if($badge) {
  64.                 $badge_name 'badge_kyorugi_'.$slug.'.'.$badge->guessExtension();
  65.                 $badge->move($this->getParameter('img_path').'/badges'$badge_name);
  66.                 $user->setKyorugiIRCard($badge_name);
  67.                 $imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
  68.             }
  69.             $badge $form['poomsaeIRCard']->getData();
  70.             if($badge) {
  71.                 $badge_name 'badge_poomsae_'.$slug.'.'.$badge->guessExtension();
  72.                 $badge->move($this->getParameter('img_path').'/badges'$badge_name);
  73.                 $user->setPoomsaeIRCard($badge_name);
  74.                 $imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
  75.             }
  76.             
  77.             // encode the plain password
  78.             $user->setPassword(
  79.             $userPasswordHasher->hashPassword(
  80.                     $user,
  81.                     $form->get('plainPassword')->getData()
  82.                 )
  83.             );
  84.             $user->setActive(0);
  85.             $entityManager->persist($user);
  86.             $entityManager->flush();
  87.             // generate a signed url and email it to the user
  88.             $this->emailVerifier($user);
  89.             // do anything else you need here, like send an email
  90.             return $this->redirectToRoute('index');
  91.         }
  92.         return $this->render('Front/registration/register.html.twig', [
  93.             'registrationForm' => $form->createView(),
  94.         ]);
  95.     }
  96.     #[Route('/verify/email'name'app_verify_email')]
  97.     public function verifyUserEmail(Request $requestRefereeRepository $refereeRepository): Response
  98.     {
  99.         $id $request->get('id');
  100.         if (null === $id) {
  101.             return $this->redirectToRoute('app_register');
  102.         }
  103.         $user $refereeRepository->find($id);
  104.         if (null === $user) {
  105.             return $this->redirectToRoute('app_register');
  106.         }
  107.         // validate email confirmation link, sets User::isVerified=true and persists
  108.         try {
  109.             $this->emailVerifier->handleEmailConfirmation($request$user);
  110.         } catch (VerifyEmailExceptionInterface $exception) {
  111.             $this->addFlash('danger'$exception->getReason());
  112.             return $this->redirectToRoute('app_register');
  113.         }
  114.         // @TODO Change the redirect on success and handle or remove the flash message in your templates
  115.         $this->addFlash('success''Your email address has been verified.');
  116.         return $this->redirectToRoute('index');
  117.     }
  118.     #[Route('/profil'name'profil')]
  119.     public function profil(Request $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $entityManagerRefereeRepository $refereeRepositorySecurity $securityImageOptimizer $imageOptimizer): Response
  120.     {
  121.         $user $refereeRepository->find($security->getUser());
  122.         $avatar_old $user->getAvatar();
  123.         $kyorugi_old $user->getKyorugiIRCard();
  124.         $poomsae_old $user->getPoomsaeIRCard();
  125.         $form $this->createForm(RegistrationFormType::class, $user);
  126.         $form->handleRequest($request);
  127.         if ($form->isSubmitted() && $form->isValid()) {
  128.             $slugger = new AsciiSlugger();
  129.             $slug $slugger->slug($user->getFirstname().' '.$user->getLastname());
  130.             
  131.             $avatar $form['avatar']->getData();
  132.             if($avatar) {
  133.                 $avatar_name 'profil_'.$slug.'.'.$avatar->guessExtension();
  134.                 $avatar->move($this->getParameter('img_path').'/profiles'$avatar_name);
  135.                 $user->setAvatar($avatar_name);
  136.                 $imageOptimizer->resize($this->getParameter('img_path').'/profiles/'.$avatar_name$this->getParameter('img_size_profil'));
  137.             } else {
  138.                 $user->setAvatar($avatar_old);
  139.             }
  140.             $badge $form['kyorugiIRCard']->getData();
  141.             if($badge) {
  142.                 $badge_name 'badge_kyorugi_'.$slug.'.'.$badge->guessExtension();
  143.                 $badge->move($this->getParameter('img_path').'/badges'$badge_name);
  144.                 $user->setKyorugiIRCard($badge_name);
  145.                 $imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
  146.             } else {
  147.                 $user->setKyorugiIRCard($kyorugi_old);
  148.             }
  149.             $badge $form['poomsaeIRCard']->getData();
  150.             if($badge) {
  151.                 $badge_name 'badge_poomsae_'.$slug.'.'.$badge->guessExtension();
  152.                 $badge->move($this->getParameter('img_path').'/badges'$badge_name);
  153.                 $user->setPoomsaeIRCard($badge_name);
  154.                 $imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
  155.             } else {
  156.                 $user->setPoomsaeIRCard($poomsae_old);
  157.             }
  158.             // encode the plain password
  159.             $user->setPassword(
  160.             $userPasswordHasher->hashPassword(
  161.                     $user,
  162.                     $form->get('plainPassword')->getData()
  163.                 )
  164.             );
  165.             $entityManager->persist($user);
  166.             $entityManager->flush();
  167.             return $this->redirectToRoute('index');
  168.         }
  169.         return $this->render('Front/registration/register.html.twig', [
  170.             'registrationForm' => $form->createView(),
  171.         ]);
  172.     }
  173.     #[Route('/resendverify'name'emailverify')]
  174.     public function resendverify(Security $security
  175.     {
  176.         $user $security->getUser();
  177.         $this->emailVerifier($user);
  178.         return $this->redirectToRoute('index');
  179.     }
  180.     private function emailVerifier($user)
  181.     {
  182.         $this->emailVerifier->sendEmailConfirmation('app_verify_email'$user,
  183.             (new TemplatedEmail())
  184.                 ->from(new Address('contact@africatkdreferee.com''Referees Africa'))
  185.                 ->to($user->getEmail())
  186.                 ->subject('Please Confirm your Email')
  187.                 ->htmlTemplate('Front/registration/confirmation_email.html.twig')
  188.         );
  189.     }
  190. }