src/Controller/RegistrationController.php line 189

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\EmailType;
  4. use App\Entity\User;
  5. use App\Entity\UserDetail;
  6. use App\Entity\UserImage;
  7. use App\Entity\UserImageType;
  8. use App\Entity\UserStatus;
  9. use App\Form\RegistrationFormType;
  10. use App\Repository\ImageMetadataRepository;
  11. use App\Repository\UserDetailRepository;
  12. use App\Repository\UserImageTypeRepository;
  13. use App\Repository\UserRepository;
  14. use App\Repository\UserStatusRepository;
  15. use App\Security\LoginFormAuthenticator;
  16. use App\Service\EmailService;
  17. use App\Service\Media\UserImageService;
  18. use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
  19. use Doctrine\DBAL\Schema\Exception\UniqueConstraintDoesNotExist;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. use App\Entity\ImageMetadata;
  29. use App\Form\UploadFormType;
  30. class RegistrationController extends AbstractController
  31. {
  32.     private $emailService;
  33.     private $userStatusRepository;
  34.     private $userImageService;
  35.     private  $userImageTypeRepository;
  36.     private $imageMetadataRepository;
  37.     private $userRepository;
  38.     private $userDetailRepository;
  39.     public function __construct(
  40.         EmailService $emailService,
  41.         UserStatusRepository $userStatusRepository,
  42.         UserImageTypeRepository $userImageTypeRepository,
  43.         ImageMetadataRepository $imageMetadataRepository,
  44.         UserImageService $userImageService,
  45.         UserRepository $userRepository,
  46.         UserDetailRepository $userDetailRepository
  47.     ){
  48.         $this->emailService $emailService;
  49.         $this->userImageService $userImageService;
  50.         $this->imageMetadataRepository $imageMetadataRepository;
  51.         $this->userImageTypeRepository $userImageTypeRepository;
  52.         $this->userStatusRepository $userStatusRepository;
  53.         $this->userRepository $userRepository;
  54.         $this->userDetailRepository $userDetailRepository;
  55.     }
  56.     #[Route('/register'name'app_register')]
  57.     public function register(Request $requestUserPasswordHasherInterface $userPasswordHasherUserAuthenticatorInterface $userAuthenticatorLoginFormAuthenticator $authenticatorEntityManagerInterface $entityManager): Response
  58.     {
  59.         $user = new User();
  60.         $form $this->createForm(RegistrationFormType::class, $user);
  61.         $imageMetadata = new ImageMetadata();
  62.         $uploadForm $this->createForm(UploadFormType::class,$imageMetadata, ['method' => 'POST']);
  63.         $form->handleRequest($request);
  64.         //if ($form->isSubmitted() && $form->isValid()) {
  65.         if ($form->isSubmitted()) {
  66.             try {
  67.                 // encode the plain password
  68.                 $user->setPassword(
  69.                     $userPasswordHasher->hashPassword(
  70.                         $user,
  71.                         $form->get('plainPassword')->getData()
  72.                     )
  73.                 );
  74.                 // Extra parameters to save on user
  75.                 $paymentRequiredStatus $this->userStatusRepository->find(UserStatus::STATUS_PAYMENT_AND_IDENTITY_REQUIRED);
  76.                 $user->setUserStatus($paymentRequiredStatus); // by default user will be in payment required status
  77.                 $user->setGender($form->get('gender')->getData());
  78.                 $user->setCreatedAt(new \DateTime('now'));
  79.                 $entityManager->persist($user);
  80.                 $entityManager->flush();
  81.             } catch ( UniqueConstraintViolationException $e){
  82.                 $this->addFlash('notice''Looks like you have already registered with this email '$form->get('email')->getData());
  83.                 return $this->redirectToRoute('app_register', [], 301);
  84.             }
  85.             if($request->request->get('imageMetadata')){
  86.                 $imageMetadata $this->imageMetadataRepository->find($request->request->get('imageMetadata'));
  87.                 $userImageType $this->userImageTypeRepository->find(UserImageType::LOGO);
  88.                 $this->userImageService->save($imageMetadata$userImageType$user);
  89.             }
  90.             /*
  91.             $mediaType = null;
  92.             if($request->request->get('metadataFront')){
  93.                 $imageMetadata = $this->imageMetadataRepository->find($request->request->get('metadataFront'));
  94.                 $mediaType = ($request->request->get('mediaType') =='PF' || $request->request->get('mediaType') =='PB') ? UserImageType::PASSPORT_FRONT : UserImageType::CITIZEN_FRONT;
  95.                 $userImageType = $this->userImageTypeRepository->find($mediaType);
  96.                 $this->userImageService->save($imageMetadata, $userImageType, $user);
  97.             }
  98.             if($request->request->get('metadataBack')){
  99.                 $imageMetadata = $this->imageMetadataRepository->find($request->request->get('metadataBack'));
  100.                 $mediaType = ($request->request->get('mediaType') =='PF' || $request->request->get('mediaType') =='PB') ? UserImageType::PASSPORT_BACK : UserImageType::CITIZEN_BACK;
  101.                 $userImageType = $this->userImageTypeRepository->find($mediaType);
  102.                 $this->userImageService->save($imageMetadata, $userImageType, $user);
  103.             }
  104.             */
  105.             /*
  106.             $identificationType = null;
  107.             if (!is_null($mediaType)){
  108.                 $identificationType == ($mediaType == UserImageType::PASSPORT_FRONT || $mediaType == UserImageType::PASSPORT_BACK) ? 'passport':'citizen';
  109.                 $user->getUserDetail()->setIdentificationType($identificationType);
  110.             }
  111.             if($request->request->get('identificationNumber')){
  112.                 $user->getUserDetail()->setIdentificationNumber($request->request->get('identificationNumber'));
  113.             }
  114.             $user->getUserDetail()->setUpdatedBy($user->getId());
  115.             $this->userRepository->save($user, true); */
  116.             // do anything else you need here, like send an email
  117. //            if ($user){
  118. //                $responseData = ['message' => 'Registration successfully.', 'status' =>'success','user'=> $user];
  119. //                $jsonResponse = json_encode($responseData);
  120. //                return new Response($jsonResponse);
  121. //            } else {
  122. //                $responseData = ['message' => 'Registration Failed.', 'status' =>'false'];
  123. //                $jsonResponse = json_encode($responseData);
  124. //                return new Response($jsonResponse);
  125. //            }
  126.             $userDetail $user->getUserDetail();
  127.             if (is_null($userDetail)){
  128.                 $userDetail = new UserDetail();
  129.             }
  130.             if(!is_null($form->get('houseNumber')->getData())){
  131.                 $userDetail->setHouseNumber($form->get('houseNumber')->getData());
  132.             }
  133.             if(! is_null($form->get('street')->getData())){
  134.                 $userDetail->setStreet($form->get('street')->getData());
  135.             }
  136.             if(!is_null($form->get('postCode')->getData())){
  137.                 $userDetail->setPostCode($form->get('postCode')->getData());
  138.             }
  139.             $userDetail->setUpdatedBy($user->getId());
  140.             $userDetail->setUser($user);
  141.             $this->userDetailRepository->save($userDetailtrue);
  142.             $user->setUserDetail($userDetail);
  143.             $this->userRepository->save($usertrue);
  144.             $emailType $this->emailService->getEmailTypeEntityByEmailTypeCode(EmailType::WELCOME);
  145.             $this->emailService->send(
  146.                 $user,
  147.                 $user->getEmail(),
  148.                 "Thank you for the registration.",
  149.                 $emailType,
  150.                 [
  151.                     'user' => $user,
  152.                     'name' => $user->getFirstName(),
  153.                 ],
  154.                 null // Sent by System
  155.             );
  156.             return $userAuthenticator->authenticateUser(
  157.                 $user,
  158.                 $authenticator,
  159.                 $request
  160.             );
  161.         }
  162.         return $this->render('registration/register.html.twig', [
  163.             'registrationForm' => $form->createView(),
  164.             'uploadForm' => $uploadForm->createView()
  165.         ]);
  166.     }
  167. }