src/Controller/SignUpController.php line 59

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Group;
  4. use App\Entity\ParentStudent;
  5. use App\Entity\Student;
  6. use App\Entity\StudentsToGroup;
  7. use App\Entity\User;
  8. use App\Message\RegisterMessage;
  9. use App\Service\GoogleSheet\GoogleSheetHandler;
  10. use App\Service\PaymentService;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  14. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Doctrine\Persistence\ManagerRegistry;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\Messenger\MessageBusInterface;
  21. use App\Service\UserService;
  22. use Symfony\Component\Security\Core\Security;
  23. use Ramsey\Uuid\Uuid;
  24. use Symfony\Component\HttpClient\HttpClient;
  25. use App\Service\GmailService;
  26. class SignUpController extends AbstractController
  27. {
  28.     public function __construct(
  29.         private UserService $userService,
  30.         private MessageBusInterface $bus
  31.     ) {}
  32.     #[Route('grupa/{groupId}/zarejestruj'name'app_sign_up_with_group')]
  33.     #[Route('grupa/zarejestruj/{courseId}/{type}'name'app_sign_up'defaults: ['type' => null])]
  34.     public function index(
  35.         int $groupId null,
  36.         SessionInterface $session,
  37.         Security $security,
  38.         ?string $courseId,
  39.         ?string $type 'regular'
  40.     ): Response {
  41.         if ($security->isGranted('IS_AUTHENTICATED_FULLY')) {
  42.             $userId $security->getUser()->getId();
  43.             if ($groupId) {
  44.                 $this->userService->signUpStudentToCourse($userId$groupId);
  45.                 return $this->redirectToRoute('dashboard');
  46.             }
  47.             $this->userService->addStudentToWaitingList($userId$courseId$type);
  48.             return $this->render('sign_up/waiting_list.html.twig');
  49.         }
  50.         return $this->render('sign_up/index.html.twig', [
  51.             'group_id' => $groupId,
  52.             'course_id' => $session->get('selected_course'),
  53.             'type' => $type
  54.         ]);
  55.     }
  56.     #[Route('grupa/register/success'name'register_success')]
  57.     public function registerSuccess(): Response
  58.     {
  59.         return $this->render('sign_up/register_success.html.twig');
  60.     }
  61.     #[Route('grupa/register/waiting_list'name'register_waiting_list')]
  62.     public function registerWaitingList(): Response
  63.     {
  64.         return $this->render('sign_up/register_waiting_list.html.twig');
  65.     }
  66.     #[Route('grupa/register/account_exsist'name'account_exsist')]
  67.     public function accountExsist(): Response
  68.     {
  69.         return $this->render('sign_up/account_exsist.html.twig');
  70.     }
  71.     #[Route('/zapisz_na_kurs'name'app_sign_up_potential_client')]
  72.     public function signUpOnCourse(
  73.         GmailService $mailer,
  74.         ManagerRegistry $doctrine,
  75.         Request $request,
  76.         EntityManagerInterface $entityManager,
  77.         UserPasswordHasherInterface $passwordHasher,
  78.         PaymentService $paymentService,
  79.         GoogleSheetHandler $googleSheetHandler
  80.     ): JsonResponse {
  81.         $clientData json_decode($request->getContent(), true);
  82.         $status 'error2';
  83.         if (!$this->isRecaptchaValid($clientData['g-recaptcha-response'] ?? '')) {
  84.             return new JsonResponse(['status' => $status]);
  85.         }
  86.         if (!is_array($clientData) || empty($clientData)) {
  87.             return new JsonResponse(['status' => 'error']);
  88.         }
  89.         $group null;
  90.         if (!empty($clientData['group'])) {
  91.             $group $doctrine->getRepository(Group::class)->find((int) $clientData['group']);
  92.         }
  93.         if ($this->userService->checkUserExist($clientData['email'], $clientData['phone'])) {
  94.             return new JsonResponse(['status' => 'error3']);
  95.         }
  96.         $uuid Uuid::uuid4()->toString();
  97.         $clientData['uuid'] = $uuid;
  98.         $user = (new User())
  99.             ->setEmail($clientData['email'])
  100.             ->setPhone($clientData['phone'])
  101.             ->setPassword($passwordHasher->hashPassword(new User(), $clientData['password']))
  102.             ->setDistrict($clientData['district']);
  103.         $parent = (new ParentStudent())
  104.             ->setEmail($clientData['email'])
  105.             ->setPhone($clientData['phone'])
  106.             ->setUser($user)
  107.             ->setName($clientData['parent_name'])
  108.             ->setSurname($clientData['parent_surname'])
  109.             ->setUuid($uuid);
  110.         $student = (new Student())
  111.             ->setName($clientData['child_name'])
  112.             ->setSurname($clientData['child_surname'])
  113.             ->setUser($user)
  114.             ->setUuid($uuid);
  115.         $entityManager->persist($user);
  116.         $entityManager->persist($parent);
  117.         $entityManager->persist($student);
  118.         if ($group) {
  119.             $studentToGroup = (new StudentsToGroup())
  120.                 ->setStudent($student)
  121.                 ->setClass($group);
  122.             $entityManager->persist($studentToGroup);
  123.         }
  124.         try {
  125.             $entityManager->flush();
  126.         } catch (\Exception $e) {
  127.             throw new \RuntimeException('Nieoczekiwany błąd przy zapisie. ' $e->getMessage(), 0$e);
  128.         }
  129.         $googleSheetHandler->saveToGoogleSheet($clientData['district'], $clientData);
  130.         $mailer->sendTwigEmail(
  131.             $clientData['email'],
  132.             'Test maila',
  133.             'register',
  134.             ['name' => $clientData['parent_name'] . ' ' $clientData['parent_surname']]
  135.         );
  136.         //$this->bus->dispatch(new RegisterMessage($parent, $group));
  137.         return new JsonResponse(['status' => 'success']);
  138.     }
  139.     private function isRecaptchaValid(string $recaptchaResponse): bool
  140.     {
  141.         $secretKey '6Lc4NSQrAAAAAD4anMSet7SJ-gTbqUiL_i8MVDBa';
  142.         $client HttpClient::create();
  143.         $response $client->request('POST''https://www.google.com/recaptcha/api/siteverify', [
  144.             'body' => [
  145.                 'secret' => $secretKey,
  146.                 'response' => $recaptchaResponse,
  147.             ],
  148.         ]);
  149.         $responseData $response->toArray();
  150.         return $responseData['success'] ?? false;
  151.     }
  152.     #[Route('/zarejestruj'name'register')]
  153.     public function register(SessionInterface $sessionint $groupId null, ?string $type 'regular'): Response
  154.     {
  155.         $courseId $session->get('selected_course');
  156.         return $this->render('sign_up/index.html.twig', [
  157.             'group_id' => $groupId,
  158.             'course_id' => $courseId,
  159.             'type' => $type
  160.         ]);
  161.     }
  162.     #[Route('/{slug}'name'register_district'requirements: ['slug' => 'krakow|krak|krk|lodz|poznan|slask|kurs|zapis|pzn|gdansk|rzeszow'])]
  163.     public function registerDistrict(Request $request): Response
  164.     {
  165.         $slug trim($request->getPathInfo(), '/');
  166.         return $this->render('sign_up/index.html.twig', [
  167.             'district' => $slug
  168.         ]);
  169.     }
  170. }