<?php
namespace App\UserRegistration\Controller;
use App\Controller\AbstractController;
use App\UserRegistration\Form\LawFirmCreateFormType;
use App\UserRegistration\Repository\UserRegistrationRepository;
use AppBundle\Enum\LanguageEnum;
use AppBundle\Enum\LawFirmEquipmentEnum;
use AppBundle\Enum\LawFirmOrganizationEnum;
use AppBundle\Enum\UserJobTitleEnum;
use Exception;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Intl\Countries;
use Symfony\Component\Intl\Currencies;
/**
* class UserRegistrationController
* @Route("/registration", name="registration_")
*/
class UserRegistrationController extends AbstractController
{
/**
* @Route("", name="user_create_form")
* @param CsrfTokenManagerInterface $tokenManager
* @return Response
*/
public function index(CsrfTokenManagerInterface $tokenManager): Response
{
$formToken = $tokenManager
->getToken('user_create_form')
->getValue();
return $this->render('registration/register_step_one.html.twig', [
'formToken' => $formToken,
]);
}
/**
* @Route("/confirmation", name="confirm", options={"expose"=true})
* @return Response
*/
public function userRegistrationConfirmation(): Response
{
return $this->render('registration/confirmation.html.twig');
}
/**
* @Route("/end-registration/{userToken}", name="end_registration", options={"expose"=true})
* @param Request $request
* @param CsrfTokenManagerInterface $tokenManager
* @param UserRegistrationRepository $repository
* @param LoggerInterface $logger
* @return Response
*/
public function userRegistrationEnd(
Request $request,
CsrfTokenManagerInterface $tokenManager,
UserRegistrationRepository $repository,
LoggerInterface $logger
): Response {
try {
$userToken = $request->get('userToken');
$userRegistration = $repository->findOneBy([
'token' => $userToken,
]);
if (null === $userRegistration) {
throw new Exception('Invalid token');
}
if ($userRegistration->getLawFirm()) {
throw new Exception('token expired');
}
$formToken = $tokenManager
->getToken(LawFirmCreateFormType::TOKEN_STRING)
->getValue();
$countries = Countries::getNames($request->getLocale());
$languages = LanguageEnum::getWebLanguages();
$currencies = Currencies::getNames();
array_walk($currencies, function (string &$currency) {
$currency = ucfirst($currency);
});
return $this->render('registration/register_step_two.html.twig', [
'countries' => $countries,
'languages' => $languages,
'currencies' => $currencies,
'userToken' => $userToken,
'formToken' => $formToken,
]);
} catch (\Throwable $e) {
$logger->error('Error on registration step 2', [
'exception' => $e,
]);
return $this->redirectToRoute('registration_user_create_form');
}
}
/**
* @Route("/one-last-thing", name="law_firm_survey", options={"expose"=true})
* @param CsrfTokenManagerInterface $tokenManager
* @return Response
*/
public function lawFirmInformationSurvey(CsrfTokenManagerInterface $tokenManager) : Response
{
$formToken = $tokenManager
->getToken('law_firm_informations_form')
->getValue();
return $this->render('registration/law_firm_survey.html.twig', [
'jobTitles' => UserJobTitleEnum::getChoicesWithLabels(),
'organizationTypes' => LawFirmOrganizationEnum::getChoicesWithLabels(),
'equipments' => LawFirmEquipmentEnum::getChoicesWithLabels(),
'formToken' => $formToken,
]);
}
}