<?php
namespace App\Controller;
use App\Entity\Achievement;
use App\Entity\Category;
use App\Entity\Contact;
use App\Entity\Expertise;
use App\Entity\Homepage;
use App\Entity\LandingPage;
use App\Entity\Post;
use App\Entity\Presentation;
use App\Entity\Product;
use App\Form\ContactType;
use App\Repository\AchievementRepository;
use App\Repository\CategoryRepository;
use App\Repository\ExpertiseRepository;
use App\Repository\HomepageRepository;
use App\Repository\LandingPageRepository;
use App\Repository\PostRepository;
use App\Repository\PresentationRepository;
use App\Repository\ProductRepository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Pagerfanta\Doctrine\ORM\QueryAdapter;
use Pagerfanta\Pagerfanta;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class FrontController extends AbstractController
{
/** @var ManagerRegistry */
private $em;
public function __construct(ManagerRegistry $em)
{
$this->em = $em;
}
/**
* @Route("/", name="app_homepage")
*/
public function index(HomepageRepository $homepageRepository, PostRepository $postRepository, LandingPageRepository $landingPageRepository): Response
{
$page = $homepageRepository->findUnique();
$posts = $postRepository->findPromotedOrRecentPosts(2);
$landingPages = $landingPageRepository->findBy(['displayHomepage' => true]);
return $this->render('front/index.html.twig', array(
'page' => $page,
'posts' => $posts,
"landingPages" => $landingPages
));
}
/**
* @Route("/realisation-pelletier/{slug}", name="app_achievement_show")
*/
public function showAchievement(Request $request, Achievement $achievement): Response
{
return $this->render('front/Achievement/show.html.twig', array('page' => $achievement));
}
/**
* @Route("/realisations-pelletier/{page}", name="app_achievement_list", requirements={"page"="\d+"}, defaults={"page": 1})
*/
public function listAchievements(Request $request, $page): Response
{
/** @var AchievementRepository $repo */
$repo = $this->em->getRepository(Achievement::class);
$achievements = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')->addOrderBy('e.position', 'ASC')->addOrderBy('e.updatedAt', 'DESC')));
$achievements->setMaxPerPage(13);
$achievements->setCurrentPage($page);
return $this->render('front/Achievement/list.html.twig', array('achievements' => $achievements));
}
/**
* @Route("/categorie/{slug}", name="app_category_show")
*/
public function showCategory(Request $request, Category $category, PostRepository $postRepository): Response
{
$posts = $postRepository->findBy([], ['date' => 'DESC'], 2);
return $this->render('front/Category/show.html.twig', array(
'page' => $category,
'posts' => $posts,
));
}
/**
* @Route("/categorie/{page}", name="app_category_list", requirements={"page"="\d+"}, defaults={"page": 1})
*/
public function listCategorys(Request $request, $page): Response
{
/** @var CategoryRepository $repo */
$repo = $this->em->getRepository(Category::class);
$categorys = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')->orderBy('e.date', 'DESC')));
$categorys->setMaxPerPage(6);
$categorys->setCurrentPage($page);
return $this->render('front/Category/list.html.twig', array('categorys' => $categorys));
}
/**
* @Route("/actualite/detail/{slug}", name="app_post_show")
*/
public function showPost(Request $request, Post $post): Response
{
return $this->render('front/Post/show.html.twig', array('page' => $post));
}
/**
* @Route("/actualite/{page}", name="app_post_list", requirements={"page"="\d+"}, defaults={"page": 1})
*/
public function listPosts(Request $request, $page): Response
{
/** @var PostRepository $repo */
$repo = $this->em->getRepository(Post::class);
$posts = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')));
$posts->setMaxPerPage(6);
$posts->setCurrentPage($page);
return $this->render('front/Post/list.html.twig', array('posts' => $posts));
}
/**
* @Route("/produit/{slug}", name="app_product_show")
*/
public function showProduct(Request $request, Product $product): Response
{
return $this->render('front/Product/show.html.twig', array('page' => $product));
}
/**
* @Route("/produits/{page}", name="app_product_list", requirements={"page"="\d+"}, defaults={"page": 1})
*/
public function listProducts(Request $request, $page): Response
{
/** @var ProductRepository $repo */
$repo = $this->em->getRepository(Product::class);
$products = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')));
$products->setMaxPerPage(6);
$products->setCurrentPage($page);
return $this->render('front/Product/list.html.twig', array('products' => $products));
}
/**
* @Route("/pelletier-enseignes", name="app_presentation_index")
*/
public function presentation(Request $request): Response
{
/** @var PresentationRepository $repo */
$repo = $this->em->getRepository(Presentation::class);
$page = $repo->findUnique();
return $this->render('front/Presentation/index.html.twig', array('page' => $page));
}
/**
* @Route("/fabrication-enseignes", name="app_expertise_index")
*/
public function expertise(Request $request): Response
{
/** @var ExpertiseRepository $repo */
$repo = $this->em->getRepository(Expertise::class);
$page = $repo->findUnique();
return $this->render('front/Expertise/index.html.twig', array('page' => $page));
}
/**
* @Route("/page/{slug}", name="app_landing_page_show")
*/
public function showLandingPage(Request $request, LandingPage $landingPage): Response
{
return $this->render('front/LandingPage/show.html.twig', array('page' => $landingPage));
}
/**
* @Route("/pages/{page}", name="app_landing_page_list", requirements={"page"="\d+"}, defaults={"page": 1})
*/
public function listLandingPages(Request $request, $page): Response
{
/** @var LandingPageRepository $repo */
$repo = $this->em->getRepository(LandingPage::class);
$landingPages = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')));
$landingPages->setMaxPerPage(6);
$landingPages->setCurrentPage($page);
return $this->render('front/LandingPage/list.html.twig', array('landingPages' => $landingPages));
}
/**
* @Route("/contact", name="app_contact_show")
*/
public function showContact(Request $request, EntityManagerInterface $em): Response
{
$contact = new Contact;
$form = $this->createForm(ContactType::class, $contact);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contact->setCreatedAt(new \DateTime());
$em->persist($contact);
$em->flush();
$this->addFlash('success', 'Merci nous avons reçu votre demande. Nous vous répondrons dans les plus brefs délais.');
}
return $this->render('front/Contact/show.html.twig', array(
'form' => $form->createView(),
));
}
}