src/Controller/RegistrationController.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ResourceStock;
  4. use App\Entity\User;
  5. use App\Entity\World;
  6. use App\Form\RegistrationFormType;
  7. use App\Repository\ConstantRepository;
  8. use App\Repository\WorldDataRepository;
  9. use App\Repository\WorldRepository;
  10. use App\Security\AppCustomAuthenticator;
  11. use App\Service\ConfigService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  19. // use Symfony\Contracts\Translation\TranslatorInterface;
  20. class RegistrationController extends AbstractController
  21. {
  22.     #[Route('/app/register', name: 'app_register')]
  23.     public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, AppCustomAuthenticator $authenticator, 
  24.     EntityManagerInterface $entityManager, ConstantRepository $repo, WorldRepository $worldRepository, WorldDataRepository $wdRepo, ConfigService $configService): Response
  25.     {
  26.         $authorization = $repo->findOneBy(["name" => "inscription", "value" => 1]);
  27.         if(!$authorization){
  28.             return $this->redirectToRoute('app_register_error');
  29.         }
  30.         // $resourcesType = ["bois", "osier", "pommes", "poires"];
  31.         $resourcesType = $configService->getResourcesType();
  32.         $user = new User();
  33.         $form = $this->createForm(RegistrationFormType::class, $user);
  34.         $form->handleRequest($request);
  35.         if ($form->isSubmitted() && $form->isValid()) {
  36.             // Le monde de départ du nouvel utilisateur
  37.             $currentWorld = null;
  38.             $worlds = $wdRepo->findAll();
  39.             foreach($worlds as $worldItem){
  40.                 $world = new World();
  41.                 if($worldItem->getNumber() == 1){
  42.                     $world->setIsUnlocked(1);
  43.                     $currentWorld = $world;
  44.                 } else {
  45.                     $world->setIsUnlocked(0);
  46.                 }
  47.                 $world->setWorldData($worldItem);
  48.                 $world->setUser($user);
  49.                 $entityManager->persist($world);
  50.             }
  51.             // Vérification 
  52.             if ($currentWorld === null) { 
  53.                 throw new \RuntimeException('Le WorldData numéro 1 est introuvable.'); 
  54.             }
  55.             foreach($resourcesType as $type){
  56.                 $resource = new ResourceStock();
  57.                 $resource->setName($type);
  58.                 $resource->setQuantity(0);
  59.                 $resource->setUser($user);
  60.                 $entityManager->persist($resource);
  61.             }
  62.             // argent de départ
  63.             // $user->setMoney(100);
  64.             // $world = $worldRepository->findOneBy(["isUnlocked" => 1]);
  65.             // encode the plain password
  66.             $user->setPassword(
  67.                 $userPasswordHasher->hashPassword(
  68.                     $user,
  69.                     $form->get('plainPassword')->getData()
  70.                 )
  71.             );
  72.             // $user->setCurrentWorld($worldItem);
  73.             $user->setCurrentWorld($currentWorld);
  74.             $entityManager->persist($user);
  75.             $entityManager->flush();
  76.             // do anything else you need here, like send an email
  77.             return $userAuthenticator->authenticateUser(
  78.                 $user,
  79.                 $authenticator,
  80.                 $request
  81.             );
  82.         }
  83.         return $this->render('registration/register.html.twig', [
  84.             'registrationForm' => $form->createView(),
  85.         ]);
  86.     }
  87.     #[Route('/register/error', name: 'app_register_error')]
  88.     public function registerError(): Response
  89.     {
  90.         return $this->render('registration/registerError.html.twig');
  91.     }
  92. }