<?php
namespace App\Controller;
use App\Annotation\CmsComponent;
use App\Entity\News;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class NewsDefaultController extends AbstractController
{
/**
* @CmsComponent("All News Articles", active=true, routeName="embed_news_overview")
*
* @param mixed $request
*/
#[Route(path: '/test-news/overview', name: 'embed_news_overview')]
public function embedNewsOverview(EntityManagerInterface $em, PaginatorInterface $paginator, Request $request): Response
{
$perpage = 9;
$query = $em->createQuery('SELECT e FROM App:News e WHERE e.deleted = 0 AND e.active = 1 AND e.publishDate <= :now ORDER BY e.publishDate DESC')->setParameter('now', new \DateTime());
$paginatedNews = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
return $this->render('@theme/news/embedNewsOverview.html.twig', [
'articles' => $paginatedNews,
]);
}
/**
* @CmsComponent("Featured News Article", active=true, routeName="embed_news_featured")
*
* @param mixed $request
*/
#[Route(path: '/test-news/featured', name: 'embed_news_featured')]
public function embedFeaturedNewsArticle(EntityManagerInterface $em, Request $request): Response
{
$article = $em->getRepository(News::class)->findLastestFeatured();
return $this->render('@theme/news/embedFeaturedNewsArticle.html.twig', [
'article' => $article,
]);
}
/**
* @CmsComponent("Single News Article", slug="{news_slug}", slugEntity="News", active=true, routeName="embed_news_article")
*
* @param mixed $request
*/
#[Route(path: '/test-news/{news_slug}', name: 'embed_news_article')]
public function embedNewsArticle(EntityManagerInterface $em, Request $request, mixed $news_slug)
{
$prev = $next = null;
$news = $em->getRepository(News::class)->findOneBy(['slug' => $news_slug, 'deleted' => false, 'active' => true]);
if (!$news && $this->getParameter('multilingual')) {
$news = $em->getRepository(News::class)->findSlugWithLocale($news_slug, $request->getLocale());
if (!$news) {
return new Response('Not Found');
}
}
$now = new \DateTime();
if (!$news || $news->getPublishDate() > $now) {
return new Response('Not Found');
}
$next = $em->getRepository(News::class)->findNextPublished($news->getPublishDate());
$prev = $em->getRepository(News::class)->findLastPublished($news->getPublishDate());
return $this->render('@theme/news/embedNewsArticle.html.twig', [
'news' => $news,
'prev' => $prev,
'next' => $next,
]);
}
}