<?php
namespace App\Controller;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Repository\UserRepository;
use App\Form\AccountEditForm;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Form\ChangePasswordForm;
use Symfony\Component\Form\FormError;
#[Route('/account')]
class AccountController extends AbstractController
{
#[Route('/', methods: ['GET'], name: 'account_index')]
#[Cache(smaxage: 10)]
public function index(Request $request,EntityManagerInterface $entityManager,UserRepository $usersRepository): Response
{
$userData = $entityManager->getRepository(\App\Entity\UserProfiles::class)->find($this->getUser()->getUserId());
$phoneNumber = $userData->getPhone() ? $userData->getPhone() : '';
return $this->render('account/index.html.twig', [
'user' => $this->getUser(),
'phoneNumber' => $phoneNumber,
]);
}
#[Route('/edit', name: 'account_edit', methods: ['POST','GET'])]
public function edit(Request $request, EntityManagerInterface $entityManager, UserRepository $usersRepository): Response
{
$userProfileData = $entityManager->getRepository(\App\Entity\UserProfiles::class)->find($this->getUser()->getUserId());
$formData['name'] = $this->getUser()->getName();
$formData['email'] = $this->getUser()->getEmail();
$formData['phoneNumber'] = $userProfileData->getPhone();
$form = $this->createForm(AccountEditForm::class, $formData);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$name = $form->get('name')->getData();
$email = $form->get('email')->getData();
$phoneNumber = $form->get('phoneNumber')->getData();
$userIfExists = $usersRepository->loadUserByEmailIdentifier($email, $this->getUser()->getUserId());
if(!$userIfExists){
$userData = $entityManager->getRepository(\App\Entity\User::class)->find($this->getUser()->getUserId());
$userProfileData = $entityManager->getRepository(\App\Entity\UserProfiles::class)->find($this->getUser()->getUserId());
if($userData && $userProfileData){
$userData->setName($name);
$userData->setEmail($email);
$userProfileData->setPhone($phoneNumber);
$entityManager->persist($userData);
$entityManager->persist($userProfileData);
$entityManager->flush();
}
$this->addFlash('success', 'Update successfully.');
return $this->redirectToRoute('account_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('account/edit.html.twig', [
'user' => $this->getUser(),
'form' => $form,
]);
}
#[Route('/email-verify', name: 'account_verify_email', methods: ['GET'])]
public function verifyEmail(Request $request, EntityManagerInterface $entityManager, UserRepository $usersRepository): Response
{
$userEmailExists = true;
$params = $request->query->all();
if(isset($params['email'])){
$userIfExists = $usersRepository->loadUserByEmailIdentifier($params['email'], $this->getUser()->getUserId());
if($userIfExists){
$userEmailExists = true;
}else{
$userEmailExists = false;
}
}
return new JsonResponse(array('user_email_exists' => $userEmailExists));
}
#[Route('/change-password', name: 'admin_change_password', methods: ['POST','GET'])]
public function changePassword(Request $request, EntityManagerInterface $entityManager, UserRepository $usersRepository, UserPasswordHasherInterface $passwordHasher): Response
{
$user = $this->getUser();
if(!$user) {
throw $this->createNotFoundException('No user found for id ' . $user->getUserId());
}
$form = $this->createForm(ChangePasswordForm::class);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$planPasswordLength = strlen($form->get('newpassword')->getData());
/* if(empty($planPasswordLength)) {
$form->get('newpassword')->addError(new FormError('Password cannot be blank'));
}
elseif($planPasswordLength < 6) {
$form->get('newpassword')->addError(new FormError('Your Password must be at least 6 characters length'));
}
elseif($planPasswordLength > 120) {
$form->get('newpassword')->addError(new FormError('Your Password must not exceed 120 characters'));
} */
}
if ($form->isSubmitted() && $form->isValid()) {
$plainPassword = $form->get('newpassword')->getData();
$password = $passwordHasher->hashPassword($user, $plainPassword);
$user->setPassword($password);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('account_index');
}
return $this->renderForm('account/change-password.html.twig', [
'user' => $this->getUser(),
'form' => $form,
]);
}
}