src/Controller/User/RegistrationController.php line 38

  1. <?php
  2. namespace App\Controller\User;
  3. use App\Controller\AppController;
  4. use App\Entity\User;
  5. use App\Form\User\RegistrationForm;
  6. use App\Handler\MessageTrait;
  7. use App\Service\User\RegistrationService;
  8. use ReCaptcha\ReCaptcha;
  9. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. use Twig\Error\LoaderError;
  15. use Twig\Error\RuntimeError;
  16. use Twig\Error\SyntaxError;
  17. /**
  18.  * Class RegistrationController
  19.  * @package App\Controller\User
  20.  * @Route("/registracija")
  21.  */
  22. class RegistrationController extends AppController
  23. {
  24.     use AuthTrait;
  25.     /**
  26.      * @Route(name="register")
  27.      * @param RegistrationService $service
  28.      * @param ParameterBagInterface $parameterBag
  29.      * @return RedirectResponse|Response
  30.      * @throws LoaderError
  31.      * @throws RuntimeError
  32.      * @throws SyntaxError
  33.      */
  34.     public function create(RegistrationService $serviceParameterBagInterface $parameterBag)
  35.     {
  36.         // Ako je korisnik logiran, vrati ga na home page
  37.         if ($this->isGranted('ROLE_USER')) {
  38.             return $this->redirectToRoute('home');
  39.         }
  40.         $checkbox $this->getRequest()->get('registration-checkbox-slazese');
  41.         $recaptchaPublicKey $parameterBag->get('google_recaptcha_site_key');
  42.         $user = new User();
  43.         $form $this->createForm(RegistrationForm::class, $user, [
  44.             'validation_groups' => ['registration']
  45.         ]);
  46.         $form->handleRequest($this->getRequest());
  47.         // Ovo će se na svaki submit izvršiti
  48.         // Provjera prolazi i ako nije validna forma zbog uvjeta korištenja
  49.         if ($form->isSubmitted()) {
  50.             if (null === $checkbox) {
  51.                 $this->sendCustomMessage(MessageTrait::$error'registracija.uvjetiKoristenjaMorajuBitiPrihvaceni');
  52.                 return $this->render('security/registration.html.twig', [
  53.                     'form' => $form->createView(),
  54.                     'checked' => $checkbox,
  55.                     'recaptchaPublicKey' => $recaptchaPublicKey,
  56.                 ]);
  57.             }
  58.             // Ako su uvjeti prihvaćeni te nema errora na poljima, provjeravaj recaptchu
  59.             if ($form->isValid()) {
  60.                 $recaptcha = new ReCaptcha($parameterBag->get('google_recaptcha_secret_key'));
  61.                 $resp $recaptcha->verify($this->getRequest()->request->get('g-recaptcha-response'), $this->getRequest()->getClientIp());
  62.                 if (!$resp->isSuccess()) {
  63.                     $this->sendCustomMessage(MessageTrait::$error'registracija.recaptcha');
  64.                     return $this->render('security/registration.html.twig',
  65.                         [
  66.                             'form' => $form->createView(),
  67.                             'recaptchaPublicKey' => $recaptchaPublicKey,
  68.                             'checked' => $checkbox
  69.                         ]
  70.                     );
  71.                 }
  72.                 // Ako je sve prošlo, uzmi podatke, registriraj korisnika i pošalji e-mail za potvrdu acc-a
  73.                 /** @var User $data */
  74.                 $data $form->getData();
  75.                 $service->register($data);
  76.                 return $this->redirectToRoute('register-util-after-register');
  77.             }
  78.         }
  79.         return $this->render('security/registration.html.twig', [
  80.             'form' => $form->createView(),
  81.             'checked' => $checkbox,
  82.             'recaptchaPublicKey' => $recaptchaPublicKey,
  83.         ]);
  84.     }
  85.     /**
  86.      * @Route("/provjera-registracije", name="register-util-after-register")
  87.      */
  88.     public function redirectAfterRegister()
  89.     {
  90.         return $this->render('security/registration-wait-confirm.html.twig', []);
  91.     }
  92.     /**
  93.      * @param User $user
  94.      * @param TokenStorageInterface $tokenStorage
  95.      * @param RegistrationService $service
  96.      * @return RedirectResponse
  97.      * @Route("/potvrda-registracije/{registrationToken}", name="registration-confirm")
  98.      */
  99.     public function confirmUser(User $userTokenStorageInterface $tokenStorageRegistrationService $service)
  100.     {
  101.         $service->confirmRegistration($user);
  102.         $this->authenticateUser($user$tokenStorage);
  103.         return $this->redirectToRoute('home');
  104.     }
  105. }