src/Controller/CategorieController.php line 148

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\Routing\Annotation\Route;
  7. use App\Entity\Categorie;
  8. use App\Entity\RefRole;
  9. use App\Entity\Media;
  10. use App\Entity\Article;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. class CategorieController extends AbstractController
  13. {
  14.     private $doctrine;
  15.     public function __construct(ManagerRegistry $doctrine)
  16.     {
  17.         $this->doctrine $doctrine;
  18.     }
  19.     #[Route(path'/api/createCategorie'name'categorie_new')]
  20.     public function new(Request $request)
  21.     {
  22.         $role $this->getUser()->getUtilisateur()->getIdRole();
  23.         if (RefRole::ROLE_DS_ADMIN !== $role) {
  24.             return new JsonResponse(nullJsonResponse::HTTP_BAD_REQUEST);
  25.         }
  26.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  27.         $request->request->replace(is_array($data) ? $data : []);
  28.         try {
  29.             $Categorie = new Categorie();
  30.             $em $this->doctrine->getManager();
  31.             $params $request->request->all();
  32.             $nomCategorie $params['nomCategorie'] ?? "Categorie par défaut";
  33.             $Categorie->setNomCategorie($nomCategorie);
  34.             $em->persist($Categorie);
  35.             if (isset($params['idCategorieImage']) && $params['idCategorieImage'] != '') {
  36.                 $this->saveMedias($Categorie$params['idCategorieImage']);
  37.             }
  38.             $em->flush();
  39.             $messageRetour "Categorie créée";
  40.             $data = ['success' => true'data' => $messageRetour];
  41.         } catch (\Exception $e) {
  42.             $data = ['success' => false'data' => $e->getMessage()];
  43.         }
  44.         return new JsonResponse($data);
  45.     }
  46.     /**
  47.      * Displays a form to edit an existing categorie entity
  48.      */
  49.     #[Route(path'/api/modifyCategorie/{id}'name'categorie_edit'methods: ['GET','POST'])]
  50.     public function edit(Request $request$id)
  51.     {
  52.         $role $this->getUser()->getUtilisateur()->getIdRole();
  53.         if (RefRole::ROLE_DS_ADMIN !== $role) {
  54.             return new JsonResponse(nullJsonResponse::HTTP_BAD_REQUEST);
  55.         }
  56.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  57.         $em $this->doctrine->getManager();
  58.         $categ $em->getRepository(Categorie::class)->findOneBy(['id' => $id]);
  59.         $categ->setNomCategorie($data['nomCategorie']);
  60.         if (isset($data['idCategorieImage']) && $data['idCategorieImage'] != '') {
  61.             $this->saveMedias($categ$data['idCategorieImage']);
  62.         }
  63.         try {
  64.             $em->persist($categ);
  65.             $em->flush();
  66.             $data = ['success' => true'data' => 'Action modifiée'];
  67.         } catch (\Exception $e) {
  68.             $data = ['success' => false'data' => $e->getMessage()];
  69.         }
  70.         return new JsonResponse($data);
  71.     }
  72.     #[Route(path'/api/getCategorie/{id}'name'categorie_show')]
  73.     public function show($id)
  74.     {
  75.         $categApercu = [];
  76.         $em $this->doctrine->getManager();
  77.         $categ $em->getRepository(Categorie::class)->findOneBy(['id' => $id]);
  78.         try {
  79.             $categApercu[] = ['id' => $categ->getId(), 'nom' => $categ->getNomCategorie(), 'dataMedias' => $this->explodeCategMedias($categ->getMedias())];
  80.             $data = ['success' => true'data' => $categApercu];
  81.         } catch (\Exception $e) {
  82.             $data = ['success' => false'data' => $e->getMessage()];
  83.         }
  84.         return new JsonResponse($data);
  85.     }
  86.     /**
  87.      * Deletes a Article entity.
  88.      */
  89.     #[Route(path'/api/deleteCategorie/{id}'name'categorie_delete')]
  90.     public function delete($id)
  91.     {
  92.         $role $this->getUser()->getUtilisateur()->getIdRole();
  93.         if (RefRole::ROLE_DS_ADMIN !== $role) {
  94.             return new JsonResponse(nullJsonResponse::HTTP_BAD_REQUEST);
  95.         }
  96.         $em $this->doctrine->getManager();
  97.         $categ $em->getRepository(Categorie::class)->findOneBy(['id' => $id]);
  98.         try {
  99.             if (true === $this->removesCategory($categ)) {
  100.                 $this->removesMedias($categ->getMedias());
  101.                 $em->flush();
  102.                 $data = ['success' => true'data' => 'Categorie supprimée'];
  103.             } else {
  104.                 $data = ['success' => false'data' => ' Vous ne pouvez supprimer cette catégorie car des actualités lui sont rattachées'];
  105.             }
  106.         } catch (\Exception $e) {
  107.             $data = ['success' => false'data' => $e->getMessage()];
  108.         }
  109.         return new JsonResponse($data);
  110.     }
  111.     /**
  112.      * Lists all categories entities.
  113.      */
  114.     #[Route(path'/api/getCategories'name'categories_list'methods: ['GET'])]
  115.     public function getCategories()
  116.     {
  117.         $em $this->doctrine->getManager();
  118.         $result = [];
  119.         try {
  120.             $repo $this->doctrine->getRepository(Categorie::class)->findAll();
  121.             $result = [];
  122.             foreach ($repo as $categ) {
  123.                 $explodeCategMedias $this->explodeCategMedias($categ->getMedias());
  124.                 $result[] = [
  125.                     'id' => $categ->getId(),
  126.                     'nom' => $categ->getNomCategorie(),
  127.                     'dataMedias' => [end($explodeCategMedias)],
  128.                 ];
  129.             }
  130.             $data = ['success' => true'data' => $result];
  131.         } catch (\Exception $e) {
  132.             $data = ['success' => false'data' => $e->getMessage()];
  133.         }
  134.         return new JsonResponse($data);
  135.     }
  136.     private function explodeCategMedias($medias)
  137.     {
  138.         $dir $this->getParameter('dir_file_media');
  139.         $dataMedias = [];
  140.         if (!empty($medias)) {
  141.             foreach ($medias as $media) {
  142.                 $validMedia $this->isValidateMedia($media);
  143.                 if ($validMedia) {
  144.                     $dataMedias[] = ['urlFile' => $dir $media->getPath(), 'idUpload' => $media->getId(), 'filename' => $media->getName()];
  145.                 }
  146.             }
  147.         }
  148.         return $dataMedias;
  149.     }
  150.     private function isValidateMedia($media)
  151.     {
  152.         $validExtension = ['pdf''doc''docx''xls''xlsx''jpg''jpeg''png'];
  153.         $pathinfo $media pathinfo((string) $media->getPath()) : null;
  154.         $extension = !is_null($pathinfo) ? $pathinfo['extension'] : '';
  155.         $validMedia in_array($extension$validExtension);
  156.         return $validMedia;
  157.     }
  158.     private function saveMedias($categ$mediaIds)
  159.     {
  160.         $em $this->doctrine->getManager();
  161.         $medias json_decode((string) $mediaIdsnull512JSON_THROW_ON_ERROR);
  162.         if (!empty($medias)) {
  163.             foreach ($medias as $idMedia) {
  164.                 $media $em->getRepository(Media::class)->findOneById($idMedia);
  165.                 if ($media instanceof Media) {
  166.                     $media->setCategorie($categ);
  167.                     $em->flush();
  168.                 }
  169.             }
  170.         }
  171.     }
  172.     private function removesMedias($mediaIds)
  173.     {
  174.         $em $this->doctrine->getManager();
  175.         $medias $mediaIds->toarray();
  176.         if (!empty($medias)) {
  177.             foreach ($medias as $media) {
  178.                 if ($media instanceof Media) {
  179.                     $em->remove($media);
  180.                     $em->flush();
  181.                 }
  182.             }
  183.         }
  184.     }
  185.     private function removesCategory($idCategory)
  186.     {
  187.         $em $this->doctrine->getManager();
  188.         $articles $em->getRepository(Article::class)->findBy(["idCategorie" => $idCategory]);
  189.         if (empty($articles)) {
  190.             $em->remove($idCategory);
  191.             $em->flush();
  192.             return true;
  193.         } else {
  194.             return false;
  195.         }
  196.     }
  197. }