Funktion Ticket per Mail reservieren

This commit is contained in:
2026-01-11 16:05:04 +00:00
parent d78198a9de
commit 9d4efebba5
3 changed files with 131 additions and 8 deletions
+94 -6
View File
@@ -147,14 +147,56 @@ $jsonld = render_event_jsonld_graph($upcoming);
</div>
<?php
// Ticket-URL aus "Ticket/VVK-Info" extrahieren (falls vorhanden)
$ticketUrl = null;
if (!empty($e['tickets_info']) && preg_match('~https?://[^\s]+~', $e['tickets_info'], $m)) {
$ticketUrl = $m[0];
}
// Optional: Ticket-Reservierung per E-Mail
$reserveEnabled = !empty($e['reserve_by_mail']);
$mailto = null;
if ($reserveEnabled) {
$reserveTo = trim((string)($e['reserve_email'] ?? ''));
// Fallback: E-Mail aus "Ticket/VVK-Info" erkennen
if ($reserveTo === '' && !empty($e['tickets_info']) && preg_match('/[A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,}/i', $e['tickets_info'], $mm)) {
$reserveTo = $mm[0];
}
// Fallback: ggf. siteweite Konstante (falls vorhanden)
if ($reserveTo === '') {
foreach (['TICKETS_EMAIL','TICKETS_RESERVATION_EMAIL','CONTACT_EMAIL','SITE_EMAIL'] as $c) {
if (defined($c) && is_string(constant($c)) && trim((string)constant($c)) !== '') {
$reserveTo = trim((string)constant($c));
break;
}
}
}
$dt = date('d.m.Y', strtotime($e['date'])) . ' · ' . ($e['time'] ?: '19:30');
$subject = rawurlencode('Ticketreservierung: ' . $e['title'] . ' (' . $dt . ')');
$body = rawurlencode(
"Hallo,\n\n" .
"ich möchte gerne Tickets reservieren für:\n" .
$e['title'] . "\n" .
"Termin: " . $dt . "\n\n" .
"Anzahl Tickets: \n" .
"Name: \n" .
"Telefon: \n\n" .
"Vielen Dank!"
);
$mailto = 'mailto:' . $reserveTo . '?subject=' . $subject . '&body=' . $body;
}
?>
<?php if ($ticketUrl): ?>
<div class="mt-3">
<a class="btn btn-brand btn-sm" href="<?= h($ticketUrl) ?>" target="_blank" rel="noopener" onclick="event.stopPropagation()">Tickets sichern</a>
<?php if (!empty($reserveEnabled) || $ticketUrl): ?>
<div class="mt-3 d-grid gap-2 d-sm-flex justify-content-center">
<?php if (!empty($reserveEnabled)): ?>
<a class="btn btn-accent btn-sm" href="<?= h($mailto) ?>" onclick="event.stopPropagation()">Tickets per Mail reservierbar</a>
<?php endif; ?>
<?php if ($ticketUrl): ?>
<a class="btn btn-brand btn-sm" href="<?= h($ticketUrl) ?>" target="_blank" rel="noopener" onclick="event.stopPropagation()">Tickets sichern</a>
<?php endif; ?>
</div>
<?php elseif (!empty($e['tickets_info'])): ?>
<div class="mt-3 small text-muted"><strong>Tickets:</strong> <?= h($e['tickets_info']) ?></div>
@@ -181,7 +223,7 @@ $jsonld = render_event_jsonld_graph($upcoming);
<img src="<?= h($e['image']) ?>" alt="<?= h($e['title']) ?>" class="modal-img mb-3">
<?php endif; ?>
<p class="text-muted small mb-2">
<p class="text-muted small mb-2" style="text-align: center;">
<?= date('d.m.Y', strtotime($e['date'])) ?> · <?= h($e['time'] ?: '19:30') ?>
<?php if (!empty($e['speaker'])): ?> · mit <?= h($e['speaker']) ?><?php endif; ?>
</p>
@@ -205,8 +247,54 @@ $jsonld = render_event_jsonld_graph($upcoming);
<?= render_rich_text($e['description'] ?? '') ?>
</div>
<?php if (!empty($ticketUrl)): ?>
<div class="text-center"><a class="btn btn-brand" href="<?= h($ticketUrl) ?>" target="_blank" rel="noopener">Tickets sichern</a></div>
<?php
// Ticket-URL / Mail-Reservierung auch im Modal korrekt berechnen
$ticketUrl = null;
if (!empty($e['tickets_info']) && preg_match('~https?://[^\s]+~', $e['tickets_info'], $m)) {
$ticketUrl = $m[0];
}
$reserveEnabled = !empty($e['reserve_by_mail']);
$mailto = null;
if ($reserveEnabled) {
$reserveTo = trim((string)($e['reserve_email'] ?? ''));
if ($reserveTo === '' && !empty($e['tickets_info']) && preg_match('/[A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,}/i', $e['tickets_info'], $mm)) {
$reserveTo = $mm[0];
}
if ($reserveTo === '') {
foreach (['TICKETS_EMAIL','TICKETS_RESERVATION_EMAIL','CONTACT_EMAIL','SITE_EMAIL'] as $c) {
if (defined($c) && is_string(constant($c)) && trim((string)constant($c)) !== '') {
$reserveTo = trim((string)constant($c));
break;
}
}
}
$dt = date('d.m.Y', strtotime($e['date'])) . ' · ' . ($e['time'] ?: '19:30');
$subject = rawurlencode('Ticketreservierung: ' . $e['title'] . ' (' . $dt . ')');
$body = rawurlencode(
"Hallo,\n\n" .
"ich möchte gerne Tickets reservieren für:\n" .
$e['title'] . "\n" .
"Termin: " . $dt . "\n\n" .
"Anzahl Tickets: \n" .
"Name: \n" .
"Telefon: \n\n" .
"Vielen Dank!"
);
$mailto = 'mailto:' . $reserveTo . '?subject=' . $subject . '&body=' . $body;
}
?>
<?php if (!empty($reserveEnabled) || $ticketUrl): ?>
<div class="text-center d-grid gap-2 d-sm-flex justify-content-center">
<?php if (!empty($reserveEnabled)): ?>
<a class="btn btn-accent" href="<?= h($mailto) ?>">Tickets per Mail reservieren</a>
<?php endif; ?>
<?php if ($ticketUrl): ?>
<a class="btn btn-brand" href="<?= h($ticketUrl) ?>" target="_blank" rel="noopener">Tickets sichern</a>
<?php endif; ?>
</div>
<?php elseif (!empty($e['tickets_info'])): ?>
<div class="small text-center"><strong>Tickets:</strong> <?= h($e['tickets_info']) ?></div>
<?php endif; ?>