<?php
namespace App\Controller;
use App\Entity\CaseStudies;
use App\Entity\Testimonial;
use App\Annotation\CmsComponent;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class CaseStudiesDefaultController extends AbstractController
{
public function __construct(private EntityManagerInterface $em, private PaginatorInterface $paginator)
{
}
/**
* @CmsComponent("Embed CaseStudies", active=true, routeName="embed_casestudies")
*/
#[Route(path: '/tlb-casestudies', name: 'embed_casestudies')]
public function embedCaseStudies(Request $request): Response
{
$perpage = 12;
$query = $this->em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0 AND e.active = 1');
$paginatedCaseStudies = $this->paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
return $this->render('@theme/casestudies/casestudies.html.twig', [
'studies' => $paginatedCaseStudies,
]);
}
/**
* @CmsComponent("Featured Case Study", active=true, routeName="embed_casestudies_featured")
*
* @param mixed $request
*/
#[Route(path: '/tlb-casestudies/featured', name: 'embed_casestudies_featured')]
public function embedFeaturedCaseStudy(Request $request): Response
{
$study = $this->em->getRepository(CaseStudies::class)->findLastestFeatured();
return $this->render('@theme/casestudies/featured_casestudy.html.twig', [
'study' => $study,
]);
}
/**
* @CmsComponent("Embed Testimonial Slider", active=true, routeName="embed_testimonial_slider")
*/
#[Route(path: '/tlb-testimonials', name: 'embed_testimonial_slider')]
public function embedTestimonialSlider(Request $request): Response
{
$testimonials = $this->em->getRepository(Testimonial::class)->findBy(['active' => true, 'deleted' => false], ['sortOrder' => 'ASC']);
return $this->render('@theme/casestudies/testimonial_slider.html.twig', [
'testimonials' => $testimonials,
]);
}
/**
* @CmsComponent("Single Case Study", slug="{caseStudy_slug}", slugEntity="CaseStudies", active=true, routeName="embed_casestudy_content")
*/
#[Route('/tlb-casestudies/content/{caseStudy_slug}', name: 'embed_casestudy_content')]
public function embedCaseStudyContent(mixed $caseStudy_slug): Response
{
$prev = $next = null;
$study = $this->em->getRepository(CaseStudies::class)->findBySlugWithGallery($caseStudy_slug);
if (!$study) {
return new Response('Not Found');
}
$next = $this->em->getRepository(CaseStudies::class)->findNextPublished($study);
$prev = $this->em->getRepository(CaseStudies::class)->findLastPublished($study);
return $this->render('@theme/casestudies/casestudy.html.twig', [
'study' => $study,
'prev' => $prev,
'next' => $next,
]);
}
}