src/Controller/CaseStudiesDefaultController.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CaseStudies;
  4. use App\Annotation\CmsComponent;
  5. use App\Service\ServiceController;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Knp\Component\Pager\PaginatorInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. class CaseStudiesDefaultController extends AbstractController
  13. {
  14. public function __construct(private readonly ServiceController $serviceController) {}
  15. /**
  16. * @CmsComponent("Embed CaseStudies", active=true, routeName="embed_casestudies")
  17. */
  18. #[Route(path: '/pcgc-casestudies', name: 'embed_casestudies')]
  19. public function embedCaseStudies(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
  20. {
  21. $perpage = 10;
  22. $now = new \DateTime();
  23. if ($this->isGranted('ROLE_ADMIN')) {
  24. $query = $em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0');
  25. } else {
  26. $query = $em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0 AND e.active = 1 AND e.createdAt <= :now ORDER BY e.createdAt DESC')
  27. ->setParameter('now', $now);
  28. }
  29. $paginatedCaseStudies = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
  30. return $this->render('@theme/casestudies/casestudies.html.twig', [
  31. 'studies' => $paginatedCaseStudies,
  32. ]);
  33. }
  34. /**
  35. * @CmsComponent("Embed CaseStudy Article", slug="{casestudy_slug}", slugEntity="CaseStudies", active=true, routeName="embed_casestudy")
  36. */
  37. #[Route(path: '/pcgc-casestudy/{casestudy_slug}', name: 'embed_casestudy')]
  38. public function embedCaseStudy(Request $request, EntityManagerInterface $em, $casestudy_slug): Response
  39. {
  40. if ($this->isGranted('ROLE_ADMIN')) {
  41. $caseStudy = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $casestudy_slug, 'deleted' => 0]);
  42. } else {
  43. $caseStudy = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $casestudy_slug, 'deleted' => 0, 'active' => 1]);
  44. }
  45. if (!$caseStudy) {
  46. return $this->serviceController->componentRedirect('/case-study-not-found');
  47. }
  48. return $this->render('@theme/casestudies/casestudy.html.twig', [
  49. 'study' => $caseStudy,
  50. ]);
  51. }
  52. /**
  53. * @CmsComponent("Embed Featured Case Studies", active=true, routeName="embed_featured_casestudies")
  54. */
  55. #[Route(path: '/pcgc-casestudies/featured', name: 'embed_featured_casestudies')]
  56. public function embedFeaturedCasestudies(Request $request, EntityManagerInterface $em): \Symfony\Component\HttpFoundation\Response
  57. {
  58. $studies = $em->getRepository(CaseStudies::class)->findBy(['featured' => true]);
  59. return $this->render('@theme/casestudies/featured.html.twig', [
  60. 'studies' => $studies,
  61. ]);
  62. }
  63. }