diff --git a/.ddev/commands/host/cf b/.ddev/commands/host/cf new file mode 100755 index 0000000..322ee28 --- /dev/null +++ b/.ddev/commands/host/cf @@ -0,0 +1,3 @@ +#!/bin/bash + +cloudflared tunnel --url "https://127.0.0.1/$DDEV_HOST_HTTPS_PORT" --http-host-header "$DDEV_SITENAME.$DDEV_TLD" diff --git a/src/Controller/TicketController.php b/src/Controller/TicketController.php index 50bf39e..2d5cca8 100644 --- a/src/Controller/TicketController.php +++ b/src/Controller/TicketController.php @@ -3,8 +3,8 @@ namespace App\Controller; use App\DataObjects\TicketFormData; +use App\Service\EventService; use App\Service\TicketService; -use Stripe\Stripe; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -16,6 +16,7 @@ final class TicketController extends AbstractController public function __construct( private TicketService $service, private SerializerInterface $serializer, + private EventService $eventService, ) { } @@ -60,4 +61,15 @@ final class TicketController extends AbstractController return $this->redirectToRoute('app_ticket'); } + + #[Route('/calendar', name: 'app_calendar')] + public function calendar(Request $request): Response + { + $userAgent = $request->headers->get('User-Agent'); + $isApple = str_contains($userAgent, 'Mac') || str_contains($userAgent, 'iPhone') || str_contains($userAgent, 'iPad'); + + return $isApple + ? $this->eventService->generateIcs() + : $this->eventService->generateGoogleRedirect(); + } } diff --git a/src/Service/EventService.php b/src/Service/EventService.php new file mode 100644 index 0000000..1ac0708 --- /dev/null +++ b/src/Service/EventService.php @@ -0,0 +1,50 @@ + 'FWS Abiball', + 'description' => 'Der Abiball der Freien Waldorfschule Bremen Osterholz und Touler Straße', + 'location' => 'Graubünder Straße 2, 28209 Bremen', + 'start' => '20240615T180000', + 'end' => '20240615T220000', + ]; + + public function generateIcs(): Response + { + $data = [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'BEGIN:VEVENT', + 'DTSTART:' . self::EVENT_DATA['start'], + 'DTEND:' . self::EVENT_DATA['end'], + 'SUMMARY:' . self::EVENT_DATA['title'], + 'DESCRIPTION:' . self::EVENT_DATA['description'], + 'LOCATION:' . self::EVENT_DATA['location'], + 'END:VEVENT', + 'END:VCALENDAR' + ]; + + return new Response(implode("\r\n", $data), headers: [ + 'Content-Type' => 'text/calendar; charset=utf-8', + 'Content-Disposition' => 'attachment; filename="event.ics"' + ]); + } + + public function generateGoogleRedirect(): Response + { + return new RedirectResponse('https://calendar.google.com/calendar/render?' . http_build_query([ + 'action' => 'TEMPLATE', + 'text' => self::EVENT_DATA['title'], + 'dates' => self::EVENT_DATA['start'] . '/' . self::EVENT_DATA['end'], + 'details' => self::EVENT_DATA['description'], + 'location' => self::EVENT_DATA['location'], + ])); + } +} \ No newline at end of file diff --git a/templates/ticket/success.html.twig b/templates/ticket/success.html.twig index eb38a9a..8f657cc 100644 --- a/templates/ticket/success.html.twig +++ b/templates/ticket/success.html.twig @@ -1,16 +1,66 @@ {% extends 'base.html.twig' %} {% block title %} -Success +Danke {% endblock %} {% block body %} -
Your ticket has been successfully created.
+Wir freuen uns, dich bei der Veranstaltung begrüßen zu dürfen.
+[Datum]
+[Uhrzeit]
+[Adresse]
+