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
+34 -1
View File
@@ -39,6 +39,11 @@ if ($loggedIn) {
$price = sanitize_text($_POST['price'] ?? '');
$doors_open = sanitize_text($_POST['doors_open'] ?? '');
$tickets_info = sanitize_text($_POST['tickets_info'] ?? '');
$reserve_by_mail = isset($_POST['reserve_by_mail']) && $_POST['reserve_by_mail'] === '1';
$reserve_email = trim((string)($_POST['reserve_email'] ?? ''));
if ($reserve_email !== '' && !filter_var($reserve_email, FILTER_VALIDATE_EMAIL)) {
$reserve_email = '';
}
$catering = sanitize_text($_POST['catering'] ?? '');
$tags = sanitize_text($_POST['tags'] ?? '');
$description = trim($_POST['description'] ?? '');
@@ -71,6 +76,8 @@ if ($loggedIn) {
'price' => $price,
'doors_open' => $doors_open,
'tickets_info' => $tickets_info,
'reserve_by_mail' => $reserve_by_mail,
'reserve_email' => $reserve_email,
'catering' => $catering,
'tags' => $tags,
'description' => $description,
@@ -237,6 +244,18 @@ if ($loggedIn) {
<input type="text" class="form-control" name="tickets_info" value="<?= h($editEvent['tickets_info'] ?? '') ?>">
</div>
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="reserve_by_mail" name="reserve_by_mail" value="1" <?= !empty($editEvent['reserve_by_mail']) ? 'checked' : '' ?>>
<label class="form-check-label" for="reserve_by_mail">Tickets per EMail reservieren</label>
</div>
<div class="mb-3" id="reserve_email_wrap">
<label class="form-label">ReservierungsEMail (optional)</label>
<input type="email" class="form-control" name="reserve_email" value="<?= h($editEvent['reserve_email'] ?? '') ?>" placeholder="z.B. tickets@…">
<div class="form-text">Wenn leer, wird versucht, eine EMail-Adresse aus „Ticket/VVKInfo“ zu erkennen. Sonst bleibt der Empfänger leer.</div>
</div>
<div class="mb-3">
<label class="form-label">Verpflegung/Service</label>
<input type="text" class="form-control" name="catering" value="<?= h($editEvent['catering'] ?? '') ?>">
@@ -301,6 +320,9 @@ if ($loggedIn) {
<td>
<div class="fw-semibold"><?= h($e['title']) ?></div>
<div class="text-muted small"><?= h($e['speaker']) ?></div>
<?php if (!empty($e['reserve_by_mail'])): ?>
<span class="badge text-bg-info">MailReservierung</span>
<?php endif; ?>
</td>
<td><?= h($e['venue_name']) ?></td>
<td class="text-end">
@@ -320,7 +342,7 @@ if ($loggedIn) {
<div class="cta-band p-4 d-md-flex justify-content-between align-items-center rounded-4">
<div class="mb-3 mb-md-0">
<p class="section-kicker mb-1">Tipp</p>
<div class="h6 mb-0">Wenn „Ticket/VVK-Info“ eine URL enthält, zeigt die Programmseite automatisch den Button <em>„Tickets sichern“</em>.</div>
<div class="h6 mb-0">Wenn „Ticket/VVK-Info“ eine URL enthält, zeigt die Programmseite automatisch den Button <em>„Tickets sichern“</em>. Wenn „Tickets per EMail reservieren“ aktiv ist, erscheint zusätzlich ein Button, der eine Mailvorlage im Mailprogramm öffnet.</div>
</div>
<a class="btn btn-accent" href="programm.php" target="_blank" rel="noopener">Programm ansehen</a>
</div>
@@ -340,5 +362,16 @@ if ($loggedIn) {
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Admin UI: ReservierungsEMail Feld nur anzeigen, wenn „Tickets per EMail reservieren“ aktiv ist
(function () {
const toggle = document.getElementById('reserve_by_mail');
const wrap = document.getElementById('reserve_email_wrap');
if (!toggle || !wrap) return;
const apply = () => { wrap.style.display = toggle.checked ? '' : 'none'; };
toggle.addEventListener('change', apply);
apply();
})();
</script>
</body>
</html>
+3 -1
View File
@@ -423,12 +423,14 @@
"price": "",
"doors_open": "",
"tickets_info": "",
"reserve_by_mail": true,
"reserve_email": "walschleber.kultour@gmail.com",
"catering": "",
"tags": "Live Reportage",
"description": "Gerlinde Kaltenbrunner\r\nDie innere Dimension des Bergsteigens\r\n16.01.2026 / 19.30Uhr / Lindenhof Walschleben \r\n\r\nGerlinde Kaltenbrunner hat als erste Frau der Welt, alle Gipfel der 14 8000er, ohne Zuhilfenahme von zusätzlichem Sauerstoff und ohne Hochträgerunterstützung erreicht. Im aktuellen Vortag wird sie Ihnen anhand von verschiedenen Ausschnitten ihrer Expeditionen, ihre Herangehensweise zur inneren Dimension des Bergsteigens weitergeben. Sie berichtet über ihre körperliche und mentale Vorbereitung, über die ausdauernde Begeisterung, aber auch den Umgang mit Rückschlägen und das Überwinden von äußerst schwierigen Situationen. \r\nWichtige Elemente sind für Gerlinde Kaltenbrunner dazu die Meditation, das innere Bauchgefühl, genauso wie die Ernährung und die tiefe Verbindung zum Berg und zur Natur. In Teil zwei des Vortrages nimmt Sie Gerlinde mit zur Besteigung des K2, des Schwierigsten aller 8000er. Auf der chinesischen Seite des Berges gelang ihr 2011 in einem internationalen Team im siebten Anlauf der Gipfel über den sehr anspruchsvollen und wenig begangenen Nordpfeiler. Es erwartet Sie ein inspirierender Vortrag mit sehr persönlichen Eindrücken, untermalt mit spannenden Bildern und Videosequenzen aus der Bergwelt.\r\nBiografie Gerlind Kaltenbrunner:\r\nGerlinde Kaltenbrunner, Profibergsteigerin aus Passion, ist wann immer es die Zeit zulässt beim Sportklettern, unterwegs in den Alpen oder beim Expeditionsbergsteigen. Zunächst diplomierte Krankenschwester, entschied sie sich, nach einer Zwischenstation im Sportbekleidungsvertrieb, zur unsicheren Karriere als Berufsbergsteigerin. Heute vermerkt sie alle vierzehn bestiegene Achttausender Hauptgipfel. Mit der Besteigung des K2, des mit 8611 Metern zweithöchsten Berges der Erde, ist sie die erste Frau, die sämtliche Achttausendergipfel ohne Zuhilfenahme von Flaschensauerstoff und ohne Unterstützung von Hochträgern erreicht hat. Ihre Passion gilt jedoch nicht allein den hohen Bergen. Auch die Zusammenarbeit mit Menschen bewegt, berührt und beflügelt sie sehr. Innere Begeisterung, Hingabe, Dankbarkeit, ein achtsamer, respekt- und liebevoller Umgang mit der Natur und allen Wesen, sind die Grundpfeiler ihres Lebens. In Vorträgen und Seminaren gibt sie ihre Erfahrungen, Erlebnisse und Erkenntnisse weiter. So inspiriert sie seit vielen Jahren unzählige Menschen, aus verschiedensten Kulturen, Religionen und allen sozialen Schichten.\r\n\r\nErleben Gerlinde Kaltenbrunner live auf dem Saal im Lindenhof Walschleben. Einlass ist ab 19.00 Uhr. Für das leibliche Wohl ist am Veranstaltungsabend gesorgt.\r\n\r\nKarten bekommen Sie im Vorverkauf im Blumenhof Kerst, Erfurter Straße 29b, 99189 Walschleben, Tel.: 036201/62358 und an der Abendkasse. Achtung, der Blumenhof ist vom 05.01.26 bis 12.01.26 geschlossen. In dieser Zeit können Sie Karten unter walschleber.kultour@gmail.com reservieren.\r\n\r\n Wir freuen uns auf Ihren Besuch,\r\nIhr Team der Walschleber KulTour.",
"image": "/uploads/event_20250915_172534_0e78d94a.jpg",
"slug": "die-innere-dimension-des-bergsteigens-2026-01-16",
"updated_at": "2025-12-30T09:21:56+01:00"
"updated_at": "2026-01-11T16:56:13+01:00"
},
{
"id": "evt_623cf63be157",
+92 -4
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 (!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): ?>
<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 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; ?>