src/Controller/DocServiceController.php line 96

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use App\Entity\Media;
  9. use App\Entity\Document;
  10. use App\Entity\DocumentService;
  11. use App\Entity\RefRole;
  12. use App\Entity\RFederation;
  13. use App\Entity\RefAffectation;
  14. use App\Entity\RefFederation;
  15. use App\Entity\UtilisateurInformation;
  16. use Doctrine\Persistence\ManagerRegistry;
  17. class DocServiceController extends AbstractController
  18. {
  19.     private $doctrine;
  20.     public function __construct(ManagerRegistry $doctrine)
  21.     {
  22.         $this->doctrine $doctrine;
  23.     }
  24.     #[Route(path'/api/New_doc_serv'name'ctsweb_doc_serv')]
  25.     public function New(Request $request)
  26.     {
  27.         $type null;
  28.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  29.         $em $this->doctrine->getManager();
  30.         $request->request->replace(is_array($data) ? $data : []);
  31.         try {
  32.             $doc = new DocumentService();
  33.             $em $this->doctrine->getManager();
  34.             $idRole $this->getUser()->getUtilisateur()->getIdRole();
  35.             $params $request->request->all();
  36.             $user $this->getUser();
  37.             $R_User $user->getUtilisateur()->getIdRole();
  38.             //Admin, DS
  39.             if ($R_User == RefRole::ROLE_DS_ADMIN || $R_User == RefRole::ROLE_DS_SIGNATAIRE || $R_User == RefRole::ROLE_DS_INVITE) {
  40.                 $type 'DS';
  41.                 $id_aff $params['idAffectation'];
  42.                 $id_f $params['idFederation'];
  43.                 $region $em->getRepository(RefAffectation::class)->findOneBy(['idAffectation' => $id_aff]);
  44.                 $Federation $em->getRepository(RefFederation::class)->findOneBy(['idFederation' => $id_f]);
  45.                 $doc->setIdAffectation($region);
  46.                 $doc->setIdFederation($Federation);
  47.             } //DR
  48.             elseif ($R_User == RefRole::ROLE_DR || $R_User == RefRole::ROLE_DR_SIGNATAIRE) {
  49.                 $type 'DR';
  50.                 $doc->setIdAffectation($user->getIdAffectation());
  51.             } //fédérateur(DTN)
  52.             elseif ($R_User == RefRole::ROLE_FEDE || $R_User == RefRole::ROLE_FEDE_INVITE) {
  53.                 $type 'FD';
  54.                 $doc->setIdFederation($user->getIdFederation());
  55.             } //CTS
  56.             elseif ($R_User == RefRole::ROLE_CTS) {
  57.                 return new RedirectResponse($this->generateUrl('ctsweb_doc_serv'));
  58.             }
  59.             $doc->setText($params['texte']);
  60.             $doc->setTypeText($type);
  61.             $em->persist($doc);
  62.             if (isset($params['formDataFiles']) && $params['formDataFiles'] != '') {
  63.                 $this->saveMedias($doc$params['formDataFiles']);
  64.             }
  65.             $em->flush();
  66.             $messageRetour "DocumentService créé";
  67.             $data = ['success' => true'data' => $messageRetour];
  68.         } catch (\Exception $e) {
  69.             $data = ['success' => false'data' => $e->getMessage()];
  70.         }
  71.         return new JsonResponse($data);
  72.     }
  73.     #[Route(path'/api/Edit_doc_serv/{id}'name'ctsweb_doc_serv_edit')]
  74.     public function Edit(): \Symfony\Component\HttpFoundation\Response
  75.     {
  76.         return $this->render(
  77.             'DocServiceController/edit.html.twig',
  78.             []
  79.         );
  80.     }
  81.     #[Route(path'/api/getCorrespondants'name'ctsweb_doc_serv_load')]
  82.     public function getCorrespondants()
  83.     {
  84.         $em $this->doctrine->getManager();
  85.         $user $this->getUser();
  86.         $Correspondants = [];
  87.         $R_User $user->getUtilisateur()->getIdRole();
  88.         try {
  89.             $repository $em->getRepository(Document::class);
  90.             $repo $repository->getCorrespondants($user->getUtilisateur(), $user);
  91.             foreach ($repo as $Correspondant) {
  92.                 $utilisateurInformation $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $Correspondant['id_utilisateur']]);
  93.                 $idPoste $utilisateurInformation->getIdPoste();
  94.                 $poste = !is_null($idPoste) ? ['id' => $idPoste->getIdPoste(), 'libelle' => $idPoste->getLibellePoste()] : null;
  95.                 if ($utilisateurInformation->getIdFederation()) {
  96.                     $r_f $em->getRepository(RFederation::class)->findOneBy(['rAdmDiside' => $utilisateurInformation->getIdFederation()->getRAdmDiside()]);
  97.                 }
  98.                 if ($R_User == RefRole::ROLE_DS_ADMIN || $R_User == RefRole::ROLE_DS_SIGNATAIRE || $R_User == RefRole::ROLE_DS_INVITE) {
  99.                     // Les profils administrateur et DS doivent voir tous les documents mis en ligne par toutes les DR et par toutes les fédérations(vue de tous les documents du site)
  100.                     $tab_profil = [RefRole::ROLE_DS_ADMINRefRole::ROLE_CTSRefRole::ROLE_DS_INVITERefRole::ROLE_DRRefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITERefRole::ROLE_DS_SIGNATAIRERefRole::ROLE_DR_SIGNATAIRERefRole::ROLE_LECTEUR];
  101.                 } elseif ($R_User == RefRole::ROLE_DR || $R_User == RefRole::ROLE_DR_SIGNATAIRE || $R_User == RefRole::ROLE_FEDE || $R_User == RefRole::ROLE_FEDE_INVITE) {
  102.                     // les Profils DR doivent voir tous les documents mis en ligne par la DS et par toutes les fédérations quelles que soit les sélections d'affichage faites par ceux-ci. 
  103.                     // les profils DR et DR signataire doivent voir les correspondant de leur service
  104.                     // les profils fédération doivent voir tous les documents mis en ligne par les toutes les DR et les DS mais pas ceux des autres fédérations.
  105.                     $tab_profil = [RefRole::ROLE_DS_INVITERefRole::ROLE_DS_SIGNATAIRERefRole::ROLE_DRRefRole::ROLE_DR_SIGNATAIRERefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITE];
  106.                 } elseif ($R_User == RefRole::ROLE_CTS) {
  107.                     //les CTS voient les documents qui leur sont autorisés par la DS (selon sélection) et les documents de leur fédération et de leur DR
  108.                     $tab_profil = [RefRole::ROLE_DS_INVITERefRole::ROLE_FEDE_INVITERefRole::ROLE_FEDERefRole::ROLE_DRRefRole::ROLE_DR_SIGNATAIRE,RefRole::ROLE_DS_ADMIN,RefRole::ROLE_DS_SIGNATAIRE];
  109.                 }
  110.                 if (in_array($utilisateurInformation->getUtilisateur()->getRole()->getIdRole(), $tab_profil)) {
  111.                     $Correspondants[] = ['idUtilisateur' => $utilisateurInformation->getIdUtilisateur(), 'civilite' => $utilisateurInformation->getCivilite(), 'nom' => $utilisateurInformation->getNom(), 'prenom' => $utilisateurInformation->getPrenom(), 'birthday' => $utilisateurInformation->getDateDeNaissance()->format('d/m/Y'), 'adresse' => $utilisateurInformation->getAdresse(), 'couriel' => $utilisateurInformation->getUtilisateur()->getCourriel(), 'portable' => $utilisateurInformation->getUtilisateur()->getTelephonePortable(), 'telephone' => $utilisateurInformation->getUtilisateur()->getTelephoneBureau(), 'fonction' => $utilisateurInformation->getFonction(), 'poste' => $poste'profil' => ['id' => $utilisateurInformation->getUtilisateur()->getRole()->getIdRole(), 'libelle' => $utilisateurInformation->getUtilisateur()->getRole()->getLibelleRole()], 'affectation' => $utilisateurInformation->getIdAffectation() ? ['id' => $utilisateurInformation->getIdAffectation()->getIdAffectation(), 'libelle' => $utilisateurInformation->getIdAffectation()->getLibelleAffectation()] : '''supHierarchique' => $utilisateurInformation->getUtilisateur()->getflSuperieurHierarchique(), 'federation' => $utilisateurInformation->getIdFederation() ? ['id' => $utilisateurInformation->getIdFederation()->getIdFederation(), 'libelle' => $r_f->getRSerLibl()] : ''];
  112.                 }
  113.             }
  114.             $data = ['success' => true'data' => $Correspondants];
  115.         } catch (\Exception $e) {
  116.             $data = ['success' => false'data' => $e->getMessage()];
  117.         }
  118.         return new JsonResponse($data);
  119.     }
  120.     /**
  121.      * Deletes a Docservice entity.
  122.      */
  123.     #[Route(path'/api/delete_doc_serv/{id}'name'ctsweb_doc_serv_delete')]
  124.     public function delete($id)
  125.     {
  126.         $role $this->getUser()->getUtilisateur()->getIdRole();
  127.         if (RefRole::ROLE_CTS == $role) {
  128.             return new JsonResponse(nullJsonResponse::HTTP_BAD_REQUEST);
  129.         }
  130.         $em $this->doctrine->getManager();
  131.         $doc $em->getRepository(DocumentService::class)->findOneBy(['id' => $id]);
  132.         try {
  133.             $em->remove($doc);
  134.             $em->flush();
  135.             $data = ['success' => true'data' => 'Document supprimé'];
  136.         } catch (\Exception $e) {
  137.             $data = ['success' => false'data' => $e->getMessage()];
  138.         }
  139.         return new JsonResponse($data);
  140.     }
  141.     #[Route(path'/api/getDocuments'name'ctsweb_text_serv_load')]
  142.     public function getDocuments()
  143.     {
  144.         $em $this->doctrine->getManager();
  145.         $user $this->getUser();
  146.         $textes = [];
  147.         try {
  148.             $repository $this->doctrine->getRepository(DocumentService::class);
  149.             $repo $repository->gettextes_DocServ($user->getUtilisateur(), $user);
  150.             foreach ($repo as $Documentservice) {
  151.                 if (isset($Documentservice['id'])) {
  152.                     $DS $repository->findOneBy(['id' => $Documentservice['id']]);
  153.                     if ($DS->getIdFederation()) {
  154.                         $r_f $em->getRepository(RFederation::class)->findOneBy(['rAdmDiside' => $DS->getIdFederation()->getRAdmDiside()]);
  155.                     }
  156.                     $formDataFiles = [];
  157.                     $medias $DS->getMedias();
  158.                     // var_dump($DS->getMedias()); 
  159.                     if ($medias instanceof \Doctrine\ORM\PersistentCollection) {
  160.                         $formDataFiles $medias->toArray();
  161.                     }
  162.                     if (isset($formDataFiles[0]) && $formDataFiles[0]->getPath()) {
  163.                         $textes[] = [
  164.                             'id' => $DS->getId(),
  165.                             'type' => $DS->getTypeText(),
  166.                             'texte' => $DS->getText(),
  167.                             'affectation' => $DS->getIdAffectation() ? ['id' => $DS->getIdAffectation()->getIdAffectation(), 'libelle' => $DS->getIdAffectation()->getLibelleAffectation()] : '',
  168.                             'federation' => $DS->getIdFederation() ? ['id' => $DS->getIdFederation()->getIdFederation(), 'libelle' => $r_f->getRSerLibl()] : '',
  169.                             'formDataFiles' => $this->explodeMedias($formDataFiles),
  170.                             'dateUpdate' => $DS->getUpdated(),
  171.                         ];
  172.                     }
  173.                 }
  174.             }
  175.             $data = ['success' => true'data' => $textes];
  176.         } catch (\Exception $e) {
  177.             $data = ['success' => false'data' => $e->getMessage()];
  178.         }
  179.         return new JsonResponse($data);
  180.     }
  181.     private function explodeMedias($medias)
  182.     {
  183.         $dir $this->getParameter('dir_file_media');
  184.         $dataMedias = [];
  185.         if (!empty($medias)) {
  186.             foreach ($medias as $media) {
  187.                 $validMedia $this->isValidateMedia($media);
  188.                 if ($validMedia) {
  189.                     $dataMedias[] = ['urlFile' => $dir $media->getPath(), 'idUpload' => $media->getId(), 'filename' => $media->getName()];
  190.                 }
  191.             }
  192.         }
  193.         return $dataMedias;
  194.     }
  195.     private function isValidateMedia($media)
  196.     {
  197.         $validExtension = ['pdf''doc''docx''xls''xlsx''jpg''jpeg''png'];
  198.         $pathinfo $media pathinfo((string) $media->getPath()) : null;
  199.         $extension = !is_null($pathinfo) ? $pathinfo['extension'] : '';
  200.         $validMedia in_array($extension$validExtension);
  201.         return $validMedia;
  202.     }
  203.     private function saveMedias($doc$mediaIds)
  204.     {
  205.         $em $this->doctrine->getManager();
  206.         $this->removesMedias(0);
  207.         $medias json_decode((string) $mediaIdsnull512JSON_THROW_ON_ERROR);
  208.         if (!empty($medias)) {
  209.             foreach ($medias as $idMedia) {
  210.                 $media $em->getRepository(Media::class)->findOneById($idMedia);
  211.                 if ($media instanceof Media) {
  212.                     $media->setDocumentservice($doc);
  213.                     $em->flush();
  214.                 }
  215.             }
  216.         }
  217.     }
  218.     private function removesMedias($mediaIds)
  219.     {
  220.         $em $this->doctrine->getManager();
  221.         $medias is_numeric($mediaIds) ? [$mediaIds] : $mediaIds->toarray();
  222.         if (!empty($medias)) {
  223.             foreach ($medias as $media) {
  224.                 if ($media instanceof Media) {
  225.                     $em->remove($media);
  226.                     $em->flush();
  227.                 }
  228.             }
  229.         }
  230.     }
  231. }