src/Controller/CaseStudiesDefaultController.php line 69

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CaseStudies;
  4. use App\Entity\Testimonial;
  5. use App\Annotation\CmsComponent;
  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 EntityManagerInterface $em, private PaginatorInterface $paginator)
  15. {
  16. }
  17. /**
  18. * @CmsComponent("Embed CaseStudies", active=true, routeName="embed_casestudies")
  19. */
  20. #[Route(path: '/tlb-casestudies', name: 'embed_casestudies')]
  21. public function embedCaseStudies(Request $request): Response
  22. {
  23. $perpage = 12;
  24. $query = $this->em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0 AND e.active = 1');
  25. $paginatedCaseStudies = $this->paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
  26. return $this->render('@theme/casestudies/casestudies.html.twig', [
  27. 'studies' => $paginatedCaseStudies,
  28. ]);
  29. }
  30. /**
  31. * @CmsComponent("Featured Case Study", active=true, routeName="embed_casestudies_featured")
  32. *
  33. * @param mixed $request
  34. */
  35. #[Route(path: '/tlb-casestudies/featured', name: 'embed_casestudies_featured')]
  36. public function embedFeaturedCaseStudy(Request $request): Response
  37. {
  38. $study = $this->em->getRepository(CaseStudies::class)->findLastestFeatured();
  39. return $this->render('@theme/casestudies/featured_casestudy.html.twig', [
  40. 'study' => $study,
  41. ]);
  42. }
  43. /**
  44. * @CmsComponent("Embed Featured Testimonial Slider", active=true, routeName="embed_testimonial_slider")
  45. */
  46. #[Route(path: '/tlb-testimonials-slider', name: 'embed_testimonial_slider')]
  47. public function embedTestimonialSlider(Request $request): Response
  48. {
  49. $testimonials = $this->em->getRepository(Testimonial::class)->findBy(['active' => true, 'deleted' => false, 'featured' => true], ['sortOrder' => 'ASC']);
  50. return $this->render('@theme/casestudies/testimonial_slider.html.twig', [
  51. 'testimonials' => $testimonials,
  52. ]);
  53. }
  54. /**
  55. * @CmsComponent("Embed Testimonials", active=true, routeName="embed_testimonials")
  56. */
  57. #[Route(path: '/tlb-testimonials', name: 'embed_testimonials')]
  58. public function embedTestimonialPage(Request $request): Response
  59. {
  60. $testimonials = $this->em->getRepository(Testimonial::class)->findBy(['active' => true, 'deleted' => false], ['sortOrder' => 'ASC']);
  61. return $this->render('@theme/casestudies/testimonials.html.twig', [
  62. 'testimonials' => $testimonials,
  63. ]);
  64. }
  65. /**
  66. * @CmsComponent("Single Case Study", slug="{caseStudy_slug}", slugEntity="CaseStudies", active=true, routeName="embed_casestudy_content")
  67. */
  68. #[Route('/tlb-casestudies/content/{caseStudy_slug}', name: 'embed_casestudy_content')]
  69. public function embedCaseStudyContent(mixed $caseStudy_slug): Response
  70. {
  71. $prev = $next = null;
  72. $study = $this->em->getRepository(CaseStudies::class)->findBySlugWithGallery($caseStudy_slug);
  73. if (!$study) {
  74. return new Response('Not Found');
  75. }
  76. $next = $this->em->getRepository(CaseStudies::class)->findNextPublished($study);
  77. $prev = $this->em->getRepository(CaseStudies::class)->findLastPublished($study);
  78. return $this->render('@theme/casestudies/casestudy.html.twig', [
  79. 'study' => $study,
  80. 'prev' => $prev,
  81. 'next' => $next,
  82. ]);
  83. }
  84. }