getActiveSheet(); // Set the header row $sheet->setCellValue('A1', 'ID'); $sheet->setCellValue('B1', 'Lang-ID'); $sheet->setCellValue('C1', 'Termin-Typ'); $sheet->setCellValue('D1', 'Von-Datum'); $sheet->setCellValue('E1', 'Von-Zeit'); $sheet->setCellValue('F1', 'Bis-Datum'); $sheet->setCellValue('G1', 'Bis-Zeit'); $sheet->setCellValue('H1', 'Zeitzusatz'); $sheet->setCellValue('I1', 'Titel'); $sheet->setCellValue('J1', 'Text'); $sheet->setCellValue('K1', 'Ort'); $sheet->setCellValue('L1', 'Planungsstatus'); $sheet->setCellValue('M1', 'Anzeigeziel'); $sheet->setCellValue('N1', 'Gruppenzuordnung'); $sheet->setCellValue('O1', 'Zyklusart'); $sheet->setCellValue('P1', 'Zyklusintervall'); $sheet->setCellValue('Q1', 'Zyklusdetail'); $sheet->setCellValue('R1', 'Notiz'); $sheet->setCellValue('S1', 'Verantwortlich'); $sheet->setCellValue('T1', 'Hintergrundfarbe'); $sheet->setCellValue('U1', 'BucherID'); $sheet->setCellValue('V1', 'Benutzerdefinierte Felder'); $sheet->setCellValue('W1', 'Dokument-Titel'); $sheet->setCellValue('X1', 'Anzeigeziel Ort'); $sheet->setCellValue('Y1', 'Anzeigeziel Notiz'); $sheet->setCellValue('Z1', 'Anzeigeziel Verantwortlicher'); $sheet->setCellValue('AA1', 'Erzeugt'); $sheet->setCellValue('AB1', 'Aktualisiert'); // Set the data row // Titel $selectedGroup = isset($_POST['group']) ? $_POST['group'] : ''; $sheet->setCellValue('I2', $selectedGroup); // Datum $date_s = isset($_POST['date_s']) ? $_POST['date_s'] : ''; $sheet->setCellValue('D2', date('d.m.Y', strtotime($date_s))); $date_e = isset($_POST['date_e']) ? $_POST['date_e'] : ''; if (date('d.m.Y', strtotime($date_e)) != "01.01.1970"){ $sheet->setCellValue('F2', date('d.m.Y', strtotime($date_e))); } // Zeit $time_s = isset($_POST['time_s']) ? $_POST['time_s'] : ''; if ($time_s !== '' && preg_match('/^\d{2}:\d{2}$/', $time_s)) { $sheet->setCellValue('E2', $time_s); } elseif ($time_s !== '') { $error[] = "Ungültiges Zeitformat. Verwenden Sie das Format hh:mm."; } $time_e = isset($_POST['time_e']) ? $_POST['time_e'] : ''; if ($time_e !== '' && preg_match('/^\d{2}:\d{2}$/', $time_e)) { $sheet->setCellValue('G2', $time_e); } elseif ($time_e !== '') { $error[] = "Ungültiges Zeitformat. Verwenden Sie das Format hh:mm."; } // FIX $sheet->setCellValue('C2', 'Einzel'); $sheet->setCellValue('O2', 'einmalig'); // Setze den Ort in Zelle K2 $location = isset($_POST['location']) ? htmlspecialchars($_POST['location']) : ''; $sheet->setCellValue('K2', $location); // Setze den Text in Zelle J2 $further_text = isset($_POST['further_text']) ? htmlspecialchars($_POST['further_text']) : ''; $sheet->setCellValue('J2', $further_text); $sheet->setCellValue('R2', $info); $responsibility = isset($_POST['responsibility']) ? htmlspecialchars($_POST['responsibility']) : ''; $sheet->setCellValue('S2', $responsibility); $userInput = isset($_POST['userinput']) ? $_POST['userinput'] : ''; $userInput2 = isset($_POST['userinput2']) ? $_POST['userinput2'] : ''; // DB-Lookup: Preset-Werte für die gewählte Terminart laden $presetStmt = $pdo->prepare("SELECT planungsstatus, anzeigeziel, gruppenzuordnung, anzeigeziel_ort, anzeigeziel_notiz, anzeigeziel_verantwortlicher, default_text FROM kalli_appointment_types WHERE name = ? LIMIT 1"); $presetStmt->execute([$selectedGroup]); $preset = $presetStmt->fetch(PDO::FETCH_ASSOC); if ($preset) { $sheet->setCellValue('L2', $preset['planungsstatus']); $sheet->setCellValue('M2', $preset['anzeigeziel']); $sheet->setCellValue('N2', $preset['gruppenzuordnung']); $sheet->setCellValue('X2', $preset['anzeigeziel_ort']); $sheet->setCellValue('Y2', $preset['anzeigeziel_notiz']); $sheet->setCellValue('Z2', $preset['anzeigeziel_verantwortlicher']); if (!empty($preset['default_text']) && empty($further_text)) { $sheet->setCellValue('J2', $preset['default_text']); } } elseif ($userInput != "" && $selectedGroup == "oeffentlich") { $sheet->setCellValue('I2', $userInput); $sheet->setCellValue('L2', 'fix'); $sheet->setCellValue('M2', 'öffentlich'); $sheet->setCellValue('N2', 'AN ALLE'); $sheet->setCellValue('X2', 'öffentlich'); $sheet->setCellValue('Y2', 'intern'); $sheet->setCellValue('Z2', 'intern'); } elseif ($userInput != "" && $selectedGroup == "intern") { $sheet->setCellValue('I2', $userInput); $sheet->setCellValue('L2', 'fix'); $sheet->setCellValue('M2', 'intern'); $sheet->setCellValue('N2', 'AN ALLE'); $sheet->setCellValue('X2', 'intern'); $sheet->setCellValue('Y2', 'intern'); $sheet->setCellValue('Z2', 'intern'); } // Save the file on the server $xlsxDir = rtrim(intranet_env('CKAL_XLSX_DIR', '/data/ckal-xlsx'), '/'); if (!is_dir($xlsxDir) && !mkdir($xlsxDir, 0770, true) && !is_dir($xlsxDir)) { throw new RuntimeException("CKalender-XLSX-Verzeichnis kann nicht angelegt werden: {$xlsxDir}"); } $FileName = $xlsxDir . "/" . $name . "-" . date("Ymd-His") . ".xlsx"; $writer = new Xlsx($spreadsheet); $writer->save($FileName); // Redirect to prevent form resubmission on page reload print ""; //header("Location: kalli.php"); //exit(); } } // ACHTUNG: Die PHP-Header Weiterleitungen müssen hier abgeschlossen sein. ?>
Kalli: Eintragungsassistent
' : ''; $toastText = ($error == 3) ? 'Eintragung erfolgreich! Kalli wird Ihren Termin direkt vermerken.' : 'Es gab einen Fehler. Bitte kontaktieren Sie uns!'; echo "
"; echo "
{$toastIcon}
"; echo "" . htmlspecialchars($toastText) . ""; echo ""; echo "
"; echo ""; } ?>
1
Terminart
2
Zeitraum
3
Informationen
4
Übersicht
Terminart auswählen
query("SELECT * FROM kalli_categories ORDER BY sort_order, name"); $kalliCategories = []; while ($cat = $catQuery->fetch(PDO::FETCH_ASSOC)) { $kalliCategories[] = $cat; } $typeQuery = $pdo->query("SELECT * FROM kalli_appointment_types ORDER BY sort_order, name"); $kalliTypesByCategory = []; while ($type = $typeQuery->fetch(PDO::FETCH_ASSOC)) { $kalliTypesByCategory[$type['category_id']][] = $type; } // Alle verwendeten Rollen sammeln für die "Terminart nicht aufgelistet"-Sektion $kalliAllRoles = []; $isAdminUser = (isset($groups["Admin"]) && $groups["Admin"] == 1); foreach ($kalliCategories as $cat): $role = $cat['permission_role']; $kalliAllRoles[$role] = 1; if (!$isAdminUser && !(isset($groups[$role]) && $groups[$role] == 1)) continue; $types = $kalliTypesByCategory[$cat['id']] ?? []; if (empty($types)) continue; ?>
0; if ($hasAnyKalliRole): ?>
Terminart nicht aufgelistet?

Nur ausfüllen, wenn die Terminart oben nicht vorhanden ist.