<?php
namespace App\Controller;
use App\Entity\Page;
use App\Entity\Value;
use App\Entity\Client;
use App\Entity\Sector;
use App\Entity\History;
use App\Entity\Service;
use App\Entity\Vacancy;
use App\Entity\CaseStudies;
use App\Entity\Testimonial;
use App\Entity\Accreditation;
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 FrontEndDefaultController extends AbstractController
{
// /**
// * @CmsComponent("Embed Home Featured Pages", active=true, routeName="embed_home_featured_pages")
// */
// #[Route(path: '/pcgc-home-featured-pages', name: 'embed_home_featured_pages')]
// public function embedHomeFeaturedPages(Request $request, EntityManagerInterface $em): Response
// {
// $pages = $em->getRepository(Page::class)->findBy(
// ['deleted' => false, 'active' => true, 'featured' => true],
// ['sortOrder' => 'ASC'],
// 3, 0
// );
// return $this->render('@theme/pages/featured.html.twig', [
// 'pages' => $pages,
// ]);
// }
// /**
// * @CmsComponent("Embed Footer Featured Pages", active=true, routeName="embed_footer_featured_pages")
// */
// #[Route(path: '/pcgc-footer-featured-pages', name: 'embed_footer_featured_pages')]
// public function embedFooterFeaturedPages(Request $request, EntityManagerInterface $em): Response
// {
// $pages = $em->getRepository(Page::class)->findBy(
// ['deleted' => false, 'active' => true, 'footerFeatured' => true],
// ['sortOrder' => 'ASC'],
// 3, 0
// );
// return $this->render('@theme/pages/featured-footer.html.twig', [
// 'pages' => $pages,
// ]);
// }
/**
* @CmsComponent("Embed Featured Sectors", active=true, routeName="embed_featured_sectors")
*/
#[Route(path: '/pcgc-featured-sectors', name: 'embed_featured_sectors')]
public function embedFeaturedSectors(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
$perpage = 12;
$query = $em->createQuery('SELECT s FROM App:Sector s WHERE s.deleted = 0 AND s.active = 1 AND s.featured = 1 AND s.parent IS NULL ORDER BY s.sortOrder ASC');
$paginatedResults = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
return $this->render('@theme/sectors/featured.html.twig', [
'sectors' => $paginatedResults,
]);
}
/**
* @CmsComponent("Embed Sectors", active=true, routeName="embed_sectors")
*/
#[Route(path: '/pcgc-sectors', name: 'embed_sectors')]
public function embedSectors(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
$perpage = 12;
$query = $em->createQuery('SELECT s FROM App:Sector s WHERE s.deleted = 0 AND s.active = 1 AND s.parent IS NULL ORDER BY s.sortOrder ASC');
$paginatedResults = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
return $this->render('@theme/sectors/index.html.twig', [
'sectors' => $paginatedResults,
]);
}
/**
* @CmsComponent("Embed Sectors (blocks)", active=true, routeName="embed_sectors_blocks")
*/
#[Route(path: '/pcgc-sectors-blocks', name: 'embed_sectors_blocks')]
public function embedSectorBlocks(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
return $this->render('@theme/sectors/blocks.html.twig', [
'sectors' => $em->getRepository(Sector::class)->findBy(['deleted' => false, 'active' => true, 'parent' => null], ['sortOrder' => 'ASC'])
]);
}
/**
* @CmsComponent("Embed Sector", slug="{sector_slug}", slugEntity="Sector", active=true, routeName="embed_sector")
*/
#[Route(path: '/pcgc-sectors/{sector_slug}', name: 'embed_sector')]
public function embedSector(EntityManagerInterface $em, Request $request, mixed $sector_slug)
{
$sector = $em->getRepository(Sector::class)->findOneBy(['slug' => $sector_slug, 'deleted' => false, 'active' => true]);
if (! $sector) {
return new Response('Not Found');
}
$sectorForQuery = $sector;
if ($sector->getParent()) {
$sectorForQuery = $sector->getParent();
}
$otherSectors = $em->getRepository(Sector::class)->findBy(['deleted' => false, 'active' => true, 'parent' => $sectorForQuery], ['sortOrder' => 'ASC']);
return $this->render('@theme/sectors/sector.html.twig', [
'sector' => $sector,
'otherSectors' => $otherSectors,
]);
}
/**
* @CmsComponent("Embed Services", active=true, routeName="embed_services")
*/
#[Route(path: '/pcgc-services', name: 'embed_services')]
public function embedServices(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
$perpage = 12;
$query = $em->createQuery('SELECT s FROM App:Service s WHERE s.deleted = 0 AND s.active = 1 AND s.parent IS NULL ORDER BY s.sortOrder ASC');
$paginatedResults = $paginator->paginate($query, $request->query->getInt('page', 1), $perpage);
return $this->render('@theme/services/index.html.twig', [
'services' => $paginatedResults,
]);
}
/**
* @CmsComponent("Embed Service", slug="{service_slug}", slugEntity="Service", active=true, routeName="embed_service")
*/
#[Route(path: '/pcgc-services/{service_slug}', name: 'embed_service')]
public function embedService(EntityManagerInterface $em, Request $request, mixed $service_slug)
{
$service = $em->getRepository(Service::class)->findOneBy(['slug' => $service_slug, 'deleted' => false, 'active' => true]);
if (! $service) {
return new Response('Not Found');
}
$allServices = $em->getRepository(Service::class)->findBy(['deleted' => false, 'active' => true, 'parent' => null], ['sortOrder' => 'ASC']);
return $this->render('@theme/services/service.html.twig', [
'service' => $service,
'allServices' => $allServices,
]);
}
// /**
// * @CmsComponent("Embed Sectors And Service Icons", active=true, routeName="embed_sectors_services_icons")
// */
// #[Route(path: '/pcgc-sectors-services-icons', name: 'embed_sectors_services_icons')]
// public function embedSectorsServicesIcons(EntityManagerInterface $em)
// {
// $sectors = $em->getRepository(Sector::class)->findBy(['deleted' => false, 'active' => true, 'parent' => null], ['sortOrder' => 'ASC']);
// $services = $em->getRepository(Service::class)->findBy(['deleted' => false, 'active' => true, 'parent' => null], ['sortOrder' => 'ASC']);
// return $this->render('@theme/common/sectors-services-icons.html.twig', [
// 'sectors' => $sectors,
// 'services' => $services,
// ]);
// }
// /**
// * @CmsComponent("Embed History", active=true, routeName="embed_history")
// */
// #[Route(path: '/pcgc-history', name: 'embed_history')]
// public function embedHistory(EntityManagerInterface $em)
// {
// $histories = $em->getRepository(History::class)->findBy(['deleted' => false, 'active' => true], ['year' => 'ASC']);
// return $this->render('@theme/history/index.html.twig', [
// 'histories' => $histories,
// ]);
// }
/**
* @CmsComponent("Embed Client Slider", active=true, routeName="embed_client_slider")
*/
#[Route(path: '/pcgc-client-slider', name: 'embed_client_slider')]
public function embedClientSlider(EntityManagerInterface $em)
{
$clients = $em->getRepository(Client::class)->findBy(
[
'deleted' => false,
'active' => true,
'featured' => true
],
[
'sortOrder' => 'ASC'
]
);
return $this->render('@theme/clients/slider.html.twig', [
'clients' => $clients,
]);
}
// /**
// * @CmsComponent("Embed Value Slider", active=true, routeName="embed_value_slider")
// */
// #[Route(path: '/pcgc-value-slider', name: 'embed_value_slider')]
// public function embedValueSlider(EntityManagerInterface $em)
// {
// $values = $em->getRepository(Value::class)->findBy(
// [
// 'deleted' => false,
// 'active' => true,
// ],
// [
// 'sortOrder' => 'ASC'
// ]
// );
// return $this->render('@theme/values/slider.html.twig', [
// 'values' => $values,
// ]);
// }
// /**
// * @CmsComponent("Embed Vacancy Sidebar Menu", active=true, routeName="embed_vacancy_sidebar_menu")
// */
// #[Route(path: '/pcgc-vacancy-sidebar-menu', name: 'embed_vacancy_sidebar_menu')]
// public function embedVacancySidebarMenu(Request $request, EntityManagerInterface $em)
// {
// $pieces = explode('/', $request->getPathInfo());
// $vacancies = $em->getRepository(Vacancy::class)->findBy(
// [
// 'deleted' => false,
// 'active' => true,
// ],
// [
// 'sortOrder' => 'ASC'
// ]
// );
// return $this->render('@theme/vacancy/sidebar-menu.html.twig', [
// 'vacancies' => $vacancies,
// 'current' => end($pieces)
// ]);
// }
// /**
// * @CmsComponent("Embed Vacancy", slug="{vacancy_slug}", slugEntity="Vacancy", active=true, routeName="embed_vacancy")
// */
// #[Route(path: '/pcgc-vacancies/{vacancy_slug}', name: 'embed_vacancy')]
// public function embedVacancy(EntityManagerInterface $em, Request $request, mixed $vacancy_slug)
// {
// $vacancy = $em->getRepository(Vacancy::class)->findOneBy(['slug' => $vacancy_slug, 'deleted' => false, 'active' => true]);
// if (! $vacancy) {
// return new Response('Not Found');
// }
// return $this->render('@theme/vacancy/vacancy.html.twig', [
// 'vacancy' => $vacancy
// ]);
// }
// /**
// * @CmsComponent("Embed Testimonials", active=true, routeName="embed_testimonials")
// */
// #[Route(path: '/pcgc-testimonials', name: 'embed_testimonials')]
// public function embedTestimonials(Request $request, EntityManagerInterface $em)
// {
// $testimonials = $em->getRepository(Testimonial::class)->findBy(
// [
// 'deleted' => false,
// 'active' => true,
// ],
// [
// 'sortOrder' => 'ASC'
// ]
// );
// return $this->render('@theme/testimonials/index.html.twig', [
// 'testimonials' => $testimonials,
// ]);
// }
/**
* @CmsComponent("Embed Featured CaseStudies", active=true, routeName="embed_featured_casestudies")
*/
#[Route(path: '/cms-casestudies-featured', name: 'embed_featured_casestudies')]
public function embedFeaturedCaseStudies(EntityManagerInterface $em): \Symfony\Component\HttpFoundation\Response
{
$studies = $em->getRepository(CaseStudies::class)->findBy(
['deleted' => false, 'active' => true, 'featured' => true],
['sortOrder' => 'ASC'],
3, 0
);
return $this->render('@theme/casestudies/featured_casestudies.html.twig', [
'studies' => $studies,
]);
}
/**
* @CmsComponent("Embed Case Study", slug="{study_slug}", slugEntity="CaseStudies", active=true, routeName="embed_study")
*/
#[Route(path: '/pcgc-casestudies/{study_slug}', name: 'embed_study')]
public function embedCaseStudy(EntityManagerInterface $em, Request $request, mixed $study_slug)
{
$study = $em->getRepository(CaseStudies::class)->findOneBy(['slug' => $study_slug, 'deleted' => false, 'active' => true]);
if (! $study) {
return new Response('Not Found');
}
$next = $em->getRepository(CaseStudies::class)->findNextPublished($study);
$prev = $em->getRepository(CaseStudies::class)->findLastPublished($study);
return $this->render('@theme/casestudies/study.html.twig', [
'study' => $study,
'next' => $next,
'prev' => $prev,
]);
}
/**
* @CmsComponent("Embed Accreditations", active=true, routeName="embed_accreditations")
*/
#[Route(path: '/pcgc-accreditations', name: 'embed_accreditations')]
public function embedAccreditations(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
return $this->render('@theme/accreditations/index.html.twig', [
'accreditations' => $em->getRepository(Accreditation::class)->findBy(['deleted' => false, 'active' => true], ['sortOrder' => 'ASC']),
]);
}
}