src/Controller/Admin/UserController.php line 196

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Training\Groupe;
  4. use App\Entity\User;
  5. use App\Form\Admin\UserType;
  6. use App\Form\Admin\ProfileType;
  7. use App\Repository\Formation\ApaymentRepository;
  8. use App\Repository\Formation\ClasseRepository;
  9. use App\Repository\Formation\TrashapaymentRepository;
  10. use App\Repository\Training\FpaymentRepository;
  11. use App\Repository\Training\GroupeRepository;
  12. use App\Repository\Training\TrashfpaymentRepository;
  13. use App\Repository\Tutoring\CourseRepository;
  14. use App\Repository\Tutoring\SpaymentRepository;
  15. use App\Repository\Tutoring\TrashspaymentRepository;
  16. use App\Repository\UserRepository;
  17. use App\Service\PrintLogService;
  18. use App\Service\SchoolyearService;
  19. use App\Service\Securizer;
  20. use Ensepar\Html2pdfBundle\Factory\Html2pdfFactory;
  21. use Exception;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\RedirectResponse;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use DateTime;
  30. #[Route('admin/user')]
  31. class UserController extends AbstractController
  32. {
  33.     public function __construct(private readonly UserRepository $userRepository)
  34.     {
  35.     }
  36.     #[Route('/{role}/{stat}'name'hs_training_center_user_index'requirements: ['role' => 'trainees|formers|administrators|all'], options: ['expose' => true], defaults: ['role' => 'all''stat' => true], methods: ['GET'])]
  37.     public function index($role$statUserRepository $userRepositorySecurizer $securizerSchoolyearService $schoolyear): Response
  38.     {
  39.         //$users=$userRepository->findAll();
  40.         $items=[];
  41.         switch ($role) {
  42.             case 'trainees':
  43. //                foreach ($users as $user) {
  44. //                    if ($user->hasRole('ROLE_TRAINEE')) $items[] = $user;
  45. //                }
  46.                 $items=$this->userRepository->findHaveRoles(['ROLE_TRAINEE']);
  47.                 break;
  48.             case 'formers':
  49. //                foreach ($users as $user) {
  50. //                    if ($user->hasRole('ROLE_TEACHER_TRAINING')) $items[] = $user;
  51. //                }
  52.                 $items=$this->userRepository->findHaveRoles(['ROLE_TEACHER_TRAINING']);
  53.                 break;
  54.             case 'administrators':
  55.                 $users=$userRepository->findAll();
  56.                 foreach ($users as $user) {
  57.                     if($this->getUser()->hasParentRole($user)){
  58.                         if($stat!=null) {
  59.                             if ($securizer->isGranted($user'ROLE_ADMIN') && $user->isPublished()==$stat$items[] = $user;
  60.                         }
  61.                         else {
  62.                             if ($securizer->isGranted($user'ROLE_ADMIN')) $items[] = $user;
  63.                         }
  64.                     }
  65.                 }
  66.                 break;
  67.             default:
  68.                 $users=$userRepository->findAll();
  69.                 foreach ($users as $user) {
  70.                         if (!$securizer->isGranted($user'ROLE_ADMIN')) $items[] = $user;
  71.                 }
  72.                 break;
  73.         }
  74.         return $this->render('Admin/user/index.html.twig', [
  75.             'users' => $items,
  76.             'role' => $role,
  77.             'genre'=> $role,
  78.             'stat' => $stat,
  79.             'sy' => $schoolyear->getSelected(),
  80.         ]);
  81.     }
  82.     #[Route('/new/{role}'name'hs_training_center_user_new'options: ['expose' => true], defaults: ['role' => 'all'], methods: ['GET''POST'])]
  83.     public function new($roleRequest $requestUserRepository $userRepositoryUserPasswordHasherInterface $passwordEncoder): Response
  84.     {
  85.         $user = new User();
  86.         $form $this->createForm(UserType::class, $user, ['operation'=>'new']);
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             try {
  90.                 if ($userRepository->findOneBy(['email' => $user->getEmail()])) {
  91.                     $this->addFlash('danger''Le matricule ou l\'adresse email qui vous avez renseigné existe déjà.');
  92.                 }
  93.                 else{
  94.                     $user->setPassword(
  95.                         $passwordEncoder->hashPassword(
  96.                             $user,
  97.                             $form->get('plainPassword')->getData()
  98.                         )
  99.                     );
  100.                     $roles=$form->get('roles')->getData();
  101.                     if(is_array($roles)) $user->setRoles($roles);
  102.                     else $user->addRole($roles);
  103.                     $userRepository->save($usertrue);
  104.                     $gotonext='edit';
  105.                     if($form->get('SaveList')->isClicked()) $gotonext='index';
  106.                     if($form->get('SaveNew')->isClicked()) $gotonext='new';
  107.                     return $this->gotonext($gotonext$role,'success','Opération exécutée  avec success.',$user);
  108.                 }
  109.             } catch (Exception $e) {
  110.                 $this->addFlash('danger'$e->getMessage());
  111.             }
  112.         }
  113.         return $this->renderForm('Admin/user/form.html.twig', [
  114.             'item' => $user,
  115.             'form' => $form,
  116.             'role' => $role,
  117.             'type'=>'new'
  118.         ]);
  119.     }
  120.     #[Route('/show/{id}'name'hs_training_center_user_show'options: ['expose' => true], methods: ['GET'])]
  121.     public function show(User $userSchoolyearService $schoolyearService): Response
  122.     {
  123.         return $this->render('Admin/user/show.html.twig', [
  124.             'item' => $user,
  125.             'role' => $user->getTypeUser(),
  126.             'schoolyear' => $schoolyearService->getSelected(),
  127.         ]);
  128.     }
  129.     #[Route('/{id}/edit/{role}'name'hs_training_center_user_edit'options: ['expose' => true], defaults: ['role' => 'all'], methods: ['GET''POST'])]
  130.     public function edit($roleRequest $requestUser $userUserRepository $userRepository): Response
  131.     {
  132.         $form $this->createForm(UserType::class, $user, ['operation'=>'edit']);
  133.         $form->handleRequest($request);
  134.         if($role=='all' || $role==''$role=$user->getTypeUser();
  135.         if ($form->isSubmitted() && $form->isValid()) {
  136.             $roles=$form->get('roles')->getData();
  137.             if(is_array($roles)) $user->setRoles($roles);
  138.             else $user->addRole($roles);
  139.             $userRepository->save($usertrue);
  140.             $gotonext='edit';
  141.             if($form->get('SaveList')->isClicked()) $gotonext='index';
  142.             if($form->get('SaveNew')->isClicked()) $gotonext='new';
  143.             return $this->gotonext($gotonext$role,'success','Opération exécutée  avec success.',$user);
  144.         }
  145.         return $this->renderForm('Admin/user/form.html.twig', [
  146.             'item' => $user,
  147.             'form' => $form,
  148.             'role' => $role,
  149.             'type'=>'edit'
  150.         ]);
  151.     }
  152.     #[Route('/remove/{id}'name'hs_training_center_user_remove'options: ['expose' => true])]
  153.     public function delete(Request $requestUser $userUserRepository $userRepository): Response
  154.     {
  155.         $role=$user->getTypeUser();
  156.         //if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
  157.             $userRepository->remove($usertrue);
  158.        // }
  159.         return $this->redirectToRoute('hs_training_center_user_index', ['role' => $role], Response::HTTP_SEE_OTHER);
  160.     }
  161. //    #[Route('/payment_state/{user}/{start}/{end}', name: 'hs_training_center_user_payment_state', options: ['expose' => true], defaults: ['user' => 'me'], methods: ['POST'])]
  162.     #[Route(path'/statut/{id}'name'hs_training_center_user_statut'options: ['expose' => true])]
  163.     public function statutAction($id)
  164.     {
  165.         $user=$this->userRepository->find($id);
  166.         if (empty($user)) {
  167.             $this->addFlash('warning','User introuvable !!!! ');
  168.             return $this->redirectToRoute('hs_training_center_user_index');
  169.         }
  170.         if($user->isPublished()) {
  171.             $user->setPublished(false);
  172.         } else {
  173.             $user->setPublished(true);
  174.         }
  175.         $button=$user->getButtonEnable();
  176.         $this->userRepository->save($usertrue);
  177.         return new Response($button);
  178.     }
  179.     #[Route(path'/payment_state/{user}/{service}/{start}/{end}'name'hs_training_center_user_payment_state'options: ['expose' => true], defaults: ['user' => 'me''service' => "all"])]
  180.     public function paymentStateAction($user$service$start$end,
  181.                                        UserRepository $userRepository,
  182.                                        FpaymentRepository $repF,
  183.                                        SpaymentRepository $repS,
  184.                                        ApaymentRepository $repA,
  185.                                        TrashfpaymentRepository $repTF,
  186.                                        TrashspaymentRepository $repTS,
  187.                                        TrashapaymentRepository $repTA,
  188.                                        Html2pdfFactory $html2pdfFactory){
  189.         $datestart=DateTime::createFromFormat('d-m-Y H:i'$start." 00:00");
  190.         $dateend=DateTime::createFromFormat('d-m-Y H:i'$end." 23:59");
  191.         if($user=="me"){
  192.             $user=$this->getUser();
  193.             if($this->isGranted('ROLE_RESPONSABLE')) $user=null;
  194.         }
  195.         else{
  196.             $user=$userRepository->find($user);
  197.             if(!($user instanceof User)){$user=$this->getUser();}
  198.         }
  199.         $itemsA=$repA->findByInitier($user$datestart$dateend);
  200.         $itemsS=$repS->findByInitier($user$datestart$dateend);
  201.         $itemsF=$repF->findByInitier($user$datestart$dateend);
  202.         $itemsTA=$repTA->findByInitier($user$datestart$dateend);
  203.         $itemsTS=$repTS->findByInitier($user$datestart$dateend);
  204.         $itemsTF=$repTF->findByInitier($user$datestart$dateend);
  205.         $html $this->renderView('Admin/user/payment_state.html.twig', ['user'=>$user,'itemsTA'=>$itemsTA,'itemsTS'=>$itemsTS,'itemsTF'=>$itemsTF,'itemsA'=>$itemsA,'itemsS'=>$itemsS,'itemsF'=>$itemsF,'end'=>$dateend,'start'=>$datestart'service'=>$service]);
  206.         $html2pdf $html2pdfFactory->create();
  207.         $html2pdf->pdf->SetDisplayMode('real');
  208.         $html2pdf->pdf->SetTitle('payment_state_'.$start.'_'.$end);
  209.         $html2pdf->writeHTML($html);
  210.         return new Response($html2pdf->Output('payment_state_'.$start.'_'.$end.'.pdf'), 200, ['Content-Type' => 'application/pdf']);
  211.     }
  212.     #[Route('/change-password/{id}'name'hs_training_center_user_change_password'options: ['expose' => true])]
  213.     public function changePassword(User $userRequest $requestUserRepository $userRepositoryUserPasswordHasherInterface $passwordEncoder): Response
  214.     {
  215.         $cuurentUser $this->getUser();
  216.         $url $request->headers->get('referer');
  217.         if (!$user || !$cuurentUser || $cuurentUser->getId() === $user->getId()) {
  218.             $this->addFlash('warning''Vous ne pouvez pas changer votre mot de passe ici !');
  219.             return new RedirectResponse($url);
  220.         }
  221.         $role=$user->getTypeUser();
  222.         if ($request->isMethod('POST')) {
  223.             //$currentPassword = $request->request->get('current_password');
  224.             $newPassword $request->request->get('new_password');
  225.                 $encodedPassword $passwordEncoder->hashPassword($user$newPassword);
  226.                 $user->setPassword($encodedPassword);
  227.                 $userRepository->save($usertrue);
  228.                 // Redirection vers une page ou un message de succès
  229.                 $this->addFlash('success''Votre mot de passe a bien été mis à jour.');
  230.                 return $this->redirectToRoute('hs_training_center_user_index', ['role'=>$role]);
  231.         }
  232.         return $this->render('Admin/user/change_password.html.twig', ['user' => $user]);
  233.     }
  234.     #[Route('/my-profile'name'hs_training_center_user_profile'options: ['expose' => true], methods: ['GET'])]
  235.     public function profile(SchoolyearService $schoolyearService): Response
  236.     {
  237.         $user $this->getUser();
  238.         $form $this->createForm(ProfileType::class, $user);
  239.         return $this->render('Admin/user/profile.html.twig', [
  240.             'item' => $user,
  241.             'role' => $user->getTypeUser(),
  242.             'schoolyear' => $schoolyearService->getSelected(),
  243.             'form' => $form->createView(),
  244.         ]);
  245.     }
  246.     #[Route('/list-users/responsables/{id}'name'hs_training_center_user_list_responsables'options: ['expose' => true], methods: ['GET'])]
  247.     public function getListResponsables(User $origineUserRepository $userRepositorySecurizer $securizer)
  248.     {
  249.         $users=$userRepository->findAll();
  250.         $respTraining=[];
  251.         $respTutoring=[];
  252.         $respFormation=[];
  253.         foreach ($users as $user) {
  254.             if ($securizer->isGranted($user'ROLE_SECRETARY_TRAINING') && !$securizer->isGranted($user'ROLE_SUPER_ADMIN') && $user->isPublished() && $user!==$origine$respTraining[] = $user;
  255.             if ($securizer->isGranted($user'ROLE_SECRETARY_TUTORING') && !$securizer->isGranted($user'ROLE_SUPER_ADMIN') && $user->isPublished() && $user!==$origine$respTutoring[] = $user;
  256.             if ($securizer->isGranted($user'ROLE_SECRETARY_ACTIVITY') && !$securizer->isGranted($user'ROLE_SUPER_ADMIN') && $user->isPublished() && $user!==$origine$respFormation[] = $user;
  257.         }
  258.         return $this->render('Admin/user/list_responsables.html.twig', [
  259.             'respTraining' => $respTraining,
  260.             'respTutoring' => $respTutoring,
  261.             'respFormation' => $respFormation,
  262.             'origine' => $origine
  263.         ]);
  264.     }
  265.     #[Route('/reassignment_responsable/{id}'name'hs_training_center_user_reassignment_responsable'options: ['expose' => true], methods: ['POST'])]
  266.     public function reassignmentResponsable(User $origineUserRepository $userRepositoryGroupeRepository $groupeRepositoryCourseRepository $courseRepositoryClasseRepository $classeRepositoryRequest $request)
  267.     {
  268.         $respTutoringId $request->request->get('resp_tutoring_id');
  269.         $respTrainingId $request->request->get('resp_training_id');
  270.         $respActivityId $request->request->get('resp_activity_id');
  271.         try {
  272.             if(!$origine->getGroupes()->isEmpty()){
  273.                 $respTraining=$userRepository->find($respTrainingId);
  274.                 if(!$respTraining instanceof User) return new JsonResponse(['status' => 0'message' => "Responsable introuvable !!!"]);
  275.                 foreach ($origine->getGroupes() as $groupe) {
  276.                     $groupe->setResponsable($respTraining);
  277.                     $groupeRepository->save($groupetrue);
  278.                 }
  279.             }
  280.             if(!$origine->getCourses()->isEmpty()){
  281.                 $respTutoring=$userRepository->find($respTutoringId);
  282.                 if(!$respTutoring instanceof User) return new JsonResponse(['status' => 0'message' => "Responsable introuvable !!!"]);
  283.                 foreach ($origine->getCourses() as $course){
  284.                     $course->setResponsable($respTutoring);
  285.                     $courseRepository->save($coursetrue);
  286.                 }
  287.             }
  288.             if(!$origine->getClasses()->isEmpty()){
  289.                 $respActivity=$userRepository->find($respActivityId);
  290.                 if(!$respActivity instanceof User) return new JsonResponse(['status' => 0'message' => "Responsable introuvable !!!"]);
  291.                 foreach ($origine->getClasses() as $classe){
  292.                     $classe->setResponsable($respActivity);
  293.                     $classeRepository->save($classetrue);
  294.                 }
  295.             }
  296.         }catch (Exception $e) {
  297.             return new JsonResponse(['status' => 0'message' => "Impossible de changer le responsable !!!"]);
  298.         }
  299.         $origine->setPublished(false);
  300.         $userRepository->save($originetrue);
  301.         return new JsonResponse(['status' => 1'message' => $origine->getButtonEnable()]);
  302.     }
  303.     #[Route('/update-profile'name'hs_training_center_user_update_profile'options: ['expose' => true], methods: ['POST'])]
  304.     public function updateProfile(Request $requestUserRepository $userRepository): Response
  305.     {
  306.         $user $this->getUser();
  307.         $profile $request->request->get('profile');
  308.         $firstName $profile['firstName'] ?? null;
  309.         $lastName $profile['lastName'] ?? null;
  310.         $phone $profile['phone'] ?? null;
  311.         $skin $profile['skin'] ?? null;
  312.         if (!$user) {
  313.             return new JsonResponse(['status' => 0'message' => 'Utilisateur invalide.']);
  314.         }
  315.         if ($skin$user->setSkin($skin);
  316.         if ($firstName !== null$user->setFirstName($firstName);
  317.         if ($lastName !== null$user->setLastName($lastName);
  318.         if ($phone !== null$user->setPhone($phone);
  319.         $userRepository->save($usertrue);
  320.         return new JsonResponse(['status' => 1'message' => 'Profil mis à jour avec succès.']);
  321.     }
  322.     #[Route('/update-skin'name'hs_training_center_user_update_skin'options: ['expose' => true], methods: ['POST'])]
  323.     public function updateSkin(Request $requestUserRepository $userRepository): JsonResponse
  324.     {
  325.         $skin $request->request->get('skin');
  326.         if (!$skin) {
  327.             return new JsonResponse(['status' => 0'message' => 'Aucun skin fourni.'], 400);
  328.         }
  329.         $user $this->getUser();
  330.         $user->setSkin($skin);
  331.         $userRepository->save($usertrue);
  332.         return new JsonResponse(['status' => 1'message' => 'Skin mis à jour avec succès.']);
  333.     }
  334.     public function gotonext($action$role$label$messageUser $user){
  335.         $this->addFlash($label,$message);
  336.         $route='hs_training_center_user_'.$action;
  337.         if($action=='edit')
  338.             return $this->redirectToRoute($route, ['id'=>$user->getId(), 'role'=>$role]);
  339.         else
  340.             return $this->redirectToRoute($route, ['role'=>$role]);
  341.     }
  342. }