src/Controller/Configuration/UserController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Configuration;
  3. use App\Entity\Organization\Entity;
  4. use App\Entity\Processus;
  5. use App\Entity\User;
  6. use App\Enum\ModuleEnum;
  7. use App\Enum\RoleEnum;
  8. use App\Form\UserType;
  9. use App\Repository\UserRepository;
  10. use Doctrine\ORM\EntityManager;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use App\Repository\ProcessusRepository;
  20. use App\Entity\Configuration\CompanyEntity;
  21. /**
  22.  * @Route("/configuration/user")
  23.  */
  24. class UserController extends AbstractController
  25. {
  26.     private UserRepository $userRepository;
  27.     private EntityManagerInterface $entityManager;
  28.     public function __construct(UserRepository $userRepositoryEntityManagerInterface $entityManager)
  29.     {
  30.         $this->userRepository $userRepository;
  31.         $this->entityManager $entityManager;
  32.     }
  33.     /**
  34.      * @Route("/", name="app_configuration_user")
  35.      */
  36.     public function index(ProcessusRepository $processusRepository): Response
  37.     {
  38.         $processus_list $processusRepository->findAll();
  39.         $left_menu="user";
  40.         return $this->render('configuration/user/index.html.twig', [
  41.             'left_menu'=>$left_menu,
  42.             'processus_list'=>$processus_list,
  43.             'modules_list'=>ModuleEnum::getAvailableModules(),
  44.             'modules_labels'=>ModuleEnum::getModuleLabels()
  45.         ]);
  46.     }
  47.     /**
  48.      * @Route("/list", name="app_configuration_user_list")
  49.      */
  50.     public function list(Request $request): JsonResponse
  51.     {
  52.         $data = ['data'=>[]];
  53.         $users $this->userRepository->findBy([],['id'=>'desc']);
  54.         foreach($users as $user)
  55.         {
  56.             try {
  57.                 $urlDelete"/configuration/user/delete/".$user->getId();
  58.                 $delete_btn"<a class='ut-action-btn ut-action-delete' onclick='open_delete_dialog_without_from(\"".$urlDelete."\",\"".$user->getFullName()."\" )' title='Supprimer'><i class='fa fa-trash-o'></i></a>";
  59.                 $entities '';
  60.                 foreach ($user->getEntities() as $entity) {
  61.                     $entities .= '<span class="ut-badge ut-badge-entity">' htmlspecialchars($entity->getNom()) . '</span> ';
  62.                 }
  63.                 // Avatar + nom
  64.                 $photo $user->getPhoto();
  65.                 $avatarUrl $photo '/uploads/user/photos/' $photo '/img/avatars/male.png';
  66.                 $userCell '<div class="ut-user-cell">'
  67.                     '<img src="' $avatarUrl '" class="ut-user-avatar" alt="" />'
  68.                     '<div class="ut-user-info">'
  69.                     '<div class="ut-user-name">' htmlspecialchars($user->getFullName()) . '</div>'
  70.                     '<div class="ut-user-email">' htmlspecialchars($user->getEmail() ?: '') . '</div>'
  71.                     '</div></div>';
  72.                 // Status badge
  73.                 $statusHtml '<span class="ut-badge ut-badge-active"><i class="fa fa-check-circle"></i> Active</span>';
  74.                 $data['data'][] = [
  75.                     'update_link' => '<a href="/configuration/user/modal?id=' $user->getId() . '" data-toggle="modal" data-target="#myModal" class="ut-action-btn ut-action-edit" title="Modifier"><i class="fa fa-pencil"></i></a>',
  76.                     'delete_link' => $delete_btn,
  77.                     'entities' => $entities,
  78.                     'role' => $user->getRolesLabelHtml(),
  79.                     'gender' => $user->getGender(),
  80.                     'modules' => $user->getModulesHtml(),
  81.                     'processuses' => $user->getProcessusesHtml(),
  82.                     'user_fullname' => $userCell,
  83.                     'last_connexion' => '01/07/2022 09:00',
  84.                     'status' => $statusHtml,
  85.                     'fonction' => $user->getFonction(),
  86.                     'email' => $user->getEmail() ?: '',
  87.                     'mobile' => $user->getMobile() ?: '',
  88.                     'tel' => $user->getTel() ?: ''
  89.                 ];
  90.             } catch (\Doctrine\ORM\EntityNotFoundException $e) {
  91.                 $urlDelete"/configuration/user/delete/".$user->getId();
  92.                 $delete_btn"<a class='ut-action-btn ut-action-delete' onclick='open_delete_dialog_without_from(\"".$urlDelete."\",\"".$user->getFullName()."\" )' title='Supprimer'><i class='fa fa-trash-o'></i></a>";
  93.                 $userCell '<div class="ut-user-cell">'
  94.                     '<img src="/img/avatars/male.png" class="ut-user-avatar" alt="" />'
  95.                     '<div class="ut-user-info">'
  96.                     '<div class="ut-user-name">' htmlspecialchars($user->getFullName()) . '</div>'
  97.                     '<div class="ut-user-email">' htmlspecialchars($user->getEmail() ?: '') . '</div>'
  98.                     '</div></div>';
  99.                 $statusHtml '<span class="ut-badge ut-badge-active"><i class="fa fa-check-circle"></i> Active</span>';
  100.                 $data['data'][]=[
  101.                     'update_link'=>'<a href="/configuration/user/modal?id='.$user->getId().'" data-toggle="modal" data-target="#myModal" class="ut-action-btn ut-action-edit" title="Modifier"><i class="fa fa-pencil"></i></a>',
  102.                     'delete_link'=>$delete_btn,
  103.                     'entities'=>'<span class="ut-badge ut-badge-entity">Non assigné</span>',
  104.                     'role'=>$user->getRolesLabelHtml(),
  105.                     'gender'=>$user->getGender(),
  106.                     'modules'=>$user->getModulesHtml(),
  107.                     'processuses'=>$user->getProcessusesHtml(),
  108.                     'user_fullname'=>$userCell,
  109.                     'last_connexion'=>'01/07/2022 09:00',
  110.                     'status'=>$statusHtml,
  111.                     'fonction'=>$user->getFonction(),
  112.                     'email'=>$user->getEmail()?$user->getEmail():'',
  113.                     'mobile'=>$user->getMobile()? $user->getMobile() : '',
  114.                     'tel'=>$user->getTel() ? $user->getTel() : ''
  115.                 ];
  116.             }
  117.         }
  118.         return new JsonResponse($data,200);
  119.     }
  120.     /**
  121.      * @Route("/modal", name="app_configuration_user_modal")
  122.      */
  123.     public function modal(Request $request):Response
  124.     {
  125.         $entites $this->entityManager->getRepository(CompanyEntity::class)->findAll();
  126.         $processuses $this->entityManager->getRepository(Processus::class)->findAll();
  127.         $modules=ModuleEnum::getAvailableModules();
  128.         $id$request->query->get('id','');
  129.         $user $id$this->userRepository->find($id): new User();
  130.         $form $this->createForm(UserType::class, $user);
  131.         return $this->render('configuration/user/modal.html.twig',[
  132.             'form'=>$form->createView(),
  133.             'id'=>$id,
  134.             'user'=>$user,
  135.             'entites'=>$entites,
  136.             'processuses'=>$processuses,
  137.             'modules'=>$modules
  138.         ]);
  139.     }
  140.     /**
  141.      * @Route("/save", name="app_configuration_user_save", methods={"POST"})
  142.      */
  143.     public function save(Request $requestUserPasswordHasherInterface $passwordHasher): JsonResponse
  144.     {
  145.         $id$request->request->get('id','');
  146.         $lastname$request->request->get('lastname','');
  147.         $firstname$request->request->get('firstname','');
  148.         $fonction$request->request->get('fonction','');
  149.         $gender$request->request->get('gender','');
  150.         $photo $request->files->get('photo');
  151.         $email$request->request->get('email','');
  152.         $mobile$request->request->get('mobile','');
  153.         $tel$request->request->get('tel','');
  154.         $password$request->request->get('password','');
  155.         $roles$request->request->get('roles')?? [];
  156.         $roles_array explode(',',$roles);
  157.         $processuses$request->request->get('processus')?? [];
  158.         $processuses_array explode(',',$processuses);
  159.         $modules$request->request->get('modules')?? [];
  160.         $modules_array explode(',',$modules);
  161.         $entities$request->request->get('entities')?? [];
  162.         $entities_array explode(',',$entities);
  163.         
  164.         // Si aucun module n'est sélectionné, on ajoute les modules par défaut
  165.         if (empty($modules_array) || (count($modules_array) === && empty($modules_array[0]))) {
  166.             $modules_array ModuleEnum::getAvailableModules();
  167.         }
  168.         
  169.         $user = new User();
  170.         if($id) {
  171.             $user $this->userRepository->find($id);
  172.         }
  173.         $user->setLastname($lastname);
  174.         $user->setFirstname($firstname);
  175.         $user->setFonction($fonction);
  176.         $user->setGender($gender);
  177.         $user->setEmail($email);
  178.         $user->setMobile($mobile);
  179.         $user->setTel($tel);
  180.         $user->setRoles($roles_array);
  181.         $user->setModules($modules_array);
  182.         
  183.         // Récupérer et définir l'entité
  184. //        $entity_id = $request->request->get('entiteAttache', null);
  185.         // Si entity_id est null ou vide, on retire l'entité
  186. //        if (empty($entity_id)) {
  187. //            $user->setEntiteAttache(null);
  188. //        } else {
  189. //            $entity = $this->entityManager->getRepository(CompanyEntity::class)->find($entity_id);
  190. //            if ($entity) {
  191. //                $user->setEntiteAttache($entity);
  192. //            } else {
  193. //                $user->setEntiteAttache(null);
  194. //            }
  195. //        }
  196.         
  197.         // Gérer les processus
  198.         if(count($processuses_array) > 0) {
  199.             // Supprimer d'abord tous les processus existants
  200.             foreach($user->getProcessuses() as $processus) {
  201.                 $user->removeProcessus($processus);
  202.             }
  203.             // Ajouter les nouveaux processus
  204.             foreach($processuses_array as $processus_id) {
  205.                 if (!empty($processus_id)) {
  206.                     $processus $this->entityManager->getRepository(Processus::class)->find($processus_id);
  207.                     if ($processus) {
  208.                         $user->addProcessus($processus);
  209.                     }
  210.                 }
  211.             }
  212.         }
  213.         // Gérer les entités
  214.         if(count($entities_array) > 0) {
  215.             // Supprimer d'abord toutes les entités existantes
  216.             foreach($user->getEntities() as $entity) {
  217.                 $user->removeEntity($entity);
  218.             }
  219.             // Ajouter les nouvelles entités
  220.             foreach($entities_array as $entity_id) {
  221.                 if (!empty($entity_id)) {
  222.                     $entity $this->entityManager->getRepository(CompanyEntity::class)->find($entity_id);
  223.                     if ($entity) {
  224.                         $user->addEntity($entity);
  225.                     }
  226.                 }
  227.             }
  228.         }
  229.         // Ne mettre à jour le mot de passe que s'il est fourni
  230.         if (!empty($password)) {
  231.             $hashedPassword $passwordHasher->hashPassword(
  232.                 $user,
  233.                 $password
  234.             );
  235.             $user->setPassword($hashedPassword);
  236.         }
  237.         if ($photo) {
  238.             $generatedfileName md5(uniqid()).'.'.$photo->guessExtension();
  239.             $uploadDir $this->getParameter('kernel.project_dir').'/public/uploads/user/photos';
  240.             if (!file_exists($uploadDir) && !is_dir($uploadDir)) {
  241.                 mkdir($uploadDir0777true);
  242.             }
  243.             try {
  244.                 $photo->move(
  245.                     $uploadDir,
  246.                     $generatedfileName
  247.                 );
  248.                 $user->setPhoto($generatedfileName);
  249.             } catch (FileException $e) {
  250.             }
  251.         }
  252.         $this->entityManager->persist($user);
  253.         $this->entityManager->flush();
  254.         
  255.         $response = array('id' => $user->getId());
  256.         return new JsonResponse($response,200);
  257.     }
  258.     /**
  259.      * @Route("/delete/{id}", name="app_configuration_user_delete", methods={"GET"})
  260.      */
  261.     public function delete(User $userRequest $request): Response
  262.     {
  263.         $this->entityManager->remove($user);
  264.         $this->entityManager->flush();
  265.         $referer $request->headers->get('referer');
  266.         return $this->redirect($referer);
  267.         //return $this->redirectToRoute('surveillanceGlobal');
  268.     }
  269. }