Compare commits
4 Commits
feature/le
...
style/home
Author | SHA1 | Date | |
---|---|---|---|
70784e8768
|
|||
c008ebd540 | |||
b98bc363d5 | |||
d242c9b006 |
BIN
assets/images/backgrounds/bg_new.jpeg
Normal file
BIN
assets/images/backgrounds/bg_new.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 115 KiB |
BIN
assets/styles/bg_new.jpeg
Normal file
BIN
assets/styles/bg_new.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 115 KiB |
BIN
public/bg_new.jpeg
Normal file
BIN
public/bg_new.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 115 KiB |
@ -11,7 +11,6 @@ use Symfony\Bridge\Twig\Mime\TemplatedEmail;
|
||||
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
||||
use Symfony\Component\Mailer\MailerInterface;
|
||||
use Symfony\Component\Mime\Address;
|
||||
use Symfony\Component\Mime\Part\DataPart;
|
||||
use Twig\Environment;
|
||||
|
||||
class TicketEmailService
|
||||
@ -33,14 +32,25 @@ class TicketEmailService
|
||||
->to(new Address($payment->getCustomer()?->getEmail(), $payment->getCustomer()?->getFirstname() . ' ' . $payment->getCustomer()?->getLastname()))
|
||||
->context([
|
||||
'payment' => $payment,
|
||||
])
|
||||
->addPart(new DataPart($this->generateTicket($payment->getCustomer()?->getTickets()), 'tickets.pdf', 'application/pdf'));
|
||||
]);
|
||||
|
||||
$acc = 0;
|
||||
foreach ($this->generateTicket($payment->getCustomer()?->getTickets()) as $pdf) {
|
||||
$mail->attach($pdf, 'tickets-'.++$acc.'.pdf', 'application/pdf');
|
||||
}
|
||||
|
||||
$this->mailer->send($mail);
|
||||
}
|
||||
|
||||
private function generateTicket(Collection $tickets): string
|
||||
private function generateTicket(Collection $tickets): array
|
||||
{
|
||||
return (new DompdfWrapper(new DompdfFactory()))->getPdf($this->twig->render('email/pdf.html.twig', ['tickets' => $tickets]));
|
||||
$ticketChunks = array_chunk($tickets->toArray(), 3);
|
||||
|
||||
$pdfs = [];
|
||||
foreach ($ticketChunks as $ticket) {
|
||||
$pdfs[] = (new DompdfWrapper(new DompdfFactory()))->getPdf($this->twig->render('email/pdf.html.twig', ['tickets' => $ticket]));
|
||||
}
|
||||
|
||||
return $pdfs;
|
||||
}
|
||||
}
|
@ -15,13 +15,5 @@
|
||||
</head>
|
||||
<body data-turbo="true">
|
||||
{% block body %}{% endblock %}
|
||||
|
||||
<footer class="w-full bg-white/90 backdrop-blur-md border-t border-gray-100 py-4">
|
||||
<div class="container mx-auto px-4 sm:px-6 lg:px-8 flex justify-center items-center space-x-4 text-sm text-gray-500">
|
||||
<a href="https://www.waldorfschule-bremen-osterholz.de/index.php/impressum" target="_blank" class="hover:text-gray-700 transition-colors">Impressum</a>
|
||||
<span class="text-gray-300">|</span>
|
||||
<a href="https://www.waldorfschule-bremen-osterholz.de/index.php/datenschutzerklaerung" target="_blank" class="hover:text-gray-700 transition-colors">Datenschutz</a>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -3,126 +3,136 @@
|
||||
{% block title %}Home{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="min-h-screen relative overflow-hidden" style="background-image: url('{{ asset('images/backgrounds/abiball_bg.jpeg') }}'); background-size: cover; background-position: center; background-attachment: fixed;">
|
||||
<div class="min-h-screen bg-black/30 backdrop-blur-[2px] relative overflow-hidden">
|
||||
<header class="w-full bg-white/90 backdrop-blur-md shadow-lg fixed top-0 z-50 border-b border-gray-100">
|
||||
<div class="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-3 sm:py-4 flex justify-between items-center">
|
||||
<a href="{{ path('app_home') }}" class="flex items-center space-x-4">
|
||||
<img src="{{ asset('images/logos/new_logo.png') }}" alt="Waldorfschule Bremen Osterholz"
|
||||
class="w-32 sm:w-36 md:w-40 h-auto hover:opacity-90 transition-opacity"/>
|
||||
<img src="{{ asset('images/logos/second_logo.png') }}" alt="Secondary Logo"
|
||||
class="w-32 sm:w-36 md:w-40 h-auto hover:opacity-90 transition-opacity sm:block hidden"/>
|
||||
</a>
|
||||
<a href="{{ path('app_contact') }}"
|
||||
class="bg-gradient-to-r from-red-500 to-orange-500 hover:from-red-600 hover:to-orange-600 text-white px-4 sm:px-6 md:px-8 py-2 sm:py-2.5 rounded-full text-xs sm:text-sm font-medium shadow-md hover:shadow-lg transition-all duration-300">
|
||||
Kontaktaufnahme
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
<div class="min-h-screen relative overflow-hidden bg-[url(bg_new.jpeg)] bg-container bg-no-repeat bg-center bg-fixed"
|
||||
style="background-size: contain; background-repeat: no-repeat; background-position: center; background-attachment: fixed;"
|
||||
>
|
||||
<div class="min-h-screen bg-black/30 relative overflow-hidden">
|
||||
<main class="container mx-auto max-w-7xl px-4 sm:px-6 pb-16 sm:pb-20 flex flex-col items-center justify-center relative z-10">
|
||||
<h1 class="font-bold text-white text-center mb-6 sm:mb-8 tracking-tight leading-tight">
|
||||
<span class=" md:text-[180px]">
|
||||
Willkommen
|
||||
</span>
|
||||
<span class="md:text-6xl">
|
||||
zum Abiball 2025
|
||||
</span>
|
||||
</h1>
|
||||
<div class="w-full max-w-6xl">
|
||||
{# <div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-6 sm:p-8 md:p-10 mb-6 sm:mb-8 transform transition-all duration-300 border border-gray-100"> #}
|
||||
{# <h1 class="text-3xl">Willkommen zum Abiball 2025! 🎉🎓</h1> #}
|
||||
{# <p class="text-base sm:text-lg text-gray-700 leading-relaxed whitespace-pre-line text-wrap"> #}
|
||||
{# Nach einer unvergesslichen Schulzeit feiern wir gemeinsam unseren Abschluss. #}
|
||||
{# Und ihr seid herzlich eingeladen! #}
|
||||
{# Lasst uns gemeinsam diesen besonderen Abend genießen! 🥂✨ #}
|
||||
|
||||
<main class="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 pt-24 sm:pt-28 md:pt-32 pb-16 sm:pb-20 flex flex-col items-center justify-center relative z-10">
|
||||
<h1 class="text-3xl sm:text-4xl md:text-5xl font-bold text-white text-center mb-6 sm:mb-8 tracking-tight leading-tight">
|
||||
Willkommen zum <span class="bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">Abiball 2025</span>
|
||||
</h1>
|
||||
<div class="w-full max-w-6xl">
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-6 sm:p-8 md:p-10 mb-6 sm:mb-8 transform transition-all duration-300 border border-gray-100">
|
||||
<h1 class="text-3xl">Willkommen zum Abiball 2025! 🎉🎓</h1>
|
||||
<p class="text-base sm:text-lg text-gray-700 leading-relaxed whitespace-pre-line text-wrap">
|
||||
Nach einer unvergesslichen Schulzeit feiern wir gemeinsam unseren Abschluss.
|
||||
Und ihr seid herzlich eingeladen!
|
||||
Lasst uns gemeinsam diesen besonderen Abend genießen! 🥂✨
|
||||
{# Euer Abijahrgang 2025 🚀 #}
|
||||
{# </p> #}
|
||||
{# </div> #}
|
||||
|
||||
Euer Abijahrgang 2025 🚀
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-3 w-full gap-3 mb-5">
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-5 mb-3 sm:mb-12 transform transition-all duration-300 border border-gray-100">
|
||||
<h2 class="text-xl text-center font-semibold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">Datum & Uhrzeit</h2>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:calendar" class="w-5 h-5 text-orange-600" />
|
||||
<span class="text-gray-700">28. Juni 2025</span>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:clock" class="w-5 h-5 text-orange-600" />
|
||||
<span class="text-gray-700">17:30 - 03:00</span>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:map-pin" class="w-5 h-5 text-orange-600" />
|
||||
<span class="text-gray-700">Graubündener Str. 4, 28325 Bremen</span>
|
||||
<div class="grid grid-cols-1 sm:grid-cols-3 w-full gap-3 mb-5">
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-5 mb-3 sm:mb-12 transform transition-all duration-300 border border-gray-100">
|
||||
<h2 class="text-xl text-center font-semibold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">
|
||||
Datum & Uhrzeit</h2>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:calendar" class="w-5 h-5 text-orange-600"/>
|
||||
<span class="text-gray-700">28. Juni 2025</span>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:clock" class="w-5 h-5 text-orange-600"/>
|
||||
<span class="text-gray-700">17:30 - 03:00</span>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:map-pin" class="w-5 h-5 text-orange-600"/>
|
||||
<span class="text-gray-700">Graubündener Str. 4, 28325 Bremen</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-5 mb-3 sm:mb-12 transform transition-all duration-300 border border-gray-100">
|
||||
<h2 class="text-xl text-center font-semibold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">Ablauf</h2>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">17:30-19:30</span>
|
||||
<span class="ml-2">Einlass & Platznehmen</span>
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-5 mb-3 sm:mb-12 transform transition-all duration-300 border border-gray-100">
|
||||
<h2 class="text-xl text-center font-semibold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">
|
||||
Ablauf</h2>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">17:30-19:30</span>
|
||||
<span class="ml-2">Einlass & Platznehmen</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">19:30-22:00</span>
|
||||
<span class="ml-2">Dinner & Beisammensein</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">22:00-03:00</span>
|
||||
<span class="ml-2">Feier & Tanz im Saal</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">19:30-22:00</span>
|
||||
<span class="ml-2">Dinner & Beisammensein</span>
|
||||
</div>
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-5 mb-3 sm:mb-12 transform transition-all duration-300 border border-gray-100">
|
||||
<h2 class="text-xl text-center font-semibold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">
|
||||
Ticket Preise</h2>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">All-Inclusive Ticket</span>
|
||||
<span class="ml-2">50€</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">ab 22:00</span>
|
||||
<span class="ml-2">Feier & Tanz im Saal</span>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">After-Show Ticket</span>
|
||||
<span class="ml-2">20€</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">Kind (6-12 Jahre)</span>
|
||||
<span class="ml-2">15€</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600"/>
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">Kind (0-6 Jahre)</span>
|
||||
<span class="ml-2">0€</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-white/80 backdrop-blur-md shadow-xl rounded-2xl sm:rounded-3xl p-5 mb-3 sm:mb-12 transform transition-all duration-300 border border-gray-100">
|
||||
<h2 class="text-xl text-center font-semibold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-orange-500">Ticket Preise</h2>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">All-Inclusive Ticket</span>
|
||||
<span class="ml-2">50€</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">After-Show Ticket</span>
|
||||
<span class="ml-2">20€</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">Kind (6-12 Jahre)</span>
|
||||
<span class="ml-2">15€</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600" />
|
||||
<div class="text-gray-700">
|
||||
<span class="font-medium">Kind (0-6 Jahre)</span>
|
||||
<span class="ml-2">0€</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex inline-flex justify-center w-full gap-4">
|
||||
<div class="text-center space-y-6">
|
||||
<a href="{{ path('app_ticket') }}"
|
||||
class="inline-block bg-gradient-to-r from-red-500 to-orange-500 hover:from-red-600 hover:to-orange-600 text-white px-8 sm:px-10 md:px-12 py-4 sm:py-5 rounded-full text-base sm:text-lg font-semibold shadow-xl hover:shadow-2xl transition-all duration-300">
|
||||
Tickets kaufen
|
||||
</a>
|
||||
</div>
|
||||
<div class="text-center space-y-6">
|
||||
<a href="{{ path('app_contact') }}"
|
||||
class="inline-block bg-gradient-to-r from-red-500 to-orange-500 hover:from-red-600 hover:to-orange-600 text-white px-8 sm:px-10 md:px-12 py-4 sm:py-5 rounded-full text-base sm:text-lg font-semibold shadow-xl hover:shadow-2xl transition-all duration-300">
|
||||
Kontakt aufnehmen
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center space-y-6">
|
||||
<a href="{{ path('app_ticket') }}"
|
||||
class="inline-block bg-gradient-to-r from-red-500 to-orange-500 hover:from-red-600 hover:to-orange-600 text-white px-8 sm:px-10 md:px-12 py-4 sm:py-5 rounded-full text-base sm:text-lg font-semibold shadow-xl hover:shadow-2xl transition-all duration-300">
|
||||
Tickets kaufen
|
||||
</a>
|
||||
<footer class="absolute bottom-0 right-0 w-full flex justify-end items-end p-4">
|
||||
<div class="flex items-end gap-4">
|
||||
<img src="{{ asset('images/logos/new_logo.png') }}" alt="Waldorfschule Bremen Osterholz" class="h-20">
|
||||
<img src="{{ asset('images/logos/second_logo.png') }}" alt="Waldorfschule Bremen Touler Straße" class="h-20">
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -42,7 +42,7 @@ Danke
|
||||
</div>
|
||||
<div class="flex justify-start space-x-3">
|
||||
<twig:ux:icon name="heroicons:clock" class="w-6 h-6 text-orange-600" />
|
||||
<p class="text-gray-700">17:30 - Open End</p>
|
||||
<p class="text-gray-700">17:30 - 03:00</p>
|
||||
</div>
|
||||
<div class="flex justify-start space-x-3">
|
||||
<twig:ux:icon name="heroicons:map-pin" class="w-6 h-6 text-orange-600" />
|
||||
@ -80,6 +80,12 @@ Danke
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-8 bg-white rounded-2xl shadow-lg p-8 border border-gray-100">
|
||||
<twig:ux:icon name="heroicons:envelope" class="w-8 h-8 text-orange-600 mx-auto mb-4" />
|
||||
<h3 class="text-xl font-semibold mb-3 text-center">E-Mail Bestätigung</h3>
|
||||
<p class="text-gray-700 mb-4 text-center">Bitte überprüfe auch deinen Spam-Ordner nach der Bestellbestätigung. Falls du keine E-Mail erhalten hast, kannst du am Eingang einfach deinen vollständigen Namen nennen.</p>
|
||||
</div>
|
||||
|
||||
<div class="mt-8 pt-6 border-t border-gray-200 text-center">
|
||||
<div class="flex items-center justify-center">
|
||||
<a href="{{ path('app_calendar') }}"
|
||||
|
Reference in New Issue
Block a user