<?php
namespace App\Controller;
use App\Entity\CaseStudies;
use App\Annotation\CmsComponent;
use App\Service\ServiceController;
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 readonly ServiceController $serviceController) {}
/**
* @CmsComponent("Embed CaseStudies", active=true, routeName="embed_casestudies")
*/
#[Route(path: '/pcgc-casestudies', name: 'embed_casestudies')]
public function embedCaseStudies(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
$perpage = 10;
if ($this->isGranted('ROLE_ADMIN')) {
$query = $em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0');
} else {
$query = $em->createQuery('SELECT e FROM App:CaseStudies e WHERE e.deleted = 0 AND e.active = 1');
}
$paginatedCaseStudies = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
return $this->render('@theme/casestudies/casestudies.html.twig', [
'studies' => $paginatedCaseStudies,
]);
}
/**
* @CmsComponent("Embed CaseStudy Article", slug="{casestudy_slug}", slugEntity="CaseStudies", active=true, routeName="embed_casestudy")
*/
#[Route(path: '/pcgc-casestudy/{casestudy_slug}', name: 'embed_casestudy')]
public function embedCaseStudy(Request $request, EntityManagerInterface $em, $casestudy_slug): Response
{
if ($this->isGranted('ROLE_ADMIN')) {
$caseStudy = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $casestudy_slug, 'deleted' => 0]);
} else {
$caseStudy = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $casestudy_slug, 'deleted' => 0, 'active' => 1]);
}
if (!$caseStudy) {
return $this->serviceController->componentRedirect('/case-study-not-found');
}
return $this->render('@theme/casestudies/casestudy.html.twig', [
'study' => $caseStudy,
]);
}
/**
* @CmsComponent("Embed Featured Case Studies", active=true, routeName="embed_featured_casestudies")
*/
#[Route(path: '/pcgc-casestudies/featured', name: 'embed_featured_casestudies')]
public function embedFeaturedCasestudies(Request $request, EntityManagerInterface $em): \Symfony\Component\HttpFoundation\Response
{
$studies = $em->getRepository(CaseStudies::class)->findBy(['featured' => true]);
return $this->render('@theme/casestudies/featured.html.twig', [
'studies' => $studies,
]);
}
}