src/Controller/Front/ProRegistrationController.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use Stripe\Stripe;
  4. use App\Service\BrevoService;
  5. use App\Repository\OfferRepository;
  6. use App\Service\InternationalService;
  7. use App\Repository\WebsiteInfoRepository;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. #[Route(path'{_locale}')]
  13. class ProRegistrationController extends AbstractController
  14. {
  15.     private $apiKey;
  16.     private $stripe;
  17.     private $request;
  18.     private $internationalService;
  19.     public function __construct(RequestStack $requestStackInternationalService $internationalService, private BrevoService $brevoService)
  20.     {
  21.         $this->apiKey $_ENV['STRIPE_SECRET_KEY'];
  22.         $this->request $requestStack->getCurrentRequest();
  23.         $this->stripe $this->stripe = new \Stripe\StripeClient($this->apiKey);
  24.         $this->internationalService $internationalService;
  25.     }
  26.     private function generateString(int $length 64)
  27.     {
  28.         $length = ($length 4) ? $length;
  29.         return bin2hex(random_bytes(($length - ($length 2)) / 2));
  30.     }
  31.     #[Route(path'/membership-presentation'name'membership_presentation')]
  32.     public function membershipPresentation(OfferRepository $offerRepoWebsiteInfoRepository $websiteInfoRepositoryRequest $request)
  33.     {
  34.         $locale = ($request->getLocale() ? $request->getLocale() : 'en');
  35.         $monthlyOffers $offerRepo->findBy(['billing' => 'monthly']);
  36.         $yearlyOffers $offerRepo->findBy(['billing' => 'yearly']);
  37.         $websiteinfos $websiteInfoRepository->getWebsiteInfo($locale);
  38.         $standard[] = $monthlyOffers[0];
  39.         $standard[] = $yearlyOffers[0];
  40.         $vip[] = $vipPlus[] = $monthlyOffers[1];
  41.         $vip[] = $vipPlus[] = $yearlyOffers[1];
  42.         if (isset($_POST['type'])) {
  43.             $type $_POST['type'];
  44.             $routeName $type '_register';
  45.             return $this->redirectToRoute($routeName);
  46.         }
  47.         return $this->render('/front/pro/membership-presentation.html.twig', [
  48.             'monthlyOffers' => $monthlyOffers,
  49.             'yearlyOffers' => $yearlyOffers,
  50.             'standard' => $standard,
  51.             'vip' => $vip,
  52.             'vipPlus' => $vipPlus,
  53.             'sportsCount' => 0,
  54.             'free' => false,
  55.             'websiteinfos' => $websiteinfos
  56.         ]);
  57.     }
  58.     
  59.     /*
  60.     #[Route(path: '/registration-informations', name: 'pro_registration_informations')]
  61.     public function proRegistrationInformations(Request $request, EntityManagerInterface $manager, RoleRepository $roleRepository, UserPasswordHasherInterface $passwordHasher, ToPro $toPro, UserRepository $userRepository)
  62.     {
  63.         $user = $this->getUser();
  64.         if ($user != null) {
  65.             return $this->redirectToRoute('homepage');
  66.         }
  67.         $timeZone = $this->internationalService->findVisitorTimeZone();
  68.         $session = $request->getSession();
  69.         $proType = $session->get('registrationProType');
  70.         $email = $session->get('registrationEmail');
  71.         $password = $session->get('registrationPassword');
  72.         $phone = $session->get('registrationPhone');
  73.         if ($proType == null || $email == null || $password == null || $phone == null) {
  74.             return $this->redirectToRoute('pro_registration_type');
  75.         }
  76.         if ($proType == 'coach') {
  77.             $pro = new Coach();
  78.             $form = $this->createForm(CoachRegisterType::class, $pro);
  79.         }
  80.         if ($proType == 'club') {
  81.             $pro = new Club();
  82.             $form = $this->createForm(ClubRegisterType::class, $pro);
  83.         }
  84.         if ($proType == 'operator') {
  85.             $pro = new Operator();
  86.             $form = $this->createForm(OperatorRegisterType::class, $pro);
  87.         }
  88.         $form->handleRequest($request);
  89.         
  90.         $slugger = new AsciiSlugger();
  91.         if ($form->isSubmitted() && $form->isValid()) {
  92.             $hashed = $passwordHasher->hashPassword($pro, $password);
  93.             $proInfo = $pro->getProInfo();
  94.             $proInfo->setFullname($pro->getFirstname() . ' ' . $pro->getLastname())
  95.                 ->setPageVisible(false)
  96.                 ->setCoverPhoto('cover.png')
  97.                 ->setHaveSubscription(false)
  98.                 ->setContactEmail($email);
  99.             $sports = $proInfo->getSports();
  100.             foreach ($sports as $sport) {
  101.                 $sport->addPro($proInfo);
  102.                 $manager->persist($sport);
  103.             }
  104.             $slug = strtolower($slugger->slug($pro->getFirstname() . '-' . $pro->getLastname() . '-' . rand(10000, 98765)));
  105.             $role = $roleRepository->findOneBy(['title' => 'ROLE_PRO']);
  106.             $pro->setRegisteredAt(new DateTime())
  107.                 ->setToken($this->generateString(32))
  108.                 ->setTimezone($timeZone)
  109.                 ->addUserRole($role)
  110.                 ->setIsPro(true)
  111.                 ->setPhoto('default-profile.png')
  112.                 ->setSlug($slug)
  113.                 ->setNotification(true)
  114.                 ->setActivated(false)
  115.                 ->setHasAccess(false)
  116.                 ->setPassword($hashed)
  117.                 ->setStatus('online')
  118.                 ->setLanguage($this->request->getLocale());
  119.             $coachInfo = new CoachInfo();
  120.             $coachInfo->setOwner($pro)
  121.                 ->setName($proInfo->getFullname())
  122.                 ->setAddress($pro->getAddress());
  123.             try {
  124.                 $manager->persist($proInfo);
  125.                 $manager->persist($pro);
  126.                 $manager->persist($coachInfo);
  127.                 $manager->flush();
  128.                 
  129.             } catch (\Throwable $th) {
  130.                 $this->addFlash(
  131.                     'success',
  132.                     "Une erreur s'est produite. Veillez réessayer"
  133.                 );
  134.                 return $this->redirectToRoute('coach_register');
  135.             }
  136.             if ($pro->getNewsletter()) {
  137.                 $this->brevoService->createBrevoContact($pro->getFirstname(), $pro->getLastname(), $pro->getEmail(), 'pro');
  138.             }
  139.             $toPro->confirmEmail($pro);
  140.             $this->addFlash(
  141.                 'registration',
  142.                 ""
  143.             );
  144.             return $this->redirectToRoute('homepage');
  145.             
  146.         }
  147.         return $this->render('front/pro/registration/coach-registration.html.twig', [
  148.             'form' => $form->createView(),
  149.             'type' => 'coach'
  150.         ]);
  151.     }
  152.     #[Route(path: '/coach-registration', name: 'coach_register')]
  153.     public function coachRegistration(Request $request, EntityManagerInterface $manager, RoleRepository $roleRepository, UserPasswordHasherInterface $passwordHasher, ToPro $toPro, UserRepository $userRepository)
  154.     {
  155.         $user = $this->getUser();
  156.         if ($user != null) {
  157.             return $this->redirectToRoute('homepage');
  158.         }
  159.         $timeZone = $this->internationalService->findVisitorTimeZone();
  160.         $coach = new Coach();
  161.         $slugger = new AsciiSlugger();
  162.         $form = $this->createForm(CoachRegisterType::class, $coach);
  163.         $form->handleRequest($request);
  164.         if ($form->isSubmitted() && $form->isValid()) {
  165.             if ($userRepository->findOneBy(['email' => $coach->getEmail()])) {
  166.                 $form->get('email')->addError(new FormError("Un compte existe avec cet email"));
  167.             } else {
  168.                 $password = $coach->getPassword();
  169.                 $hashed = $passwordHasher->hashPassword($coach, $password);
  170.                 $proInfo = $coach->getProInfo();
  171.                 $proInfo->setFullname($coach->getFirstname() . ' ' . $coach->getLastname())
  172.                     ->setPageVisible(false)
  173.                     ->setCoverPhoto('cover.png')
  174.                     ->setHaveSubscription(false)
  175.                     ->setContactEmail($coach->getEmail());
  176.                 $sports = $proInfo->getSports();
  177.                 foreach ($sports as $sport) {
  178.                     $sport->addPro($proInfo);
  179.                     $manager->persist($sport);
  180.                 }
  181.                 $slug = strtolower($slugger->slug($coach->getFirstname() . '-' . $coach->getLastname() . '-' . rand(10000, 98765)));
  182.                 $role = $roleRepository->findOneBy(['title' => 'ROLE_PRO']);
  183.                 $coach->setRegisteredAt(new DateTime())
  184.                     ->setToken($this->generateString(32))
  185.                     ->setTimezone($timeZone)
  186.                     ->addUserRole($role)
  187.                     ->setIsPro(true)
  188.                     ->setPhoto('default-profile.png')
  189.                     ->setSlug($slug)
  190.                     ->setNotification(true)
  191.                     ->setActivated(false)
  192.                     ->setHasAccess(false)
  193.                     ->setPassword($hashed)
  194.                     ->setStatus('online')
  195.                     ->setLanguage($this->request->getLocale());
  196.                 $coachInfo = new CoachInfo();
  197.                 $coachInfo->setOwner($coach)
  198.                     ->setName($proInfo->getFullname())
  199.                     ->setAddress($coach->getAddress());
  200.                 try {
  201.                     $manager->persist($proInfo);
  202.                     $manager->persist($coach);
  203.                     $manager->persist($coachInfo);
  204.                     $manager->flush();
  205.                     
  206.                 } catch (\Throwable $th) {
  207.                     $this->addFlash(
  208.                         'success',
  209.                         "Une erreur s'est produite. Veillez réessayer"
  210.                     );
  211.                     return $this->redirectToRoute('coach_register');
  212.                 }
  213.                 if ($coach->getNewsletter()) {
  214.                     $this->brevoService->createBrevoContact($coach->getFirstname(), $coach->getLastname(), $coach->getEmail(), 'pro');
  215.                 }
  216.                 $toPro->confirmEmail($coach);
  217.                 $this->addFlash(
  218.                     'registration',
  219.                     ""
  220.                 );
  221.                 return $this->redirectToRoute('homepage');
  222.             }
  223.         }
  224.         return $this->render('front/pro/registration/coach-registration.html.twig', [
  225.             'form' => $form->createView(),
  226.             'type' => 'coach'
  227.         ]);
  228.     }
  229.     #[Route(path: '/club-registration', name: 'club_register')]
  230.     public function clubRegister(Request $request, EntityManagerInterface $manager, RoleRepository $roleRepository, UserPasswordHasherInterface $passwordHasher, ToPro $toPro, UserRepository $userRepository)
  231.     {
  232.         $user = $this->getUser();
  233.         if ($user != null) {
  234.             return $this->redirectToRoute('homepage');
  235.         }
  236.         $timeZone = $this->internationalService->findVisitorTime();
  237.         $club = new Club();
  238.         $slugger = new AsciiSlugger();
  239.         $form = $this->createForm(ClubRegisterType::class, $club);
  240.         $form->handleRequest($request);
  241.         if ($form->isSubmitted() && $form->isValid()) {
  242.             if ($userRepository->findOneBy(['email' => $club->getEmail()])) {
  243.                 $form->get('email')->addError(new FormError("Un compte existe avec cet email"));
  244.             } else {
  245.                 $password = $club->getPassword();
  246.                 $hashed = $passwordHasher->hashPassword($club, $password);
  247.                 $proInfo = $club->getProInfo();
  248.                 $proInfo->setFullname($club->getClubInfo()->getName())
  249.                     ->setPageVisible(false)
  250.                     ->setCoverPhoto('cover.png')
  251.                     ->setContactEmail($club->getEmail());
  252.                 $sports = $proInfo->getSports();
  253.                 foreach ($sports as $sport) {
  254.                     $sport->addPro($proInfo);
  255.                     $availability = new Availability();
  256.                     $availability->setSport($sport)
  257.                         ->setClub($club);
  258.                     $manager->persist($availability);
  259.                     $manager->persist($club);
  260.                     $manager->persist($sport);
  261.                 }
  262.                 $slug = strtolower($slugger->slug($club->getClubInfo()->getName() . '-' . rand(10000, 98765)));
  263.                 $role = $roleRepository->findOneBy(['title' => 'ROLE_PRO']);
  264.                 $club->setRegisteredAt(new DateTime())
  265.                     ->setToken($this->generateString(32))
  266.                     ->setIsPro(true)
  267.                     ->addUserRole($role)
  268.                     ->setTimezone($timeZone)
  269.                     ->setPhoto('default-profile.png')
  270.                     ->setSlug($slug)
  271.                     ->setNotification(true)
  272.                     ->setActivated(false)
  273.                     ->setHasAccess(false)
  274.                     ->setPassword($hashed)
  275.                     ->setStatus('online')
  276.                     ->setLanguage($this->request->getLocale());
  277.                 $clubInfo = $club->getClubInfo();
  278.                 $clubInfo->setOwner($club)
  279.                     ->setName($proInfo->getFullname())
  280.                     ->setAddress($club->getAddress());
  281.                 try {
  282.                     $manager->persist($proInfo);
  283.                     $manager->persist($club);
  284.                     $manager->persist($clubInfo);
  285.                     $manager->flush();
  286.                 } catch (\Throwable $th) {
  287.                     $this->addFlash(
  288.                         'success',
  289.                         "Une erreur s'est produite. Veillez réessayer"
  290.                     );
  291.                     return $this->redirectToRoute('club_register');
  292.                 }
  293.                 if ($club->getNewsletter()) {
  294.                     $this->brevoService->createBrevoContact($club->getFirstname(), $club->getLastname(), $club->getEmail(), 'pro');
  295.                 }
  296.                 $toPro->confirmEmail($club);
  297.                 $this->addFlash(
  298.                     'registration',
  299.                     ""
  300.                 );
  301.                 return $this->redirectToRoute('homepage');
  302.             }
  303.         }
  304.         return $this->render('front/pro/registration/club-registration.html.twig', [
  305.             'form' => $form->createView(),
  306.             'type' => 'club'
  307.         ]);
  308.     }
  309.     #[Route(path: '/operator-registration', name: 'operator_register')]
  310.     public function operatorRegister(Request $request, EntityManagerInterface $manager, RoleRepository $roleRepository, UserPasswordHasherInterface $passwordHasher, ToPro $toPro, UserRepository $userRepository)
  311.     {
  312.         $user = $this->getUser();
  313.         if ($user != null) {
  314.             return $this->redirectToRoute('homepage');
  315.         }
  316.         $timeZone = $this->internationalService->findVisitorTimeZone();
  317.         $operator = new Operator();
  318.         $slugger = new AsciiSlugger();
  319.         $form = $this->createForm(OperatorRegisterType::class, $operator);
  320.         $form->handleRequest($request);
  321.         if ($form->isSubmitted() && $form->isValid()) {
  322.             if ($userRepository->findOneBy(['email' => $operator->getEmail()])) {
  323.                 $form->get('email')->addError(new FormError("Un compte existe avec cet email"));
  324.             } else {
  325.                 $password = $operator->getPassword();
  326.                 $hashed = $passwordHasher->hashPassword($operator, $password);
  327.                 $proInfo = $operator->getProInfo();
  328.                 $proInfo->setFullname($operator->getOperatorInfo()->getName())
  329.                     ->setPageVisible(false)
  330.                     ->setCoverPhoto('cover.png')
  331.                     ->setContactEmail($operator->getEmail());
  332.                 $sports = $proInfo->getSports();
  333.                 foreach ($sports as $sport) {
  334.                     $sport->addPro($proInfo);
  335.                     $manager->persist($sport);
  336.                 }
  337.                 $slug = strtolower($slugger->slug($operator->getOperatorInfo()->getName() . '-' . rand(10000, 98765)));
  338.                 $role = $roleRepository->findOneBy(['title' => 'ROLE_PRO']);
  339.                 $operator->setRegisteredAt(new DateTime())
  340.                     ->setToken($this->generateString(32))
  341.                     ->addUserRole($role)
  342.                     ->setIsPro(true)
  343.                     ->setSlug($slug)
  344.                     ->setPhoto('default-profile.png')
  345.                     ->setTimezone($timeZone)
  346.                     ->setNotification(true)
  347.                     ->setActivated(false)
  348.                     ->setPassword($hashed)
  349.                     ->setHasAccess(false)
  350.                     ->setStatus('online')
  351.                     ->setLanguage($this->request->getLocale());
  352.                 $operatorInfo = $operator->getOperatorInfo();
  353.                 $operatorInfo->setOwner($operator);
  354.                 $proInfo->setFullname($operatorInfo->getName())
  355.                     ->setContactEmail($operator->getEmail());
  356.                 try {
  357.                     $manager->persist($proInfo);
  358.                     $manager->persist($operator);
  359.                     $manager->persist($operatorInfo);
  360.                     $manager->flush();
  361.                 } catch (\Throwable $th) {
  362.                     $this->addFlash(
  363.                         'success',
  364.                         "Une erreur s'est produite. Veillez réessayer"
  365.                     );
  366.                     return $this->redirectToRoute('operator_register');
  367.                 }
  368.                 if ($operator->getNewsletter()) {
  369.                     $this->brevoService->createBrevoContact($operator->getFirstname(), $operator->getLastname(), $operator->getEmail(), 'pro');
  370.                 }
  371.                 $toPro->confirmEmail($operator);
  372.                 $this->addFlash(
  373.                     'registration',
  374.                     ""
  375.                 );
  376.                 return $this->redirectToRoute('homepage');
  377.             }
  378.         }
  379.         return $this->render('front/pro/registration/operator-registration.html.twig', [
  380.             'form' => $form->createView(),
  381.             'type' => 'operator'
  382.         ]);
  383.     }
  384.         */
  385.     
  386. }