getMessage(); } } } // CREATE/UPDATE elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_event'])) { $events = load_events(); $id = $_POST['id'] ?: 'evt_' . bin2hex(random_bytes(6)); $title = sanitize_text($_POST['title'] ?? ''); $speaker = sanitize_text($_POST['speaker'] ?? ''); $date = sanitize_text($_POST['date'] ?? ''); $time = sanitize_text($_POST['time'] ?? '19:30'); $venue_name = sanitize_text($_POST['venue_name'] ?? ''); $venue_address = sanitize_text($_POST['venue_address'] ?? ''); $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_by_mail && $reserve_email === '') { $reserve_email = 'walschleber.kultour@gmail.com'; } 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'] ?? ''); $existing_image = sanitize_text($_POST['existing_image'] ?? ''); if ($title === '' || $date === '') { $error = 'Titel und Datum sind Pflichtfelder.'; } else { try { $imagePath = $existing_image; if (!empty($_FILES['image']['name'])) { $imagePath = handle_image_upload($_FILES['image']); } $slug = make_slug($title, $date); // Update falls vorhanden $events = load_events(); $idx = null; foreach ($events as $k => $ev) { if ($ev['id'] === $id) { $idx = $k; break; } } $record = [ 'id' => $id, 'title' => $title, 'speaker' => $speaker, 'date' => $date, 'time' => $time, 'venue_name' => $venue_name, 'venue_address' => $venue_address, '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, 'image' => $imagePath, 'slug' => $slug, 'updated_at' => now_iso() ]; if ($idx !== null) { $events[$idx] = $record; } else { $record['created_at'] = now_iso(); $events[] = $record; } save_events($events); header('Location: admin.php?ok=1'); exit; } catch (Throwable $e) { $error = 'Fehler: ' . $e->getMessage(); } } } // DELETE if (isset($_GET['delete'])) { $events = load_events(); $id = $_GET['delete']; $events = array_values(array_filter($events, fn($e) => $e['id'] !== $id)); save_events($events); header('Location: admin.php?deleted=1'); exit; } // EDIT load $editEvent = null; if (isset($_GET['edit'])) { $id = $_GET['edit']; foreach (load_events() as $e) { if ($e['id'] === $id) { $editEvent = $e; break; } } } try { $nonWebpUploads = find_non_webp_uploads(); } catch (Throwable $e) { $nonWebpUploads = []; $migrationError = 'Upload-Prüfung fehlgeschlagen: ' . $e->getMessage(); } } ?> Admin | <?= h(SITE_NAME) ?>

Admin-Login

Vorträge verwalten

Anlegen, bearbeiten, Bilder hochladen.

Gespeichert Gelöscht

>
Wenn leer, wird versucht, eine E‑Mail-Adresse aus „Ticket/VVK‑Info“ zu erkennen. Sonst bleibt der Empfänger leer.
aktuelles Bild
Abbrechen

Kommende Vorträge

!is_upcoming($e))); ?>

Noch keine Einträge.

Datum Titel Ort
Mail‑Reservierung
Bearbeiten Löschen

Keine archivierten Vorträge vorhanden.

Datum Titel Ort
Mail‑Reservierung
Bearbeiten Löschen

Tipp

Wenn „Ticket/VVK-Info“ eine URL enthält, zeigt die Programmseite automatisch den Button „Tickets sichern“. Wenn „Tickets per E‑Mail reservieren“ aktiv ist, erscheint zusätzlich ein Button, der eine Mailvorlage im Mailprogramm öffnet.
Programm ansehen