src/Controller/Admin/GaleryCrudController.php line 120

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Galerie;
  4. use App\Entity\Image;
  5. use App\Entity\Video;
  6. use App\Form\ImageType;
  7. use App\Form\VideoType;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  10. use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
  11. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  17. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Vich\UploaderBundle\Form\Type\VichImageType;
  22. use App\Service\FileUploader;
  23. use Symfony\Component\HttpFoundation\RequestStack;
  24. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  25. use Knp\Component\Pager\PaginatorInterface;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  28. use EasyCorp\Bundle\EasyAdminBundle\Config\Asset;
  29. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  30. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  31. class GaleryCrudController extends AbstractCrudController
  32. {
  33.     private $fileuploader;
  34.     private $request;
  35.     public function __construct(FileUploader $fileUploaderRequestStack $request)
  36.     {
  37.         $this->fileuploader $fileUploader;
  38.         $this->request $request;
  39.     }
  40.     public function configureActions(Actions $actions): Actions
  41.     {
  42.         $actions->update(Crud::PAGE_NEWAction::SAVE_AND_RETURN, function (Action $action) {
  43.             return $action->setLabel('Enregistrer');
  44.         });
  45.         return $actions;
  46.     }
  47.     public function configureAssets(Assets $assets): Assets
  48.     {
  49.         return $assets->addJsFile(Asset::new('js/galeryJs.js')->defer());
  50.     }
  51.     final public function configureCrud(Crud $crud): Crud
  52.     {
  53.         return $crud
  54.             ->overrideTemplates([
  55.                'crud/edit' => 'admin/galerie/galerie_edit.html.twig',
  56.             ])
  57.         ;
  58.     }
  59.     public static function getEntityFqcn(): string
  60.     {
  61.         return Galerie::class;
  62.     }
  63.     public function configureFields(string $pageName): iterable
  64.     {
  65.         return [
  66.             TextField::new('titre'),
  67.             DateField::new('date'),
  68.             TextareaField::new('description'),
  69.             CollectionField::new('images')
  70.                 ->allowAdd(true)
  71.                 ->allowDelete(true)
  72.                 ->setEntryIsComplex(true)
  73.                 ->setEntryType(ImageType::class)
  74.                 ->setFormTypeOptions([
  75.                     'by_reference' => 'false',
  76.                     'mapped' => false
  77.             ])->hideOnIndex()->setRequired($pageName !== Crud::PAGE_EDIT)
  78.             ->setColumns('custom_class_images col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
  79.             CollectionField::new('videos')
  80.                 ->allowAdd(true)
  81.                 ->allowDelete(true)
  82.                 ->setEntryIsComplex(true)
  83.                 ->setEntryType(VideoType::class)
  84.                 ->setFormTypeOptions([
  85.                     'by_reference' => 'false',
  86.                     'mapped' => false
  87.             ])->hideOnIndex()->setRequired($pageName !== Crud::PAGE_EDIT)
  88.             ->setColumns('custom_class_videos col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
  89.         ];
  90.     }
  91.     #[Route('/show/galerie'name'show_galerie')]
  92.     public function showByGalerie(Request $requestEntityManagerInterface $entityManagerPaginatorInterface $paginator): Response
  93.     {
  94.         $donnees $entityManager->getRepository(Galerie::class)->findAll();
  95.         $galerie $paginator->paginate(
  96.             $donnees,
  97.             $request->query->getInt('page'1),
  98.             12
  99.         );
  100.         return $this->render('galerie/index.html.twig', [
  101.             'galerie'=>$galerie
  102.         ]);
  103.     }
  104.     #[Route('/show/galerie/detail/{id}'name'show_galerie_detail')]
  105.     public function showByGalerieDetail(Galerie $galerieRequest $requestEntityManagerInterface $entityManager): Response
  106.     {
  107.         return $this->render('galerie/detail.html.twig', [
  108.              'galerie'=>$galerie,
  109.          ]);
  110.     }
  111.     #[Route('/gallerie/image/list/{id}'name'gallerie_image_list')]
  112.     public function gallerieImageList(Galerie $galerieRequest $requestEntityManagerInterface $entityManager): JsonResponse
  113.     {
  114.         $selectedImages = [];
  115.         $startSelecting false;
  116.         $slectedelements 0;
  117.         $lastid 0;
  118.         foreach ($galerie->getImages() as $image) {
  119.             if ($image->getId() == $request->query->get('lastImageId')) {
  120.                 $startSelecting true;
  121.             } elseif ($startSelecting && $slectedelements 2) {
  122.                 $selectedImages[] = $image;
  123.                 $lastid $image->getId();
  124.                 $slectedelements++;
  125.             }
  126.             if ($slectedelements == 2) {
  127.                 break;
  128.             }
  129.         }
  130.         $htmlResponse $this->renderView('galerie/gallerie_image_list_rendred.html.twig', [ "selectedImages" => $selectedImages ]);
  131.         return new JsonResponse(['data' => $htmlResponse'lastId' => $lastid]);
  132.     }
  133.     #[Route('/gallerie/video/list/{id}'name'gallerie_video_list')]
  134.     public function gallerieVideoList(Galerie $galerieRequest $requestEntityManagerInterface $entityManager): JsonResponse
  135.     {
  136.         $selectedVideos = [];
  137.         $startSelecting false;
  138.         $slectedelements 0;
  139.         $lastid 0;
  140.         foreach ($galerie->getVideos() as $video) {
  141.             if ($video->getId() == $request->query->get('lastVideoId')) {
  142.                 $startSelecting true;
  143.             } elseif ($startSelecting && $slectedelements 2) {
  144.                 $selectedVideos[] = $video;
  145.                 $lastid $video->getId();
  146.                 $slectedelements++;
  147.             }
  148.             if ($slectedelements == 2) {
  149.                 break;
  150.             }
  151.         }
  152.         $htmlResponse $this->renderView('galerie/gallerie_video_list_rendred.html.twig', [ "selectedVideos" => $selectedVideos ]);
  153.         return new JsonResponse(['data' => $htmlResponse'lastId' => $lastid]);
  154.     }
  155.     public function persistEntity(EntityManagerInterface $entityManager$entityInstance): void
  156.     {
  157.         //   $entityManager->persist($entityInstance);
  158.         foreach ($entityInstance->getImages() as $image) {
  159.             $entityInstance->removeImage($image);
  160.         }
  161.         foreach ($entityInstance->getVideos() as $video) {
  162.             $entityInstance->removeVideo($video);
  163.         }
  164.         $entityManager->persist($entityInstance);
  165.         $files = isset($this->request->getCurrentRequest()->files->get('Galerie')['images']) ? $this->request->getCurrentRequest()->files->get('Galerie')['images'] : null;
  166.         if ($files) {
  167.             foreach ($files as $file) {
  168.                 //upload image
  169.                 if ($file['image']) {
  170.                     $image = new Image();
  171.                     $newFilename $this->fileuploader->upload($file['image'], '/galerie/images/');
  172.                     $image->setImage($newFilename);
  173.                     $image->setGalerie($entityInstance);
  174.                     $entityManager->persist($image);
  175.                 }
  176.             }
  177.         }
  178.         $files1 = isset($this->request->getCurrentRequest()->files->get('Galerie')['videos']) ? $this->request->getCurrentRequest()->files->get('Galerie')['videos'] : null;
  179.         if ($files1) {
  180.             foreach ($files1 as $file1) {
  181.                 //upload video
  182.                 if ($file1['video']) {
  183.                     $video = new Video();
  184.                     $newFilename $this->fileuploader->upload($file1['video'], '/galerie/videos/');
  185.                     $video->setVideo($newFilename);
  186.                     $video->setGalerie($entityInstance);
  187.                     $entityManager->persist($video);
  188.                 }
  189.             }
  190.         }
  191.         $entityManager->persist($entityInstance);
  192.         $entityManager->flush();
  193.     }
  194.     public function updateEntity(EntityManagerInterface $entityManager$entityInstance): void
  195.     {
  196.         $oldImages=$this->request->getCurrentRequest()->get('old_images');
  197.         $imageArray=explode(','$oldImages);
  198.         array_shift($imageArray);
  199.         foreach ($entityInstance->getImages() as $image) {
  200.             if (!in_array((string)$image->getId(), $imageArray)) {
  201.                 //$entityInstance->removeImage($image);
  202.                 $entityManager->remove($image);
  203.                 $entityManager->flush();
  204.             }
  205.         }
  206.         $oldVideos=$this->request->getCurrentRequest()->get('old_videos');
  207.         $videoArray=explode(','$oldVideos);
  208.         array_shift($videoArray);
  209.         foreach ($entityInstance->getVideos() as $video) {
  210.             if (!in_array((string)$video->getId(), $videoArray)) {
  211.                 //$entityInstance->removeImage($image);
  212.                 $entityManager->remove($video);
  213.                 $entityManager->flush();
  214.             }
  215.         }
  216.         //$entityManager->persist($entityInstance);
  217.         $files = isset($this->request->getCurrentRequest()->files->get('Galerie')['images']) ? $this->request->getCurrentRequest()->files->get('Galerie')['images'] : null;
  218.         if ($files) {
  219.             foreach ($files as $file) {
  220.                 //upload image
  221.                 if ($file['image']) {
  222.                     $image = new Image();
  223.                     $newFilename $this->fileuploader->upload($file['image'], '/galerie/images/');
  224.                     $image->setImage($newFilename);
  225.                     $image->setGalerie($entityInstance);
  226.                     $entityManager->persist($image);
  227.                 }
  228.             }
  229.         }
  230.         //video part
  231.         $files = isset($this->request->getCurrentRequest()->files->get('Galerie')['videos']) ? $this->request->getCurrentRequest()->files->get('Galerie')['videos'] : null;
  232.         if ($files) {
  233.             foreach ($files as $file) {
  234.                 //upload image
  235.                 if ($file['video']) {
  236.                     $video = new Video();
  237.                     $newFilename $this->fileuploader->upload($file['video'], '/galerie/videos/');
  238.                     $video->setVideo($newFilename);
  239.                     $video->setGalerie($entityInstance);
  240.                     $entityManager->persist($video);
  241.                 }
  242.             }
  243.         }
  244.         $entityManager->persist($entityInstance);
  245.         $entityManager->flush();
  246.     //     // /** check if FormUserNotes instances was updated */
  247.     //     // if ($entityInstance->getImages()) {
  248.     //     //     foreach ($entityInstance->getImages()->getSnapshot() as $image) {
  249.     //     //         /** check if the FormUserNotes instance is to remove */
  250.     //     //         if (!$entityInstance->getImages()->contains($image)) {
  251.     //     //             /* $adresse->setUser(null); */
  252.     //     //             $entityManager->remove($image);
  253.     //     //         }
  254.     //     //     }
  255.     //     //     /** mapping of created User */
  256.     //     //     foreach ($entityInstance->getImages() as $image) {
  257.     //     //         $image->setGalerie($entityInstance);
  258.     //     //     }
  259.     //     //         }
  260.     //     //         $entityManager->persist($entityInstance);
  261.     //     //         $entityManager->flush();
  262.     }
  263. }