src/Controller/RegistrationController.php line 70
<?phpnamespace App\Controller;use App\Entity\User;use App\Form\Builder\ChangePasswordFormType;use App\Form\Builder\RegistrationFormType;use App\Security\EmailVerifier;use App\Service\UuidService;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Mime\Address;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Contracts\Translation\TranslatorInterface;class RegistrationController extends AbstractController{private EntityManagerInterface $entityManager;private EmailVerifier $emailVerifier;public function __construct(EmailVerifier $emailVerifier, EntityManagerInterface $entityManager){$this->entityManager = $entityManager;$this->emailVerifier = $emailVerifier;}#[Route('/{_locale}/register', name: 'app_register', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'hy'])]public function register(Request $request,UserPasswordHasherInterface $userPasswordHasher,EntityManagerInterface $entityManager): Response {if ($this->getUser()) {return $this->redirectToRoute('page_home');}$user = new User();$form = $this->createForm(RegistrationFormType::class, $user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {// encode the plain password$user->setPassword($userPasswordHasher->hashPassword($user,$form->get('password')->getData()));$user->setIsVerified(true);$user->setRoles(["ROLE_USER"]);$entityManager->persist($user);$entityManager->flush();// generate a signed url and email it to the user// $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,// (new TemplatedEmail())// ->from(new Address('example@example.com', 'Deep sleep'))// ->to($user->getEmail())// ->subject('Please Confirm your Email')// ->htmlTemplate('password-reset.twig')// );// do anything else you need here, like send an emailreturn $this->redirectToRoute('sonata_admin_dashboard');}return $this->render('registration/register.html.twig', ['registrationForm' => $form->createView(),]);}private function sendEmail($user): void{$this->emailVerifier->sendEmailConfirmation('page_password-verify',$user,(new TemplatedEmail())->from(new Address('example@example.com', 'Deep sleep'))->to($user->getemail())->to('ashot.arzumanyan99@gmail.com')->subject('Please Confirm your Email')->context(['code' => $user->getVerificationCode(),])->htmlTemplate('registration/password-reset.twig'));}#[Route('/{_locale}/password/reset', name: 'page_password-reset', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'hy'])]public function verifyUserEmail(Request $request, UuidService $uuid_service): Response{$email = $request->get('email');$user = $this->entityManager->getRepository(User::class)->findOneBy(["email" => $email]);$digits = 5;$uuid = $uuid_service->generate();$code = rand(pow(10, $digits - 1), pow(10, $digits) - 1);$code = 12345;if (!$user) {return $this->render('registration/password-reset.twig');} else {$user->setVerificationCode($code);$user->setUuid($uuid);$this->entityManager->persist($user);$this->entityManager->flush();$this->sendEmail($user);return $this->redirectToRoute('page_password-verify');}}#[Route('/{_locale}/password/verify', name: 'page_password-verify', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'hy'])]public function verifyCode(Request $request): Response{$session = $request->getSession();$uuid = $session->get('uuid');// if ( ! $uuid) {// return $this->redirectToRoute('page_home');// }$user = $this->entityManager->getRepository(User::class)->findOneBy(["uuid" => $uuid]);if ($request->get('submit')) {$code = $request->get('code');if ($user->getVerificationCode() == (int)$code) {$session->set('code', (int)$code);return $this->redirectToRoute('page_password-change');} else {return $this->redirectToRoute('page_password-verify');}}return $this->render('registration/receive-code.html.twig');}#[Route('/password/resend', name: 'page_password-resend')]public function resendEmail(Request $request): Response{$session = $request->getSession();$uuid = $session->get('uuid');$user = $this->entityManager->getRepository(User::class)->findOneBy(["uuid" => $uuid]);$this->sendEmail($user);return $this->redirectToRoute('page_password-verify');}#[Route('/{_locale}/password/change', name: 'page_password-change', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'hy'])]public function changePassword(Request $request,UserPasswordHasherInterface $userPasswordHasher,EntityManagerInterface $entity_manager): Response {$session = $request->getSession();$uuid = $session->get('uuid');if ( ! $uuid) {return $this->redirectToRoute('page_home');}$code = $session->get('code');$user = $this->entityManager->getRepository(User::class)->findOneBy(["uuid" => $uuid]);if ( ! $user->getVerificationCode() == $code) {return $this->redirectToRoute('page_password-verify');}$form = $this->createForm(ChangePasswordFormType::class, $user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {// encode the plain password$user->setPassword($userPasswordHasher->hashPassword($user,$form->get('password')->getData()));$entity_manager->flush();return $this->redirectToRoute('app_login');}return $this->render('registration/password-change.html.twig', ['registrationForm' => $form->createView(),]);}#[Route('{_locale}/change-user-info', name: 'change_user_info', requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'hy'], methods: 'POST')]public function changeUserInfo(Request $request, UserPasswordHasherInterface $passwordHasher, EntityManagerInterface $entityManager): Response{$user = $this->getUser();$data = $request->request->all();$oldPassword = $request->request->get('passwordOld');$newPassword = $request->request->get('passwordNew');$repeatPassword = $request->request->get('passwordRepeat');if ( ! empty($oldPassword) || ! empty($newPassword) || ! empty($repeatPassword)) {if ( ! $passwordHasher->isPasswordValid($user, $oldPassword)) {$this->addFlash('error', 'incorrect_old_password');return $this->redirectToRoute('page_profile');}// Check if the new passwords matchif ($newPassword !== $repeatPassword) {$this->addFlash('error', 'passwords_do_not_match');return $this->redirectToRoute('page_profile');}$hashedPassword = $passwordHasher->hashPassword($user, $newPassword);$user->setPassword($hashedPassword);}if (($user->getCountry() !== $data['country']) && ! empty($data['country'])) {$user->setCountry($data['country']);}if (($user->getPhone() !== $data['phone']) && ! empty($data['phone'])) {$user->setPhone($data['phone']);}$userEmail = $entityManager->getRepository(User::class)->findOneBy(["email" => $data['email']]);if (!empty($userEmail) and $user->getEmail() !== $data['email']){$this->addFlash('error', 'user_exist');return $this->redirectToRoute('page_profile');}if (($user->getEmail() !== $data['email']) && !empty($data['email']) && empty($userEmail)) {$user->setEmail($data['email']);}if (($user->getCity() !== $data['city']) && ! empty($data['city'])) {$user->setCity($data['city']);}$entityManager->persist($user);$entityManager->flush();$this->addFlash('success', 'user_changed_successfully');return $this->redirectToRoute('page_profile');}}