src/Controller/CaseStudiesDefaultController.php line 69

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. if ($this->isGranted('ROLE_ADMIN')) {
  23. $query = $em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0');
  24. } else {
  25. $query = $em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0 AND e.active = 1');
  26. }
  27. $paginatedCaseStudies = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
  28. return $this->render('@theme/casestudies/casestudies.html.twig', [
  29. 'studies' => $paginatedCaseStudies,
  30. ]);
  31. }
  32. /**
  33. * @CmsComponent("Embed CaseStudy Article", slug="{casestudy_slug}", slugEntity="CaseStudies", active=true, routeName="embed_casestudy")
  34. */
  35. #[Route(path: '/pcgc-casestudy/{casestudy_slug}', name: 'embed_casestudy')]
  36. public function embedCaseStudy(Request $request, EntityManagerInterface $em, $casestudy_slug): Response
  37. {
  38. if ($this->isGranted('ROLE_ADMIN')) {
  39. $caseStudy = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $casestudy_slug, 'deleted' => 0]);
  40. } else {
  41. $caseStudy = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $casestudy_slug, 'deleted' => 0, 'active' => 1]);
  42. }
  43. if (!$caseStudy) {
  44. return $this->serviceController->componentRedirect('/case-study-not-found');
  45. }
  46. return $this->render('@theme/casestudies/casestudy.html.twig', [
  47. 'study' => $caseStudy,
  48. ]);
  49. }
  50. /**
  51. * @CmsComponent("Embed Featured Case Studies", active=true, routeName="embed_featured_casestudies")
  52. */
  53. #[Route(path: '/pcgc-casestudies/featured', name: 'embed_featured_casestudies')]
  54. public function embedFeaturedCasestudies(Request $request, EntityManagerInterface $em): \Symfony\Component\HttpFoundation\Response
  55. {
  56. $studies = $em->getRepository(CaseStudies::class)->findBy(['featured' => true]);
  57. return $this->render('@theme/casestudies/featured.html.twig', [
  58. 'studies' => $studies,
  59. ]);
  60. }
  61. }