<?php
namespace App\Controller;
use App\Entity\Sio;
use App\Entity\SioRti;
use App\Entity\Vehicle;
use App\Repository\InfoRepository;
use App\Repository\MakeRepository;
use App\Repository\SectionRepository;
use App\Repository\SioRepository;
use App\Repository\SubSectionRepository;
use App\Repository\VehicleRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class VehicleController extends AbstractController
{
#[Route('/{makeName}/{vehicleName}/{year}')]
public function index(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, string $makeName,
string $vehicleName, int $year): Response
{
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => null, 'name' => $vehicle->getModelDesc()],
];
return $this->render('vehicle/index.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'books_and_sections' => $vehicleRepo->getBooksAndSections($vehicle),
'breadcrumbs' => $breadcrumbs,
'showDtc' => $vehicleRepo->hasDtc($vehicle),
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/bulletins')]
public function bulletins(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, string $makeName,
string $vehicleName, int $year): Response
{
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => null, 'name' => 'Bulletins'],
];
return $this->render('vehicle/bulletins.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'bulletins' => $vehicleRepo->getBulletins($vehicle),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/dtc')]
public function dtcs(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, string $makeName,
string $vehicleName, int $year): Response
{
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => null, 'name' => 'DTC'],
];
return $this->render('vehicle/dtcs.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'dtcs' => $vehicleRepo->getDtcs($vehicle),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/dtc/{cellId}')]
public function dtc(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, InfoRepository $infoRepository,
string $makeName,
string $vehicleName, int $year, int $cellId): Response
{
/** @var SioRti $info */
$info = $infoRepository->findOneBy(['cell' => $cellId]);
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => $vehicle->getSeoUrl().'/dtc', 'name' => 'DTC'],
['url' => null, 'name' => $info->getPsdSieTitleDesc()],
];
return $this->render('vehicle/info.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'title' => $info->getPsdSieTitleDesc(),
'documents' => $vehicleRepo->getContentCellId($vehicle, $cellId),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/bulletins/{infoId}')]
public function bulletin(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, SioRepository $infoRepository,
string $makeName, string $vehicleName, int $year, int $infoId): Response
{
/** @var Sio $info */
$info = $infoRepository->findOneBy(['infoId' => $infoId]);
if (!$info) {
return $this->render('404.html.twig', ['breadcrumbs' => []]);
}
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => $vehicle->getSeoUrl().'/bulletins', 'name' => 'Bulletins'],
['url' => null, 'name' => $info->getRefDesc()],
];
return $this->render('vehicle/bulletin.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'title' => $info->getRefDesc(),
'document' => $vehicleRepo->getBulletinContent($vehicle, $infoId),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/doc/{infoId}')]
public function docInfo(MakeRepository $makeRepo, VehicleRepository $vehicleRepo, SioRepository $infoRepository,
string $makeName, string $vehicleName, int $year, int $infoId): Response
{
/** @var Sio $info */
$info = $infoRepository->findOneBy(['infoId' => $infoId]);
if (!$info) {
return $this->render('404.html.twig', ['breadcrumbs' => []]);
}
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => null, 'name' => $info->getRefDesc()],
];
return $this->render('vehicle/bulletin.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'title' => $info->getRefDesc(),
'document' => $vehicleRepo->getDocContent($vehicle, $infoId),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/{bookId}/{sectionId}')]
public function subsections(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, SectionRepository $secRepo,
string $makeName, string $vehicleName, int $year, int $bookId,
int $sectionId): Response
{
$section = $secRepo->getSection($sectionId, $bookId);
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => null, 'name' => $section->getCompSecTitle()],
];
return $this->render('vehicle/subsections.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'section' => $section,
'subsections' => $vehicleRepo->getSubsections($vehicle, $section),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/{bookId}/{sectionId}/{mspsdId}')]
public function getCellList(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, SectionRepository $secRepo,
SubSectionRepository $subSecRepo,
string $makeName, string $vehicleName, int $year, int $bookId,
int $sectionId, int $mspsdId): Response
{
$section = $secRepo->getSection($sectionId, $bookId);
$subSecRepo = $subSecRepo->getSubSection($sectionId, $bookId, $mspsdId);
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => $vehicle->getSeoUrl().'/'.$bookId.'/'.$sectionId, 'name' => $section->getCompSecTitle()],
['url' => null, 'name' => $subSecRepo->getCompSubsecTitle()],
];
return $this->render('vehicle/info-list.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'section' => $section,
'cellGroup' => $vehicleRepo->getCellList($vehicle, $section, $mspsdId),
'breadcrumbs' => $breadcrumbs,
]);
}
#[Route('/{makeName}/{vehicleName}/{year}/{bookId}/{sectionId}/{mspsdId}/{cellId}')]
public function getCell(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, InfoRepository $infoRepository,
SubSectionRepository $subSecRepo,
SectionRepository $secRepo, string $makeName, string $vehicleName, int $year, int $bookId,
int $sectionId, int $mspsdId, int $cellId): Response
{
/** @var SioRti $info */
$info = $infoRepository->findOneBy(['cell' => $cellId]);
if (!$info) {
return $this->render('404.html.twig', ['breadcrumbs' => []]);
}
$section = $secRepo->getSection($sectionId, $bookId);
$subSecRepo = $subSecRepo->getSubSection($sectionId, $bookId, $mspsdId);
$vehicle = $this->getVehicle($vehicleRepo, $makeRepo, $makeName, $vehicleName, $year);
$breadcrumbs = [
['url' => '/', 'name' => 'Makes'],
['url' => '/'. $makeName, 'name' => $makeName],
['url' => '/'. $makeName.'/'.$year, 'name' => $year],
['url' => $vehicle->getSeoUrl(), 'name' => $vehicle->getModelDesc()],
['url' => $vehicle->getSeoUrl().'/'.$bookId.'/'.$sectionId, 'name' => $section->getCompSecTitle()],
['url' => $vehicle->getSeoUrl().'/'.$bookId.'/'.$sectionId.'/'.$mspsdId, 'name' => $subSecRepo->getCompSubsecTitle()],
['url' => null, 'name' => $info->getPsdSieTitleDesc()],
];
return $this->render('vehicle/info.html.twig', [
'controller_name' => 'VehicleController',
'vehicle' => $vehicle,
'section' => $section,
'title' => $info->getPsdSieTitleDesc(),
'documents' => $vehicleRepo->getContentCellId($vehicle, $cellId, $bookId, $sectionId, $mspsdId),
'breadcrumbs' => $breadcrumbs,
]);
}
private function getVehicle(VehicleRepository $vehicleRepo, MakeRepository $makeRepo, string $makeName,
string $vehicleName, int $year): Vehicle
{
$make = $makeRepo->findOneBy(['seoUrl' => $makeName]);
$vehicle = $vehicleRepo->findOneBy([
'mktgDiv' => $make->getMktgDivId(),
'seoUrl' => $vehicleName,
'modelYear' => $year,
]);
return $vehicle;
}
}