<?php
namespace App\Controller\Admin;
use App\Entity\Galerie;
use App\Entity\Image;
use App\Entity\Video;
use App\Form\ImageType;
use App\Form\VideoType;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Vich\UploaderBundle\Form\Type\VichImageType;
use App\Service\FileUploader;
use Symfony\Component\HttpFoundation\RequestStack;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Asset;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
class GaleryCrudController extends AbstractCrudController
{
private $fileuploader;
private $request;
public function __construct(FileUploader $fileUploader, RequestStack $request)
{
$this->fileuploader = $fileUploader;
$this->request = $request;
}
public function configureActions(Actions $actions): Actions
{
$actions->update(Crud::PAGE_NEW, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setLabel('Enregistrer');
});
return $actions;
}
public function configureAssets(Assets $assets): Assets
{
return $assets->addJsFile(Asset::new('js/galeryJs.js')->defer());
}
final public function configureCrud(Crud $crud): Crud
{
return $crud
->overrideTemplates([
'crud/edit' => 'admin/galerie/galerie_edit.html.twig',
])
;
}
public static function getEntityFqcn(): string
{
return Galerie::class;
}
public function configureFields(string $pageName): iterable
{
return [
TextField::new('titre'),
DateField::new('date'),
TextareaField::new('description'),
CollectionField::new('images')
->allowAdd(true)
->allowDelete(true)
->setEntryIsComplex(true)
->setEntryType(ImageType::class)
->setFormTypeOptions([
'by_reference' => 'false',
'mapped' => false
])->hideOnIndex()->setRequired($pageName !== Crud::PAGE_EDIT)
->setColumns('custom_class_images col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
CollectionField::new('videos')
->allowAdd(true)
->allowDelete(true)
->setEntryIsComplex(true)
->setEntryType(VideoType::class)
->setFormTypeOptions([
'by_reference' => 'false',
'mapped' => false
])->hideOnIndex()->setRequired($pageName !== Crud::PAGE_EDIT)
->setColumns('custom_class_videos col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
];
}
#[Route('/show/galerie', name: 'show_galerie')]
public function showByGalerie(Request $request, EntityManagerInterface $entityManager, PaginatorInterface $paginator): Response
{
$donnees = $entityManager->getRepository(Galerie::class)->findAll();
$galerie = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),
12
);
return $this->render('galerie/index.html.twig', [
'galerie'=>$galerie
]);
}
#[Route('/show/galerie/detail/{id}', name: 'show_galerie_detail')]
public function showByGalerieDetail(Galerie $galerie, Request $request, EntityManagerInterface $entityManager): Response
{
return $this->render('galerie/detail.html.twig', [
'galerie'=>$galerie,
]);
}
#[Route('/gallerie/image/list/{id}', name: 'gallerie_image_list')]
public function gallerieImageList(Galerie $galerie, Request $request, EntityManagerInterface $entityManager): JsonResponse
{
$selectedImages = [];
$startSelecting = false;
$slectedelements = 0;
$lastid = 0;
foreach ($galerie->getImages() as $image) {
if ($image->getId() == $request->query->get('lastImageId')) {
$startSelecting = true;
} elseif ($startSelecting && $slectedelements < 2) {
$selectedImages[] = $image;
$lastid = $image->getId();
$slectedelements++;
}
if ($slectedelements == 2) {
break;
}
}
$htmlResponse = $this->renderView('galerie/gallerie_image_list_rendred.html.twig', [ "selectedImages" => $selectedImages ]);
return new JsonResponse(['data' => $htmlResponse, 'lastId' => $lastid]);
}
#[Route('/gallerie/video/list/{id}', name: 'gallerie_video_list')]
public function gallerieVideoList(Galerie $galerie, Request $request, EntityManagerInterface $entityManager): JsonResponse
{
$selectedVideos = [];
$startSelecting = false;
$slectedelements = 0;
$lastid = 0;
foreach ($galerie->getVideos() as $video) {
if ($video->getId() == $request->query->get('lastVideoId')) {
$startSelecting = true;
} elseif ($startSelecting && $slectedelements < 2) {
$selectedVideos[] = $video;
$lastid = $video->getId();
$slectedelements++;
}
if ($slectedelements == 2) {
break;
}
}
$htmlResponse = $this->renderView('galerie/gallerie_video_list_rendred.html.twig', [ "selectedVideos" => $selectedVideos ]);
return new JsonResponse(['data' => $htmlResponse, 'lastId' => $lastid]);
}
public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
// $entityManager->persist($entityInstance);
foreach ($entityInstance->getImages() as $image) {
$entityInstance->removeImage($image);
}
foreach ($entityInstance->getVideos() as $video) {
$entityInstance->removeVideo($video);
}
$entityManager->persist($entityInstance);
$files = isset($this->request->getCurrentRequest()->files->get('Galerie')['images']) ? $this->request->getCurrentRequest()->files->get('Galerie')['images'] : null;
if ($files) {
foreach ($files as $file) {
//upload image
if ($file['image']) {
$image = new Image();
$newFilename = $this->fileuploader->upload($file['image'], '/galerie/images/');
$image->setImage($newFilename);
$image->setGalerie($entityInstance);
$entityManager->persist($image);
}
}
}
$files1 = isset($this->request->getCurrentRequest()->files->get('Galerie')['videos']) ? $this->request->getCurrentRequest()->files->get('Galerie')['videos'] : null;
if ($files1) {
foreach ($files1 as $file1) {
//upload video
if ($file1['video']) {
$video = new Video();
$newFilename = $this->fileuploader->upload($file1['video'], '/galerie/videos/');
$video->setVideo($newFilename);
$video->setGalerie($entityInstance);
$entityManager->persist($video);
}
}
}
$entityManager->persist($entityInstance);
$entityManager->flush();
}
public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
$oldImages=$this->request->getCurrentRequest()->get('old_images');
$imageArray=explode(',', $oldImages);
array_shift($imageArray);
foreach ($entityInstance->getImages() as $image) {
if (!in_array((string)$image->getId(), $imageArray)) {
//$entityInstance->removeImage($image);
$entityManager->remove($image);
$entityManager->flush();
}
}
$oldVideos=$this->request->getCurrentRequest()->get('old_videos');
$videoArray=explode(',', $oldVideos);
array_shift($videoArray);
foreach ($entityInstance->getVideos() as $video) {
if (!in_array((string)$video->getId(), $videoArray)) {
//$entityInstance->removeImage($image);
$entityManager->remove($video);
$entityManager->flush();
}
}
//$entityManager->persist($entityInstance);
$files = isset($this->request->getCurrentRequest()->files->get('Galerie')['images']) ? $this->request->getCurrentRequest()->files->get('Galerie')['images'] : null;
if ($files) {
foreach ($files as $file) {
//upload image
if ($file['image']) {
$image = new Image();
$newFilename = $this->fileuploader->upload($file['image'], '/galerie/images/');
$image->setImage($newFilename);
$image->setGalerie($entityInstance);
$entityManager->persist($image);
}
}
}
//video part
$files = isset($this->request->getCurrentRequest()->files->get('Galerie')['videos']) ? $this->request->getCurrentRequest()->files->get('Galerie')['videos'] : null;
if ($files) {
foreach ($files as $file) {
//upload image
if ($file['video']) {
$video = new Video();
$newFilename = $this->fileuploader->upload($file['video'], '/galerie/videos/');
$video->setVideo($newFilename);
$video->setGalerie($entityInstance);
$entityManager->persist($video);
}
}
}
$entityManager->persist($entityInstance);
$entityManager->flush();
// // /** check if FormUserNotes instances was updated */
// // if ($entityInstance->getImages()) {
// // foreach ($entityInstance->getImages()->getSnapshot() as $image) {
// // /** check if the FormUserNotes instance is to remove */
// // if (!$entityInstance->getImages()->contains($image)) {
// // /* $adresse->setUser(null); */
// // $entityManager->remove($image);
// // }
// // }
// // /** mapping of created User */
// // foreach ($entityInstance->getImages() as $image) {
// // $image->setGalerie($entityInstance);
// // }
// // }
// // $entityManager->persist($entityInstance);
// // $entityManager->flush();
}
}