<?php
namespace App\Controller\Back;
use App\Entity\ProductPage;
use App\Form\ProductPageType;
use App\Services\UploadFileService;
use App\Repository\ProductPageRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
/**
* @Route("/admin")
*/
class ProductPageController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private EntityManagerInterface $em;
/**
* @var SluggerInterface
*/
private SluggerInterface $slugger;
/**
* @var UploadFileService
*/
private UploadFileService $uploadFileService;
public function __construct(UploadFileService $uploadFileService, EntityManagerInterface $em, SluggerInterface $slugger)
{
$this->em = $em;
$this->slugger = $slugger;
$this->uploadFileService = $uploadFileService;
}
/**
* @Route("/product-page/list", name="back_product_page_list")
*/
public function list(ProductPageRepository $productPageRepository)
{
return $this->render('back/product_page/list.html.twig', [
'productPages' => $productPageRepository->findBy([], ['id' => 'DESC'])
]);
}
/**
* @Route("/product-page/add", name="back_product_page_add")
*/
public function add(Request $request)
{
$productPage = new ProductPage();
$form = $this->createForm(ProductPageType::class, $productPage)->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$sluggedName = $this->slugger->slug($productPage->getName())->lower();
$productPage->setSlug($sluggedName);
if ($productPage->getDocument() instanceof UploadedFile) {
$documentUploaded = $this->uploadFileService->uploadImage($productPage->getDocument());
$productPage->setDocument($documentUploaded);
}
foreach ($productPage->getImages() as $image) {
$filename = $this->uploadFileService->uploadImage($image->getName());
$image->setName($filename);
}
$this->em->persist($productPage);
$this->em->flush();
$this->addFlash('success', 'Page produit créée');
return $this->redirectToRoute('back_product_page_list');
}
return $this->render('back/product_page/add.html.twig', [
'form' => $form->createView(),
'productPage' => $productPage
]);
}
/**
* @Route("/product-page/edit/{id}", name="back_product_page_edit")
*/
public function edit(ProductPage $productPage, Request $request)
{
$oldDocument = $productPage->getDocument();
$arrayImages = [];
foreach ($productPage->getImages() as $image) {
$arrayImages[$image->getId()] = $image->getName();
}
$form = $this->createForm(ProductPageType::class, $productPage)->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$sluggedName = $this->slugger->slug($productPage->getName())->lower();
$productPage->setSlug($sluggedName);
if ($productPage->getDocument() instanceof UploadedFile) {
$documentUploaded = $this->uploadFileService->uploadImage($productPage->getDocument());
$productPage->setDocument($documentUploaded);
} else {
$productPage->setDocument($oldDocument);
}
foreach ($productPage->getImages() as $image) {
if ($image->getName() instanceof UploadedFile) {
$filename = $this->uploadFileService->uploadImage($image->getName());
$image->setName($filename);
$productPage->addImage($image);
} else {
if (array_key_exists($image->getId(), $arrayImages)) {
$image->setName($arrayImages[$image->getId()]);
}
}
}
$this->em->persist($productPage);
$this->em->flush();
$this->addFlash('success', 'Page produit éditée');
return $this->redirectToRoute('back_product_page_list');
}
return $this->render('back/product_page/edit.html.twig', [
'form' => $form->createView(),
'productPage' => $productPage
]);
}
/**
* @Route("/product-page/remove/{id}", name="back_product_page_remove")
*/
public function remove(ProductPage $productPage)
{
$this->em->remove($productPage);
$this->em->flush();
$this->addFlash('success', 'Page produit supprimée');
return $this->redirectToRoute('back_product_page_list');
}
}