src/Infra/Symfony/Controller/UserController.php line 58

  1. <?php
  2. declare(strict_types=1);
  3. namespace Infra\Symfony\Controller;
  4. use Infra\Symfony\Form\Type\ChangePasswordType;
  5. use Infra\Symfony\Form\Type\UserEditType;
  6. use Infra\Symfony\Persistance\Doctrine\Entity\Member;
  7. use Infra\Symfony\Persistance\Doctrine\Entity\User;
  8. use Infra\Symfony\Persistance\Doctrine\Repository\MemberFamilyRepository;
  9. use Infra\Symfony\Persistance\Doctrine\Repository\MemberRepository;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  16. #[Route('/profile')]
  17. #[IsGranted('ROLE_USER')]
  18. class UserController extends BaseController
  19. {
  20.     #[Route('/'name:'app_user_show'methods: [Request::METHOD_GET])]
  21.     public function show(MemberRepository $memberRepositoryMemberFamilyRepository $familyRepository): Response
  22.     {
  23.         /** @var User $user */
  24.         $user $this->getUser();
  25.         $families = [];
  26.         $familyMembers = [];
  27.         $member $memberRepository->findOneByEmail($user->getEmail());
  28.         if ($member) {
  29.             $families $member->getFamilies();
  30.             $familyMembers[] = $memberRepository->findOneByEmail($member->getEmail());
  31.         } else {
  32.             $families[] = $familyRepository->findOneByEmail($user->getEmail());
  33.         }
  34.         foreach ($families as $family) {
  35.             $members $memberRepository->findByFamily($family);
  36.             $familyMembers array_merge($familyMembers$members);
  37.         }
  38.         $familyMembers array_unique($familyMembers);
  39.         return $this->render('user/show.html.twig', [
  40.             'user' => $user,
  41.             'familyMembers' => $familyMembers,
  42.             'families' => $families,
  43.         ]);
  44.     }
  45.     private function getMember(): Member
  46.     {
  47.     }
  48.     #[Route('/edit'name:'user_edit'methods: [Request::METHOD_GETRequest::METHOD_POST])]
  49.     public function edit(Request $request): Response
  50.     {
  51.         $user $this->getUser();
  52.         $form $this->createForm(UserEditType::class, $user);
  53.         $form->handleRequest($request);
  54.         if ($form->isSubmitted() && $form->isValid()) {
  55.             $this->getEntityManager()->flush();
  56.             $this->addFlash('success''user.updated_successfully');
  57.             return $this->redirectToRoute('user_edit');
  58.         }
  59.         return $this->render('user/edit.html.twig', [
  60.             'user' => $user,
  61.             'form' => $form->createView(),
  62.         ]);
  63.     }
  64.     #[Route('/change-password'name:'user_change_password'methods: [Request::METHOD_GETRequest::METHOD_POST])]
  65.     public function changePassword(Request $requestUserPasswordHasherInterface $hasher): Response
  66.     {
  67.         /** @var PasswordAuthenticatedUserInterface $user */
  68.         $user $this->getUser();
  69.         $form $this->createForm(ChangePasswordType::class);
  70.         $form->handleRequest($request);
  71.         if ($form->isSubmitted() && $form->isValid()) {
  72.             $user->setPassword($hasher->hashPassword($user$form->get('newPassword')->getData()));
  73.             $this->getEntityManager()->flush();
  74.             return $this->redirectToRoute('security_logout');
  75.         }
  76.         return $this->render('user/change_password.html.twig', [
  77.             'form' => $form->createView(),
  78.         ]);
  79.     }
  80. }