unique email address on creation

This commit is contained in:
Charles 2025-07-17 10:39:17 +02:00
parent d43b516826
commit 798ca4ba07
3 changed files with 81 additions and 11 deletions

View File

@ -52,7 +52,7 @@ class UserController extends AbstractController
$user = $entityManager->getRepository(User::class)->find($id);
if (!$user) {
throw $this->createNotFoundException('User not found');
throw $this->createNotFoundException(self::NOT_FOUND);
}
$userOrganizations = $this->userOrganizationService->getUserOrganizations($user);
@ -74,20 +74,16 @@ class UserController extends AbstractController
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//Data is a User object. App\Form\NewUserForm is a form type that maps to User entity
$data = $form->getData();
// Handle user creation logic here
$user = new User();
$user->setEmail($data['email']);
$user->setName($data['name']);
$user->setSurname($data['surname']);
$user->setPhoneNumber($data['number']);
//FOR DEV PURPOSES ONLY
$user->setPictureUrl("");
$user->setPassword($this->userService->generateRandomPassword());
$data->setPictureUrl("");
$data->setPassword($this->userService->generateRandomPassword());
//FOR DEV PURPOSES ONLY
$this->entityManager->persist($user);
$this->entityManager->persist($data);
$this->entityManager->flush();
// Redirect to user index
@ -99,6 +95,69 @@ class UserController extends AbstractController
]);
}
/**
* GET /user/{id}/edit - Show form to edit user
*/
#[Route('/{id}/edit', name: 'edit', requirements: ['id' => '\d+'], methods: ['GET'])]
public function edit(int $id, EntityManagerInterface $entityManager): Response
{
if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) {
throw $this->createAccessDeniedException('Access denied');
}
$user = $entityManager->getRepository(User::class)->find($id);
if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND);
}
return $this->render('user/edit.html.twig', [
'user' => $user,
]);
}
//
// /**
// * PUT/PATCH /user/{id} - Update user
// */
// #[Route('/{id}', name: 'update', methods: ['PUT', 'PATCH'], requirements: ['id' => '\d+'])]
// public function update(int $id, Request $request, EntityManagerInterface $entityManager): Response
// {
// if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) {
// throw $this->createAccessDeniedException('Access denied');
// }
//
// $user = $entityManager->getRepository(User::class)->find($id);
// if (!$user) {
// throw $this->createNotFoundException(self::NOT_FOUND);
// }
//
// // Handle user update logic
// // Validate, persist, flush, redirect
//
// return $this->redirectToRoute('user_show', ['id' => $id]);
// }
//
// /**
// * DELETE /user/{id} - Delete user
// */
// #[Route('/{id}', name: 'delete', methods: ['DELETE'], requirements: ['id' => '\d+'])]
// public function delete(int $id, EntityManagerInterface $entityManager): Response
// {
// if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) {
// throw $this->createAccessDeniedException('Access denied');
// }
//
// $user = $entityManager->getRepository(User::class)->find($id);
// if (!$user) {
// throw $this->createNotFoundException(self::NOT_FOUND));
// }
//
// // Handle user deletion logic
// $entityManager->remove($user);
// $entityManager->flush();
//
// return $this->redirectToRoute('user_index');
// }
#[Route('/deactivate/{id}', name: 'deactivate', methods: ['GET'])]
public function userDeactivate(Request $request, EntityManagerInterface $entityManager): Response
@ -107,7 +166,7 @@ class UserController extends AbstractController
$userId = $request->attributes->get('id');
$user = $entityManager->getRepository(User::class)->find($userId);
if (!$user) {
throw $this->createNotFoundException('User not found');
throw $this->createNotFoundException(self::NOT_FOUND);
}
$user->setIsActive(false);
$entityManager->persist($user);

View File

@ -9,7 +9,9 @@ use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
#[UniqueEntity(fields: ['email'], message: 'This email address is already in use.')]
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ORM\Table(name: '`user`')]
#[ORM\UniqueConstraint(name: 'UNIQ_IDENTIFIER_EMAIL', fields: ['email'])]

View File

@ -2,10 +2,12 @@
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class NewUserForm extends AbstractType
{
@ -15,6 +17,13 @@ class NewUserForm extends AbstractType
->add('email', EmailType::class, ['required' => true, 'label' => 'Email*'])
->add('name', TextType::class, ['required' => true, 'label' => 'Prénom*'])
->add('surname', TextType::class, ['required' => true, 'label' => 'Nom*'])
->add('number', TextType::class, ['required' => false, 'label' => 'Numéro de téléphone']);
->add('phoneNumber', TextType::class, ['required' => false, 'label' => 'Numéro de téléphone']);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}