src/Controller/Admin/GaleryCrudController.php line 121

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