src/Controller/NewsDefaultController.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Annotation\CmsComponent;
  4. use App\Entity\News;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Knp\Component\Pager\PaginatorInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. class NewsDefaultController extends AbstractController
  12. {
  13. /**
  14. * @CmsComponent("All News Articles", active=true, routeName="embed_news_overview")
  15. *
  16. * @param mixed $request
  17. */
  18. #[Route(path: '/test-news/overview', name: 'embed_news_overview')]
  19. public function embedNewsOverview(EntityManagerInterface $em, PaginatorInterface $paginator, Request $request): Response
  20. {
  21. $perpage = 9;
  22. $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());
  23. $paginatedNews = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
  24. return $this->render('@theme/news/embedNewsOverview.html.twig', [
  25. 'articles' => $paginatedNews,
  26. ]);
  27. }
  28. /**
  29. * @CmsComponent("Featured News Article", active=true, routeName="embed_news_featured")
  30. *
  31. * @param mixed $request
  32. */
  33. #[Route(path: '/test-news/featured', name: 'embed_news_featured')]
  34. public function embedFeaturedNewsArticle(EntityManagerInterface $em, Request $request): Response
  35. {
  36. $article = $em->getRepository(News::class)->findLastestFeatured();
  37. return $this->render('@theme/news/embedFeaturedNewsArticle.html.twig', [
  38. 'article' => $article,
  39. ]);
  40. }
  41. /**
  42. * @CmsComponent("Single News Article", slug="{news_slug}", slugEntity="News", active=true, routeName="embed_news_article")
  43. *
  44. * @param mixed $request
  45. */
  46. #[Route(path: '/test-news/{news_slug}', name: 'embed_news_article')]
  47. public function embedNewsArticle(EntityManagerInterface $em, Request $request, mixed $news_slug)
  48. {
  49. $prev = $next = null;
  50. $news = $em->getRepository(News::class)->findOneBy(['slug' => $news_slug, 'deleted' => false, 'active' => true]);
  51. if (!$news && $this->getParameter('multilingual')) {
  52. $news = $em->getRepository(News::class)->findSlugWithLocale($news_slug, $request->getLocale());
  53. if (!$news) {
  54. return new Response('Not Found');
  55. }
  56. }
  57. $now = new \DateTime();
  58. if (!$news || $news->getPublishDate() > $now) {
  59. return new Response('Not Found');
  60. }
  61. $next = $em->getRepository(News::class)->findNextPublished($news->getPublishDate());
  62. $prev = $em->getRepository(News::class)->findLastPublished($news->getPublishDate());
  63. return $this->render('@theme/news/embedNewsArticle.html.twig', [
  64. 'news' => $news,
  65. 'prev' => $prev,
  66. 'next' => $next,
  67. ]);
  68. }
  69. }