src/Controller/App/UserController.php line 177

  1. <?php
  2. namespace App\Controller\App;
  3. use App\Entity\User;
  4. use App\Form\ChangePasswordFormType;
  5. use App\Form\UserCreateType;
  6. use App\Form\UserType;
  7. use App\Repository\UserRepository;
  8. use App\Service\FileUploader;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  16. #[Route('/app/user')]
  17. #[IsGranted('IS_AUTHENTICATED_FULLY')]
  18. class UserController extends AbstractController
  19. {
  20.     public function __construct(private TranslatorInterface $translator)
  21.     {
  22.     }
  23.     #[Route('/'name'app_user_index'methods: ['GET''POST'])]
  24.     public function index(Request $requestUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasherFileUploader $fileUploader): Response
  25.     {
  26.         $user = new User();
  27.         $form $this->createForm(UserCreateType::class, $user);
  28.         $form->handleRequest($request);
  29.         if ($form->isSubmitted() && $form->isValid()) {
  30.             /** @var $user App\Entity\User */
  31.             $CurrentUser $this->getUser();
  32.             $user->setCompany($CurrentUser->getCompany());
  33.             $user->setPassword(
  34.                 $userPasswordHasher->hashPassword(
  35.                     $user,
  36.                     $form->get('plainPassword')->getData()
  37.                 )
  38.             );
  39.             $photo $form->get('photo')->getData();
  40.             if ($photo) {
  41.                 $uploadedFileName $fileUploader->upload($photo'users_dir');
  42.                 $user->setPhoto($uploadedFileName);
  43.             }
  44.             $userRepository->add($usertrue);
  45.             // TODO: send email invitation and to verify user
  46.             $this->addFlash('success'$this->translator->trans('Succès !!'));
  47.             return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  48.         }
  49.         if ($form->isSubmitted() && !$form->isValid()) {
  50.             $this->addFlash('error'$this->translator->trans('Error !!'));
  51.         }
  52.         return $this->render('app/user/index.html.twig', [
  53.             'users' => $userRepository->findAll(),
  54.             'form' => $form,
  55.         ]);
  56.     }
  57.     #[Route('/new'name'app_user_new'methods: ['GET''POST'])]
  58.     public function new(Request $requestUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasherFileUploader $fileUploader): Response
  59.     {
  60.         return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  61.         //     $user = new User();
  62.         //     $form = $this->createForm(UserType::class, $user);
  63.         //     $form->handleRequest($request);
  64.         //     if ($form->isSubmitted() && $form->isValid()) {
  65.         //         /** @var $user App\Entity\User */
  66.         //         $CurrentUser = $this->getUser();
  67.         //         $user->setCompany($CurrentUser->getCompany());
  68.         //         $user->setPassword(
  69.         //             $userPasswordHasher->hashPassword(
  70.         //                 $user,
  71.         //                 $form->get('password')->getData()
  72.         //             )
  73.         //         );
  74.         //         $photo = $form->get('photo')->getData();
  75.         //         if ($photo) {
  76.         //             $uploadedFileName = $fileUploader->upload($photo, 'users_dir');
  77.         //             $user->setPhoto($uploadedFileName);
  78.         //         }
  79.         //         $userRepository->add($user, true);
  80.         //         // TODO: send email invitation and to verify user
  81.         //         $this->addFlash('success', $this->translator->trans('Succès !!'));
  82.         //         return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  83.         //     }
  84.         //     return $this->renderForm('app/user/new.html.twig', [
  85.         //         'user' => $user,
  86.         //         'form' => $form,
  87.         //     ]);
  88.     }
  89.     #[Route('/{id}'name'app_user_show'methods: ['GET'])]
  90.     public function show(User $user): Response
  91.     {
  92.         return $this->redirectToRoute('app_user_edit', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
  93.         // return $this->render('app/user/show.html.twig', [
  94.         //     'user' => $user,
  95.         // ]);
  96.     }
  97.     #[Route('/{id}/edit'name'app_user_edit'methods: ['GET''POST'])]
  98.     public function edit(Request $requestUser $userUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasherFileUploader $fileUploader): Response
  99.     {
  100.         $form $this->createForm(UserType::class, $user);
  101.         $form->handleRequest($request);
  102.         if ($form->isSubmitted() && $form->isValid()) {
  103.             $photo $form->get('photo')->getData();
  104.             if ($photo) {
  105.                 $uploadedFileName $fileUploader->upload($photo'users_dir');
  106.                 $user->setPhoto($uploadedFileName);
  107.             }
  108.             $userRepository->add($usertrue);
  109.             $this->addFlash('success'$this->translator->trans('Succès !!'));
  110.             return $this->redirectToRoute('app_user_edit', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
  111.         }
  112.         return $this->renderForm('app/user/edit.html.twig', [
  113.             'user' => $user,
  114.             'form' => $form,
  115.         ]);
  116.     }
  117.     #[Route('/{id}/toggleactive'name'app_user_toggle_active'methods: ['GET''POST'])]
  118.     public function toggle_active(Request $requestUser $userUserRepository $userRepository): Response
  119.     {
  120.         $user->setIsActive(!$user->isIsActive());
  121.         $userRepository->add($usertrue);
  122.         $this->addFlash('success'$this->translator->trans('Succès !!'));
  123.         return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  124.     }
  125.     #[Route('/{id}/editpassword'name'app_user_edit_password'methods: ['GET''POST'])]
  126.     public function edit_password(Request $requestUser $userUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasherFileUploader $fileUploader): Response
  127.     {
  128.         // The token is valid; allow the user to change their password.
  129.         $form_password $this->createForm(ChangePasswordFormType::class);
  130.         $form_password->handleRequest($request);
  131.         if ($form_password->isSubmitted() && $form_password->isValid()) {
  132.             if ($form_password->get('plainPassword')) {
  133.                 $user->setPassword(
  134.                     $userPasswordHasher->hashPassword(
  135.                         $user,
  136.                         $form_password->get('plainPassword')->getData()
  137.                     )
  138.                 );
  139.             }
  140.             $userRepository->add($usertrue);
  141.             $this->addFlash('success'$this->translator->trans('Succès !!'));
  142.             return $this->redirectToRoute('app_user_edit_password', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
  143.         }
  144.         return $this->renderForm('app/user/edit-password.html.twig', [
  145.             'user' => $user,
  146.             'form_password' => $form_password,
  147.         ]);
  148.     }
  149.     #[Route('/{id}'name'app_user_delete'methods: ['POST'])]
  150.     public function delete(Request $requestUser $userUserRepository $userRepository): Response
  151.     {
  152.         if ($this->isCsrfTokenValid('delete' $user->getId(), $request->request->get('_token'))) {
  153.             try {
  154.                 $userRepository->remove($usertrue);
  155.                 $this->addFlash('success'$this->translator->trans('Succès !!'));
  156.             } catch (\Exception $e) {
  157.                 $errorMessage $e->getMessage();
  158.                 $result explode(':'$errorMessage);
  159.                 $this->addFlash('error'$result[0]);
  160.             }
  161.         }
  162.         return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  163.     }
  164. }