<?php /************************************************* * BIBELLESE – EIN-DATEI-SCRIPT (CMS INCLUDE) *************************************************/ /* ======================= KONFIGURATION ======================= */ define('BL_DATA', __DIR__ . '/slots.json'); define('BL_BACKUP_DIR', __DIR__ . '/backups'); define('BL_ADMIN_PW', 'GEHEIM'); define('BL_MAIL_FROM', Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!'); /* ======================= SESSION (CMS-sicher) ======================= */ if (session_status() === PHP_SESSION_NONE) { session_start(); } /* ======================= DATEI-LOCKING ======================= */ function bl_load(&$fp) { if (!file_exists(BL_DATA)) { file_put_contents(BL_DATA, '[]'); } $fp = fopen(BL_DATA, 'c+'); flock($fp, LOCK_EX); $json = stream_get_contents($fp); return $json ? json_decode($json, true) : []; } function bl_save($fp, $data) { ftruncate($fp, 0); rewind($fp); fwrite($fp, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); fflush($fp); flock($fp, LOCK_UN); fclose($fp); } /* ======================= ADMIN CHECK ======================= */ function bl_admin() { if (!isset($_SESSION['bl_admin'])) { if (($_POST['bl_pw'] ?? '') === BL_ADMIN_PW) { $_SESSION['bl_admin'] = true; } else { echo '
'; return false; } } return true; } /* ======================= ROUTING ======================= */ $action = $_GET['bl_action'] ?? 'list'; echo '
| Zeit | Status | Teilnehmer |
|---|
Danke für deine Anmeldung.
'; } /* ================================================== ADMIN ÜBERSICHT ================================================== */ if ($action === 'admin') { if (!bl_admin()) { echo ''; return; } $slots = bl_load($fp); echo '
Adminbereich
'; foreach ($slots as $s) { echo htmlspecialchars($s['start']).' – '.$s['status'].' [freigeben]
'; } echo '
CSV Export | Backup'; bl_save($fp, $slots); } /* ================================================== SLOT FREIGEBEN / NACHRÜCKEN ================================================== */ if ($action === 'delete') { if (!bl_admin()) { echo ''; return; } $slots = bl_load($fp); foreach ($slots as &$s) { if ($s['id'] == ($_GET['id'] ?? 0)) { if (!empty($s['warteliste'])) { $s['teilnehmer'] = array_shift($s['warteliste']); $s['status'] = 'belegt'; } else { $s['status'] = 'frei'; $s['teilnehmer'] = null; } } } bl_save($fp, $slots); echo '
Slot aktualisiert.
'; } /* ================================================== CSV EXPORT (EXCEL) ================================================== */ if ($action === 'export') { if (!bl_admin()) { echo ''; return; } $slots = bl_load($fp); header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=bibellese.csv'); $out = fopen('php://output', 'w'); fputcsv($out, ['Zeit', 'Status', 'Name', 'E-Mail'], ';'); foreach ($slots as $s) { fputcsv($out, [ $s['start'], $s['status'], $s['teilnehmer']['vorname'] ?? '', $s['teilnehmer']['email'] ?? '' ], ';'); } fclose($out); bl_save($fp, $slots); exit; } /* ================================================== BACKUP ================================================== */ if ($action === 'backup') { if (!bl_admin()) { echo ''; return; } if (!is_dir(BL_BACKUP_DIR)) { mkdir(BL_BACKUP_DIR, 0777, true); } copy(BL_DATA, BL_BACKUP_DIR.'/slots_'.date('Ymd_His').'.json'); echo '
Backup erstellt.
'; } echo '';






