<?php
namespace App\Controller;
use App\Entity\Menu;
use App\Form\MenuType;
use App\Entity\Contact;
use App\Form\ContactType;
use App\Service\FileUploader;
use App\Entity\PropertySearch;
use App\Form\AgendaSearchType;
use App\Form\PropertySearchType;
use App\Repository\MenuRepository;
use App\Repository\AgendaRepository;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class MenuController extends AbstractController
{
//private $em;
public function __construct(private EntityManagerInterface $em)
{
// $this->em = $em;
}
#[Route('/menu', name: 'app_menu_index', methods: ['GET', 'POST'])]
public function index(ValidatorInterface $validator, Request $request, MenuRepository $menuRepository): Response
{
$submit = $request->request->get('submit');
$errors = null;
if ($submit) {
$menu = new Menu();
$menu->setTitle($request->request->get('libelle'));
$menu->setPath($request->request->get('path'));
$menu->setPosition($request->request->get('position'));
$errors = $validator->validate($menu);
//dd($errors);
if (count($errors) > 0) {
$errorsString = (string) $errors;
} else {
$this->em->persist($menu);
$this->em->flush();
return $this->redirectToRoute('app_menu_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->render('menu/index.html.twig', [
'menus' => $menuRepository->findBy(array(),
array('position'=>'ASC')),
'errors' => $errors,
]);
}
#[Route('/{id}/desactive-status', name: 'app_menu_desactive_status', methods: ['GET','POST'])]
public function desactiveStatus(Menu $menu, Request $request)
{
$menu->setStatut(false);
$this->em->persist($menu);
$this->em->flush();
return $this->redirectToRoute('app_menu_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}/active-status', name: 'app_menu_active_status', methods: ['GET','POST'])]
public function activeStatus(Menu $menu, Request $request)
{
$menu->setStatut(true);
$this->em->persist($menu);
$this->em->flush();
return $this->redirectToRoute('app_menu_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/menu/new', name: 'app_menu_new', methods: ['GET', 'POST'])]
public function new(FileUploader $fileUploader, ValidatorInterface $validator, Request $request, MenuRepository $menuRepository): Response
{
$submit = $request->request->get('submit');
$errors = null;
if ($submit) {
//dd($request);
$menu = new Menu();
$menu->setTitle($request->request->get('title'));
$menu->setPath($request->request->get('path'));
$menu->setContent($request->request->get('observation'));
$menu->setPosition($request->request->get('position'));
$menu->setStatut($request->request->get('statut'));
$tab = null;
$tabvid = null;
if ($request->files->get('file')) {
foreach ($request->files->get('file') as $value) {
$FileName = $fileUploader->upload($value);
$tab[] = $FileName;
}
$menu->setImage($tab);
}
if ($request->files->get('video')) {
foreach ($request->files->get('video') as $value) {
$FileName = $fileUploader->upload($value);
$tabvid[] = $FileName;
}
$menu->setVideo($tabvid);
}
$errors = $validator->validate($menu);
if (count($errors) > 0) {
$errorsString = (string) $errors;
}else {
$this->em->persist($menu);
$this->em->flush();
return $this->redirectToRoute('app_menu_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('menu/new.html.twig', [
'menus' => $menuRepository->findAll(),
'errors' => $errors,
]);
}
/* #[Route('menu/agenda', name: 'app_menu_agenda', methods: ['GET'])]
public function agenda(MenuRepository $menuRepository): Response
{
return $this->render('menu/agenda.html.twig', [
'menus' => $menuRepository->findAll(),
]);
} */
#[Route('/agenda', name: 'app_menu_agenda')]
public function agenda(MenuRepository $menuRepository, AgendaRepository $agendaRepository,Request $request, PaginatorInterface $paginator): Response
{
$imagelink=null;
$page = $request->query->get('page', 1);
$limit = 4; // number of items per page
$offset = ($page - 1) * $limit;
$agendas=$agendaRepository->findBy(['statut'=>1], [], $limit, $offset);
$totalItems = $agendaRepository->count([]);
$totalPages = ceil($totalItems / $limit);
return $this->render('menu/agenda.html.twig', [
'menus' => $menuRepository->findBy(array(),
array('position'=>'ASC')),
'agenda'=>$agendas,
'totalItems' => $totalItems,
'totalPages' => $totalPages,
'currentPage' => $page,
'imagelink' => $imagelink
/* $propertySearch=new PropertySearch();
$agendas=$agendaRepository->findBy(['statut'=>1]);
$agenda=[];
$pagination=$paginator->paginate($agendas, $request->query->getInt('page',1),4);
$form=$this->createForm(PropertySearchType::class, $propertySearch);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$title=$propertySearch->getTitle();
if ($title!="")
$agenda=$agendaRepository->findBy(['title'=>$title]);
else
$pagination=$paginator->paginate($agendas, $request->query->getInt('page',1),4);
}
return $this->render('menu/agenda.html.twig', [
'menus' => $menuRepository->findAll(),
'pagination'=>$pagination,
'form'=>$form->createView(),
'agenda'=>$agendas,
'imagelink'=>$imagelink */
]);
}
/* #[Route('/histoire', name: 'app_sousmenu2_histoire', methods: ['GET'])]
public function histoire(MenuRepository $menuRepository, SousmenuRepository $sousmenuRepository, Sousmenu2Repository $sousmenu2Repository): Response
{
$sousmenu2=$sousmenu2Repository->findOneBy(['path' => 'app_sousmenu2_histoire']);
return $this->render('sousmenu2/histoire.html.twig', [
'menus'=>$menuRepository->findAll(),
'sousmenu'=>$sousmenuRepository->findAll(),
'sousmenu2'=>$sousmenu2,
]);
} */
#[Route('/decouverte', name: 'app_menu_decouverte', methods: ['GET'])]
public function decouverte(MenuRepository $menuRepository): Response
{$imagelink=null;
return $this->render('menu/decouverte.html.twig', [
'menus' => $menuRepository->findBy(array(),
array('position'=>'ASC')),
'imagelink'=>$imagelink
]);
}
#[Route('/boutique', name: 'app_menu_boutique', methods: ['GET'])]
public function boutique(MenuRepository $menuRepository): Response
{$imagelink=null;
return $this->render('menu/boutique.html.twig', [
'menus' => $menuRepository->findBy(array(),
array('position'=>'ASC')),
'imagelink'=>$imagelink
]);
}
#[Route('/contact', name: 'app_menu_contact', methods: ['GET'])]
public function contact(MenuRepository $menuRepository): Response
{$imagelink=null;
return $this->render('menu/contact.html.twig', [
'menus' => $menuRepository->findBy(array(),
array('position'=>'ASC')),
'imagelink'=>$imagelink
]);
}
/* #[Route('/contact', name: 'app_menu_contact')]
public function contact(MenuRepository $menuRepository, Request $request, MailerInterface $mailer, EntityManagerInterface $entityManagerInterface): Response
{
$contact=new Contact();
$form=$this->createForm(ContactType::class, $contact);
if($request->isMethod('POST')){
$form->handleRequest($request);
if($form->isSubmitted()&&$form->isValid()){
$email=(new TemplatedEmail())
->from($contact->getEmail())
->to('christpardonne01@gmail.com')
->subject($contact->getObject())
->htmlTemplate('emails/email.html.twig')
->context([
'name'=>$contact->getName(),
'object'=>$contact->getObject(),
'message'=>$contact->getMessage()
]);
$entityManagerInterface->persist($contact);
$entityManagerInterface->flush();
$mailer->send($email);
$this->addFlash('notice','Message envoyé');
return $this->redirectToRoute('contact');
}
}
return $this->render('menu/contact.html.twig', [
'menus' => $menuRepository->findAll(),
'form'=>$form->createView()
]);
} */
#[Route('/{id}/edit', name: 'app_menu_edit', methods: ['GET', 'POST'])]
public function edit(FileUploader $fileUploader,ValidatorInterface $validator, Request $request, MenuRepository $menuRepository, Menu $menu): Response
{
$submit = $request->request->get('submit');
//dd($menu);
//$oldphoto = $menu->getImage();
//$oldvideo = $menu->getVideo();
$errors = null;
if ($submit) {
/* if($menu->getImage()!=null){
$oldphoto = $menu->getImage();
}
if($menu->getVideo()!=null){
$oldvideo = $menu->getVideo();
} */
$menu->setTitle($request->request->get('title'));
$menu->setPath($request->request->get('path'));
$menu->setContent($request->request->get('observation'));
$menu->setStatut($request->request->get('statut'));
$menu->setPosition($request->request->get('position'));
$tab = null;
$tabvid = null;
if ($request->files->get('file')) {
// $FileName = $fileUploader->upload($request->files->get('file'));
foreach ($request->files->get('file') as $value) {
$FileName = $fileUploader->upload($value);
$tab[] = $FileName;
}
$menu->setImage($tab);
}
/* else {
if ($menu->getImage()) {
foreach ($oldphoto as $value) {
$tab[] = $value;
}
$menu->setImage($tab);
}
} */
if ($request->files->get('video')) {
foreach ($request->files->get('video') as $value) {
$FileName = $fileUploader->upload($value);
$tabvid[] = $FileName;
}
$menu->setVideo($tabvid);
}
/* else {
if ($menu->getVideo()) {
foreach ($oldvideo as $value) {
$tabvid[] = $value;
}
$menu->setVideo($tabvid);
}
} */
$errors = $validator->validate($menu);
if (count($errors) > 0) {
$errorsString = (string) $errors;
} else {
$this->em->persist($menu);
$this->em->flush();
return $this->redirectToRoute('app_menu_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('menu/edit.html.twig', [
'idMenu'=>$menu->getId(),
'menus' => $menuRepository->findAll(),
'errors' => $errors,
'menu'=>$menu,
]);
}
#[Route('menu/supprimer/{id}', name: 'app_menu_delete', methods: ['POST'])]
public function delete(Request $request, Menu $menu, MenuRepository $menuRepository): Response
{
//dd( $menu);
if ($this->isCsrfTokenValid('delete'.$menu->getId(), $request->request->get('_token'))) {
$this->em->remove($menu);
$this->em->flush();
}
return $this->redirectToRoute('app_menu_index', [], Response::HTTP_SEE_OTHER);
}
}