<?php
namespace App\Controller\Back;
use App\Entity\Post;
use App\Form\PostType;
use App\Repository\PostRepository;
use App\Services\UploadFileService;
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 PostController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private EntityManagerInterface $em;
/**
* @var SluggerInterface
*/
private SluggerInterface $slugger;
/**
* @var UploadFileService
*/
private UploadFileService $uploadFileService;
public function __construct(EntityManagerInterface $em, SluggerInterface $slugger, UploadFileService $uploadFileService)
{
$this->em = $em;
$this->slugger = $slugger;
$this->uploadFileService = $uploadFileService;
}
/**
* @Route("/post/list", name="back_post_list")
*/
public function list(PostRepository $postRepository)
{
return $this->render('back/post/list.html.twig', [
'posts' => $postRepository->findBy([], ['id' => 'DESC'])
]);
}
/**
* @Route("/post/add", name="back_post_add")
*/
public function add(Request $request)
{
$post = new Post();
$form = $this->createForm(PostType::class, $post)->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$sluggedName = $this->slugger->slug($post->getTitle())->lower();
$post->setSlug($sluggedName);
foreach ($post->getPostImages() as $image) {
$filename = $this->uploadFileService->uploadImage($image->getFilename());
$image->setFilename($filename);
}
$this->em->persist($post);
$this->em->flush();
$this->addFlash('success', 'Actualité créée');
return $this->redirectToRoute('back_post_list');
}
return $this->render('back/post/add.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route("/post/edit/{id}", name="back_post_edit")
*/
public function edit(Post $post, Request $request)
{
$arrayImages = [];
foreach ($post->getPostImages() as $image) {
$arrayImages[$image->getId()] = $image->getFilename();
}
$form = $this->createForm(PostType::class, $post)->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$sluggedName = $this->slugger->slug($post->getTitle())->lower();
$post->setSlug($sluggedName);
foreach ($post->getPostImages() as $image) {
if ($image->getFilename() instanceof UploadedFile) {
$filename = $this->uploadFileService->uploadImage($image->getFilename());
$image->setFilename($filename);
}else {
if (array_key_exists($image->getId(), $arrayImages)) {
$image->setFilename($arrayImages[$image->getId()]);
}
}
}
$this->em->persist($post);
$this->em->flush();
$this->addFlash('success', 'Actualité éditée');
return $this->redirectToRoute('back_post_list');
}
return $this->render('back/post/edit.html.twig', [
'form' => $form->createView(),
'post' => $post
]);
}
/**
* @Route("/post/remove/{id}", name="back_post_remove")
*/
public function remove(Post $post)
{
$this->em->remove($post);
$this->em->flush();
$this->addFlash('success', 'Actualité supprimée');
return $this->redirectToRoute('back_post_list');
}
}