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\DependencyInjection\Attribute\Autowire;
|
||||||
use Symfony\Component\Mailer\MailerInterface;
|
use Symfony\Component\Mailer\MailerInterface;
|
||||||
use Symfony\Component\Mime\Address;
|
use Symfony\Component\Mime\Address;
|
||||||
use Symfony\Component\Mime\Part\DataPart;
|
|
||||||
use Twig\Environment;
|
use Twig\Environment;
|
||||||
|
|
||||||
class TicketEmailService
|
class TicketEmailService
|
||||||
@ -33,14 +32,25 @@ class TicketEmailService
|
|||||||
->to(new Address($payment->getCustomer()?->getEmail(), $payment->getCustomer()?->getFirstname() . ' ' . $payment->getCustomer()?->getLastname()))
|
->to(new Address($payment->getCustomer()?->getEmail(), $payment->getCustomer()?->getFirstname() . ' ' . $payment->getCustomer()?->getLastname()))
|
||||||
->context([
|
->context([
|
||||||
'payment' => $payment,
|
'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);
|
$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;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,109 +3,104 @@
|
|||||||
{% block title %}Home{% endblock %}
|
{% block title %}Home{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% 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 relative overflow-hidden bg-[url(bg_new.jpeg)] bg-container bg-no-repeat bg-center bg-fixed"
|
||||||
<div class="min-h-screen bg-black/30 backdrop-blur-[2px] relative overflow-hidden">
|
style="background-size: contain; background-repeat: no-repeat; background-position: center; background-attachment: fixed;"
|
||||||
<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">
|
<div class="min-h-screen bg-black/30 relative overflow-hidden">
|
||||||
<a href="{{ path('app_home') }}" class="flex items-center space-x-4">
|
<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">
|
||||||
<img src="{{ asset('images/logos/new_logo.png') }}" alt="Waldorfschule Bremen Osterholz"
|
<h1 class="font-bold text-white text-center mb-6 sm:mb-8 tracking-tight leading-tight">
|
||||||
class="w-32 sm:w-36 md:w-40 h-auto hover:opacity-90 transition-opacity"/>
|
<span class=" md:text-[180px]">
|
||||||
<img src="{{ asset('images/logos/second_logo.png') }}" alt="Secondary Logo"
|
Willkommen
|
||||||
class="w-32 sm:w-36 md:w-40 h-auto hover:opacity-90 transition-opacity sm:block hidden"/>
|
</span>
|
||||||
</a>
|
<span class="md:text-6xl">
|
||||||
<a href="{{ path('app_contact') }}"
|
zum Abiball 2025
|
||||||
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">
|
</span>
|
||||||
Kontaktaufnahme
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<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>
|
</h1>
|
||||||
<div class="w-full max-w-6xl">
|
<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">
|
{# <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>
|
{# <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">
|
{# <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.
|
{# Nach einer unvergesslichen Schulzeit feiern wir gemeinsam unseren Abschluss. #}
|
||||||
Und ihr seid herzlich eingeladen!
|
{# Und ihr seid herzlich eingeladen! #}
|
||||||
Lasst uns gemeinsam diesen besonderen Abend genießen! 🥂✨
|
{# Lasst uns gemeinsam diesen besonderen Abend genießen! 🥂✨ #}
|
||||||
|
|
||||||
Euer Abijahrgang 2025 🚀
|
{# Euer Abijahrgang 2025 🚀 #}
|
||||||
</p>
|
{# </p> #}
|
||||||
</div>
|
{# </div> #}
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-3 w-full gap-3 mb-5">
|
<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">
|
<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>
|
<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="space-y-3">
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:calendar" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:calendar" class="w-5 h-5 text-orange-600"/>
|
||||||
<span class="text-gray-700">28. Juni 2025</span>
|
<span class="text-gray-700">28. Juni 2025</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:clock" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:clock" class="w-5 h-5 text-orange-600"/>
|
||||||
<span class="text-gray-700">17:30 - 03:00</span>
|
<span class="text-gray-700">17:30 - 03:00</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:map-pin" class="w-5 h-5 text-orange-600" />
|
<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>
|
<span class="text-gray-700">Graubündener Str. 4, 28325 Bremen</span>
|
||||||
</div>
|
</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">
|
<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>
|
<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="space-y-3">
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">17:30-19:30</span>
|
<span class="font-medium">17:30-19:30</span>
|
||||||
<span class="ml-2">Einlass & Platznehmen</span>
|
<span class="ml-2">Einlass & Platznehmen</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">19:30-22:00</span>
|
<span class="font-medium">19:30-22:00</span>
|
||||||
<span class="ml-2">Dinner & Beisammensein</span>
|
<span class="ml-2">Dinner & Beisammensein</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">ab 22:00</span>
|
<span class="font-medium">22:00-03:00</span>
|
||||||
<span class="ml-2">Feier & Tanz im Saal</span>
|
<span class="ml-2">Feier & Tanz im Saal</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</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">
|
<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>
|
<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="space-y-3">
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:ticket" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">All-Inclusive Ticket</span>
|
<span class="font-medium">All-Inclusive Ticket</span>
|
||||||
<span class="ml-2">50€</span>
|
<span class="ml-2">50€</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:cake" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">After-Show Ticket</span>
|
<span class="font-medium">After-Show Ticket</span>
|
||||||
<span class="ml-2">20€</span>
|
<span class="ml-2">20€</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">Kind (6-12 Jahre)</span>
|
<span class="font-medium">Kind (6-12 Jahre)</span>
|
||||||
<span class="ml-2">15€</span>
|
<span class="ml-2">15€</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center space-x-3">
|
<div class="flex items-center space-x-3">
|
||||||
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600" />
|
<twig:ux:icon name="heroicons:musical-note" class="w-5 h-5 text-orange-600"/>
|
||||||
<div class="text-gray-700">
|
<div class="text-gray-700">
|
||||||
<span class="font-medium">Kind (0-6 Jahre)</span>
|
<span class="font-medium">Kind (0-6 Jahre)</span>
|
||||||
<span class="ml-2">0€</span>
|
<span class="ml-2">0€</span>
|
||||||
@ -114,13 +109,28 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex inline-flex justify-center w-full gap-4">
|
||||||
<div class="text-center space-y-6">
|
<div class="text-center space-y-6">
|
||||||
<a href="{{ path('app_ticket') }}"
|
<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">
|
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
|
Tickets kaufen
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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>
|
||||||
|
|
||||||
|
<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>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
@ -42,7 +42,7 @@ Danke
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex justify-start space-x-3">
|
<div class="flex justify-start space-x-3">
|
||||||
<twig:ux:icon name="heroicons:clock" class="w-6 h-6 text-orange-600" />
|
<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>
|
||||||
<div class="flex justify-start space-x-3">
|
<div class="flex justify-start space-x-3">
|
||||||
<twig:ux:icon name="heroicons:map-pin" class="w-6 h-6 text-orange-600" />
|
<twig:ux:icon name="heroicons:map-pin" class="w-6 h-6 text-orange-600" />
|
||||||
@ -80,6 +80,12 @@ Danke
|
|||||||
</div>
|
</div>
|
||||||
</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="mt-8 pt-6 border-t border-gray-200 text-center">
|
||||||
<div class="flex items-center justify-center">
|
<div class="flex items-center justify-center">
|
||||||
<a href="{{ path('app_calendar') }}"
|
<a href="{{ path('app_calendar') }}"
|
||||||
|
Reference in New Issue
Block a user