<?php
namespace ARSHDF\UserBundle\Controller;
use ARSHDF\UserBundle\Entity\UserManager;
use ARSHDF\UserBundle\Form\ImportType;
use ARSHDF\UserBundle\Form\UserType;
use ARSHDF\UserBundle\Service\LogService;
use ARSHDF\UserBundle\Service\PasswordService;
use ARSHDF\UserBundle\Service\UserNotificationService;
use DateTime;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher;
class RegistrationController extends AbstractController
{
private UserManager $userManager;
private UserPasswordHasher $passwordHasher;
private ParameterBagInterface $parameterBag;
private UserNotificationService $notificationService;
private LogService $logService;
private PasswordService $passwordService;
public function __construct(UserManager $userManager, UserPasswordHasher $passwordHasher, ParameterBagInterface $parameterBag,
UserNotificationService $notificationService, LogService $logService, PasswordService $passwordService)
{
$this->userManager = $userManager;
$this->passwordHasher = $passwordHasher;
$this->parameterBag = $parameterBag;
$this->notificationService = $notificationService;
$this->logService = $logService;
$this->passwordService = $passwordService;
}
/**
* @throws Exception
*/
public function registration(Request $request): Response
{
$allow_inscription = $this->parameterBag->get('user.gestion_admin.allow_inscription');
if (!$allow_inscription){
return $this->redirectToRoute('arshdf_user_login');
}
$auto_enabled_user = $this->parameterBag->get('user.gestion_admin.user_auto_enabled');
$user = $this->userManager->createUser();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$em = $this->getDoctrine()->getManager();
if (!$this->passwordService->validateStrength($form->get('plainPassword')->getData())){
$form->get('plainPassword')->addError(new FormError($this->passwordService->getPasswordPatternMessage()));
return $this->render('@User/registration.html.twig', [
'form' => $form->createView(),
]);
}
try {
$user->setEnabled($auto_enabled_user);
$user->setToActivate(!$auto_enabled_user);
$user->setDeleted(false);
$user->setCreatedAt(new DateTime());
$user->setPassword(
$this->passwordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setPasswordUpdatedAt(new DateTime());
$user->addRole('ROLE_USER');
$this->logService->generate(LogService::USER_REGISTERED, $user);
$em->persist($user);
$em->flush();
if ($auto_enabled_user){
$this->addFlash('success', 'Votre compte a été créé.');
}else{
$this->notificationService->sendNewAccountNotificationToGestionnaire($user);
$this->addFlash('success', 'Votre compte a été créé. Il est en attente de validation par le gestionnaire d\'habilitation.');
}
$this->notificationService->sendNewAccountNotificationToUser($user);
}catch (Exception $exception){
throw new Exception($exception->getMessage());
}
return $this->redirectToRoute('arshdf_user_login');
}
return $this->render('@User/registration.html.twig', [
'form' => $form->createView(),
]);
}
}