<?php
namespace App\Controller;
use App\Entity\Parking;
use App\Entity\Days;
use App\Entity\DayTime;
use App\Entity\ParkingMatrixRaw;
use App\Form\ParkingType;
use App\Repository\ParkingRepository;
use App\Repository\ParkingMatrixRawRepository;
use App\Repository\DaysRepository;
use App\Repository\DayTimeRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use App\Service\FileUploader;
#[Route('/parking')]
class ParkingController extends AbstractController
{
#[Route('/', name: 'app_parking_index', methods: ['GET'])]
public function index(ParkingRepository $parkingRepository): Response
{
return $this->render('parking/index.html.twig', [
'parkings' => $parkingRepository->findAll(),
]);
}
#[Route('/parking_show_all', name: 'app_parking_show_all', methods: ['GET'])]
public function showAll(ParkingRepository $parkingRepository): Response
{
return $this->render('parking/show_all.html.twig', [
'parkings' => $parkingRepository->findAll(),
]);
}
#[Route('/ncb9dmrzretybd', name: 'app_parking_new', methods: ['GET', 'POST'])]
public function new(Request $request, FileUploader $fileUploader, EntityManagerInterface $entityManager, DayTimeRepository $dayTimeRepository, DaysRepository $daysRepository): Response
{
$parking = new Parking();
$form = $this->createForm(ParkingType::class, $parking);
$form->handleRequest($request);
// Here I set default matrix days x timeslot for a new parking
$days = $daysRepository->findAll();
$dayTime = $dayTimeRepository->findAll();
$matrix = [];
foreach($days as $day) {
$matrix[] = $day;
foreach($dayTime as $timeslot){
$parkingMatrixRaw = new ParkingMatrixRaw();
$parkingMatrixRaw->addDay($day);
$parkingMatrixRaw->addDaytime($timeslot);
$parkingMatrixRaw->setIsparked(false);
$parkingMatrixRaw->addOwner($parking);
$entityManager->persist($parkingMatrixRaw);
$matrix["$day"][] = $parkingMatrixRaw;
}
}
if ($form->isSubmitted() && $form->isValid()) {
/** @var UploadedFile $vehicleFile */
$vehicleFile = $form->get('filename')->getData();
if ($vehicleFile) {
$vehicleFileName = $fileUploader->upload($vehicleFile);
$parking->setFileName($vehicleFileName);
}
// ... persist the $parking variable or any other work
$entityManager->persist($parking);
$entityManager->flush();
return $this->redirectToRoute('app_parking_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('parking/new.html.twig', [
'parking' => $parking,
'form' => $form,
'timeslots' => $dayTimeRepository->findAll(),
'days' => $daysRepository->findAll()
]);
}
#[Route('/{id}', name: 'app_parking_show', methods: ['GET'])]
public function show(Parking $parking, DaysRepository $daysRepository, DayTimeRepository $dayTimeRepository, ParkingMatrixRawRepository $parkingMatrixRawRepository): Response
{
return $this->render('parking/show.html.twig', [
'parking' => $parking,
'timeslots' => $dayTimeRepository->findAll(),
'matrix' => $parkingMatrixRawRepository->findByOwnerId($parking->getId()),
]);
}
#[Route('/{id}/edit', name: 'app_parking_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, DaysRepository $daysRepository, Parking $parking, EntityManagerInterface $entityManager, DayTimeRepository $dayTimeRepository, ParkingMatrixRawRepository $parkingMatrixRawRepository, FileUploader $fileUploader): Response
{
$form = $this->createForm(ParkingType::class, $parking);
$form->handleRequest($request);
$parkingMatrixRaw = $parkingMatrixRawRepository->findByOwnerId($parking->getId());
$oldVehicleFileName = $parking->getFilename();
if ($form->isSubmitted() && $form->isValid()) {
/** @var UploadedFile $heroFile */
$vehicleFile = $form->get('filename')->getData();
if ($vehicleFile) {
$vehicleFileName = $fileUploader->upload($vehicleFile);
if(is_null($oldVehicleFileName) || $vehicleFileName !== $oldVehicleFileName) {
$parking->setFileName($vehicleFileName);
}
}
// ... persist the $parking variable or any other work
$entityManager->persist($parking);
$entityManager->flush();
return $this->redirectToRoute('app_parking_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('parking/edit.html.twig', [
'parking' => $parking,
'form' => $form,
'timeslots' => $dayTimeRepository->findAll(),
'days' => $daysRepository->findAll(),
'matrix' => $parkingMatrixRaw
]);
}
#[Route('/wcfuxx3t7952qf/{id}', name: 'app_parking_delete', methods: ['POST'])]
public function delete(Request $request, Parking $parking, EntityManagerInterface $entityManager): Response
{
foreach($parking->getParkingMatrixRaws() as $record){
$entityManager->remove($record);
$entityManager->flush();
}
if ($this->isCsrfTokenValid('delete'.$parking->getId(), $request->request->get('_token'))) {
$entityManager->remove($parking);
$entityManager->flush();
}
return $this->redirectToRoute('app_parking_index', [], Response::HTTP_SEE_OTHER);
}
}