src/Controller/DocumentController.php line 128

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use App\Entity\Document;
  9. use App\Entity\RefRole;
  10. use App\Entity\Media;
  11. use App\Entity\Type;
  12. use App\Entity\Utilisateur;
  13. use App\Entity\UtilisateurInformation;
  14. use Doctrine\Persistence\ManagerRegistry;
  15. class DocumentController extends AbstractController
  16. {
  17.     private $doctrine;
  18.     public function __construct(ManagerRegistry $doctrine)
  19.     {
  20.         $this->doctrine $doctrine;
  21.     }
  22.     #[Route(path'/api/newDocument/{id_profil}'name'ctsweb_document')]
  23.     public function New(Request $request$id_profil)
  24.     {
  25.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  26.         $em $this->doctrine->getManager();
  27.         $request->request->replace(is_array($data) ? $data : []);
  28.         $profil $em->getRepository(Utilisateur::class)->findOneBy(['idUtilisateur' => $id_profil]);
  29.         try {
  30.             $doc = new Document();
  31.             $em $this->doctrine->getManager();
  32.             $idRole $this->getUser()->getUtilisateur()->getIdRole();
  33.             $params $request->request->all();
  34.             $doc->setTitre($params['titre']);
  35.             $doc->setType($params['type']);
  36.             $doc->setCts($params['cts']);
  37.             $doc->setDtn($params['dtn']);
  38.             $doc->setSh($params['sh']);
  39.             $doc->setDs($params['ds']);
  40.             $doc->setUtilisateur($profil);
  41.             $doc->setAuteur($this->getUser()->getUtilisateur());
  42.             $doc->setCreated(new \DateTime());
  43.             $doc->setUpdated(new \DateTime());
  44.             $em->persist($doc);
  45.             if (isset($params['formData']) && $params['formData'] != '') {
  46.                 $this->saveMedias($doc$params['formData']);
  47.             }
  48.             $em->flush();
  49.             $messageRetour "Document créé";
  50.             $data = ['success' => true'data' => $messageRetour];
  51.         } catch (\Exception $e) {
  52.             $data = ['success' => false'data' => $e->getMessage()];
  53.         }
  54.         return new JsonResponse($data);
  55.     }
  56.     #[Route(path'/api/editDocument/{id}}'name'ctsweb_document_edit')]
  57.     public function edit(Request $request$id)
  58.     {
  59.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  60.         $request->request->replace(is_array($data) ? $data : []);
  61.         try {
  62.             $em $this->doctrine->getManager();
  63.             $doc $em->getRepository(Document::class)->findOneBy(['id' => $id]);
  64.             $idRole $this->getUser()->getUtilisateur()->getIdRole();
  65.             $params $request->request->all();
  66.             $doc->setTitre($params['titre']);
  67.             $doc->setType($params['type']);
  68.             $doc->setCts($params['cts']);
  69.             $doc->setDtn($params['dtn']);
  70.             $doc->setSh($params['sh']);
  71.             $doc->setDs($params['ds']);
  72.             $doc->setUtilisateur($this->getUser()->getUtilisateur());
  73.             $doc->setAuteur($this->getUser()->getUtilisateur());
  74.             $doc->setUpdated(new \DateTime());
  75.             $em->persist($doc);
  76.             if (isset($params['formData']) && $params['formData'] != '') {
  77.                 $this->saveMedias($doc$params['formData']);
  78.             }
  79.             $em->flush();
  80.             $messageRetour "Document Modifé";
  81.             $data = ['success' => true'data' => $messageRetour];
  82.         } catch (\Exception $e) {
  83.             $data = ['success' => false'data' => $e->getMessage()];
  84.         }
  85.         return new JsonResponse($data);
  86.     }
  87.     /**
  88.      * Deletes a Article entity.
  89.      */
  90.     #[Route(path'/api/deleteDocument/{id}'name'ctsweb_document_delete')]
  91.     public function delete($id)
  92.     {
  93.         $em $this->doctrine->getManager();
  94.         $doc $em->getRepository(Document::class)->findOneBy(['id' => $id]);
  95.         try {
  96.             $em->remove($doc);
  97.             $this->removesMedias($doc->getMedias());
  98.             $em->flush();
  99.             $data = ['success' => true'data' => 'Document supprimé'];
  100.         } catch (\Exception $e) {
  101.             $data = ['success' => false'data' => $e->getMessage()];
  102.         }
  103.         return new JsonResponse($data);
  104.     }
  105.     #[Route(path'/api/loadDocumentProfil/{id}'name'ctsweb_document_load')]
  106.     public function loadDocument($id)
  107.     {
  108.         $em $this->doctrine->getManager();
  109.         $user $this->getUser();
  110.         $ui $this->getUser();
  111.         $posteu $ui->getIdPoste() ? $ui->getIdPoste()->getIdPoste() : null;
  112.         $result = [];
  113.         $R_User $user->getUtilisateur()->getIdRole();
  114.         try {
  115.             if ($R_User == RefRole::ROLE_DS_ADMIN) {
  116.                 $repo $this->doctrine->getRepository(Document::class)->findBy(['utilisateur' => $id]);
  117.             } else {
  118.                 $repo $this->doctrine->getRepository(Document::class)->getListeArticlesdoc($user->getUtilisateur(), $posteu$ui$id);
  119.             }
  120.             
  121.             $result = [];
  122.             foreach ($repo as $doc) {
  123.                 if ($R_User != RefRole::ROLE_DS_ADMIN) {
  124.                     $docs $this->doctrine->getRepository(Document::class)->findOneBy(['utilisateur' => $doc['id_utilisateur'], 'id' => $doc['id']]);
  125.                     $doc $docs;
  126.                 }
  127.               
  128.                 if (null != $doc) {
  129.                     $utilisateurInformation $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $doc->getUtilisateur()->getIdUtilisateur()]);
  130.                     if ($doc->getAuteur() != null) {
  131.                         $utilisateurInformation1 $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $doc->getAuteur()->getIdUtilisateur()]);
  132.                         $auteur = [
  133.                             'id' => $doc->getAuteur()->getIdUtilisateur(),
  134.                             'nom' => $utilisateurInformation1->getNom(),
  135.                             'prenom' => $utilisateurInformation1->getPrenom(),
  136.                             'role' => $utilisateurInformation1->getUtilisateur()->getIdRole(),
  137.                         ];
  138.                     } else {
  139.                         $auteur = [
  140.                             'id' => null,
  141.                             'nom' => null,
  142.                             'prenom' => null,
  143.                             'role' => null,
  144.                         ];
  145.                     }
  146.                     $typ $this->doctrine->getRepository(Type::class)->findOneBy(['id' => $doc->getType()]);
  147.                     if ($doc->getCreated() === null) {
  148.                         $doc->setCreated(new \DateTime());
  149.                     }
  150.                     $result[] = [
  151.                         'id' => $doc->getId(),
  152.                         'titre' => $doc->getTitre(),
  153.                         'type' => ["id" => ($typ != null) ? $typ->getId() : null"nomType" => ($typ != null) ? $typ->getNomType() : null],
  154.                         'created' => $doc->getCreated(),
  155.                         'updated' => $doc->getUpdated(),
  156.                         'cts' => $doc->getCts(),
  157.                         'dtn' => $doc->getDtn(),
  158.                         'sh' => $doc->getSh(),
  159.                         'ds' => $doc->getDs(),
  160.                         'utilisateur' => [
  161.                             'id' => $doc->getUtilisateur()->getIdUtilisateur(),
  162.                             'nom' => $utilisateurInformation->getNom(),
  163.                             'prenom' => $utilisateurInformation->getPrenom(),
  164.                         ],
  165.                         'auteur' => $auteur,
  166.                         'dataMedias' => $this->explodeMedias($doc->getMedias()),
  167.                     ];
  168.                 }
  169.               
  170.             }
  171.             $data = ['success' => true'data' => $result];
  172.         } catch (\Exception $e) {
  173.             $data = ['success' => false'data' => $e->getMessage()];
  174.         }
  175.         return new JsonResponse($data);
  176.     }
  177.     private function explodeMedias($medias)
  178.     {
  179.         $dir $this->getParameter('dir_file_media');
  180.         $dataMedias = [];
  181.         if (!empty($medias)) {
  182.             foreach ($medias as $media) {
  183.                 $validMedia $this->isValidateMedia($media);
  184.                 if ($validMedia) {
  185.                     $dataMedias[] = ['urlFile' => $dir $media->getPath(), 'idUpload' => $media->getId(), 'filename' => $media->getName()];
  186.                 }
  187.             }
  188.         }
  189.         return $dataMedias;
  190.     }
  191.     private function isValidateMedia($media)
  192.     {
  193.         $validExtension = ['pdf''doc''docx''xls''xlsx''jpg''jpeg''png'];
  194.         $pathinfo $media pathinfo((string) $media->getPath()) : null;
  195.         $extension = !is_null($pathinfo) ? $pathinfo['extension'] : '';
  196.         $validMedia in_array($extension$validExtension);
  197.         return $validMedia;
  198.     }
  199.     private function saveMedias($doc$mediaIds)
  200.     {
  201.         $em $this->doctrine->getManager();
  202.         $medias json_decode((string) $mediaIdsnull512JSON_THROW_ON_ERROR);
  203.         if (!empty($medias)) {
  204.             foreach ($medias as $idMedia) {
  205.                 $media $em->getRepository(Media::class)->findOneById($idMedia);
  206.                 if ($media instanceof Media) {
  207.                     $media->setDocument($doc);
  208.                     $media->setCreated(new \DateTime());
  209.                     $media->setUpdated(new \DateTime());
  210.                     $em->flush();
  211.                 }
  212.             }
  213.         }
  214.     }
  215.     private function removesMedias($mediaIds)
  216.     {
  217.         $em $this->doctrine->getManager();
  218.         $medias $mediaIds->toarray();
  219.         if (!empty($medias)) {
  220.             foreach ($medias as $media) {
  221.                 if ($media instanceof Media) {
  222.                     $em->remove($media);
  223.                     $em->flush();
  224.                 }
  225.             }
  226.         }
  227.     }
  228. }