feat: implement screendesign

This commit is contained in:
Björn Fromme
2025-12-06 15:02:33 +01:00
parent b206c3990b
commit bfb1a04ea0
84 changed files with 2807 additions and 2603 deletions
@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace App\Controller\Account;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class IndexController extends AbstractController
{
#[Route('/account', name: 'app_account')]
#[IsGranted('ROLE_USER')]
public function index(): Response
{
return $this->render('account/index.html.twig');
}
}
@@ -1,6 +1,6 @@
<?php
namespace App\Controller;
namespace App\Controller\Account;
use App\BusProNet\ApiClient;
use App\BusProNet\Exception\ApiClientException;
@@ -98,7 +98,7 @@ class PersonalDataController extends AbstractController
return $this->redirectToRoute('app_personal_data');
}
return $this->render('personal_data/index.html.twig', [
return $this->render('account/personal_data.html.twig', [
'personalData' => $personalData,
'personalDataForm' => $personalDataForm->createView(),
]);
@@ -9,6 +9,7 @@ use App\Exception\HotelNotFoundException;
use App\Exception\HotelNotInTravelException;
use App\Exception\NoRoomsAvailableException;
use App\Exception\TravelNotFoundException;
use App\Htmx\HxTrait;
use App\Service\BookingService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
@@ -24,6 +25,8 @@ use Symfony\Component\Routing\Attribute\Route;
*/
class IndexController extends AbstractController
{
use HxTrait;
public function __construct(
private readonly BookingService $bookingService,
private readonly AgencyLoader $agencyLoader,
@@ -113,18 +116,22 @@ class IndexController extends AbstractController
#[Route('/bookings/cancel', name: 'app_booking_cancel')]
public function cancel(Request $request): Response
{
// Clear the booking session
$this->bookingService->clearBookingSession($request);
if (Request::METHOD_POST === $request->getMethod()) {
// Clear the booking session
$this->bookingService->clearBookingSession($request);
// Clear the security target path to prevent redirect loop after login
// Without this, logging in after cancel would redirect back to a stale booking URL
$request->getSession()->remove('_security.main.target_path');
// Clear the security target path to prevent redirect loop after login
// Without this, logging in after cancel would redirect back to a stale booking URL
$request->getSession()->remove('_security.main.target_path');
// Add a flash message to inform the user
$this->addFlash('info', 'Buchung abgebrochen.');
// Add a flash message to inform the user
$this->addFlash('info', 'Buchung abgebrochen.');
// Redirect to login page
return $this->redirectToRoute('app_login');
// Redirect to login page
return $this->hxRedirect($request, $this->generateUrl('app_login'));
}
return $this->render('booking/modal_cancel.html.twig');
}
/**
+5 -1
View File
@@ -17,7 +17,8 @@ class SecurityController extends AbstractController
public function login(AuthenticationUtils $authenticationUtils, Request $request, BookingService $bookingService): Response
{
// Check if this is a booking flow (BookingDto exists in session)
$isBookingFlow = null !== $bookingService->getBookingDto($request, BookingService::BOOKING_CREATE_KEY);
$bookingDto = $bookingService->getBookingDto($request, BookingService::BOOKING_CREATE_KEY);
$isBookingFlow = null !== $bookingDto;
// If authenticated and in booking flow, proceed to Step 1
if (null !== $this->getUser() && true === $isBookingFlow) {
@@ -52,6 +53,9 @@ class SecurityController extends AbstractController
return $this->render($template, [
'last_username' => $lastUsername,
'error' => $error,
'travel_title' => $bookingDto?->travel->label,
'travel_date_from' => $bookingDto?->travel->dateFrom,
'travel_date_to' => $bookingDto?->travel->dateTo,
]);
}