prepare("SELECT \"Admin\" FROM user_permissions WHERE user_id = ?");
$stmt->execute([$_SESSION["user_id"]]);
$isAdmin = $stmt->fetchColumn();
if ((int)$isAdmin !== 1) {
header("Location: {$g_httpHomePath}");
exit();
}
// Berechtigungsrollen aus user_permissions laden
function getPermissionRoles(PDO $pdo): array {
$roles = [];
$result = $pdo->query("SELECT column_name FROM information_schema.columns WHERE table_name = 'user_permissions' AND table_schema = 'public'");
while ($column = $result->fetch(PDO::FETCH_ASSOC)) {
$field = $column['column_name'];
if (!in_array($field, ['p_id', 'user_id'], true)) {
$roles[] = $field;
}
}
return $roles;
}
$permissionRoles = getPermissionRoles($pdo);
// ── POST-Handler ──────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Kategorie anlegen
if (isset($_POST['addCategory'])) {
$name = trim($_POST['cat_name'] ?? '');
$role = trim($_POST['cat_permission_role'] ?? '');
if ($name !== '') {
$stmt = $pdo->prepare("INSERT INTO kalli_categories (name, permission_role, created_at, updated_at) VALUES (?, ?, NOW(), NOW())");
$stmt->execute([$name, $role]);
header("Location: admin_kalli.php?kalli_msg=1");
exit();
}
header("Location: admin_kalli.php?kalli_msg=5");
exit();
}
// Kategorie bearbeiten
if (isset($_POST['editCategory'])) {
$id = (int)($_POST['cat_id'] ?? 0);
$name = trim($_POST['cat_name'] ?? '');
$role = trim($_POST['cat_permission_role'] ?? '');
if ($id > 0 && $name !== '') {
$stmt = $pdo->prepare("UPDATE kalli_categories SET name = ?, permission_role = ?, updated_at = NOW() WHERE id = ?");
$stmt->execute([$name, $role, $id]);
header("Location: admin_kalli.php?kalli_msg=1");
exit();
}
header("Location: admin_kalli.php?kalli_msg=5");
exit();
}
// Kategorie löschen (CASCADE)
if (isset($_POST['deleteCategory'])) {
$id = (int)($_POST['cat_id'] ?? 0);
if ($id > 0) {
// Zuerst zugehörige Terminarten löschen
$stmt = $pdo->prepare("DELETE FROM kalli_appointment_types WHERE category_id = ?");
$stmt->execute([$id]);
$stmt = $pdo->prepare("DELETE FROM kalli_categories WHERE id = ?");
$stmt->execute([$id]);
header("Location: admin_kalli.php?kalli_msg=2");
exit();
}
header("Location: admin_kalli.php?kalli_msg=5");
exit();
}
// Terminart anlegen
if (isset($_POST['addType'])) {
$catId = (int)($_POST['type_category_id'] ?? 0);
$name = trim($_POST['type_name'] ?? '');
$displayLabel = trim($_POST['type_display_label'] ?? '');
$planungsstatus = trim($_POST['type_planungsstatus'] ?? 'fix');
$anzeigeziel = trim($_POST['type_anzeigeziel'] ?? 'intern');
$gruppenzuordnung = trim($_POST['type_gruppenzuordnung'] ?? '');
$anzeigezielOrt = trim($_POST['type_anzeigeziel_ort'] ?? '');
$anzeigezielNotiz = trim($_POST['type_anzeigeziel_notiz'] ?? '');
$anzeigezielVerantw = trim($_POST['type_anzeigeziel_verantwortlicher'] ?? '');
$defaultText = trim($_POST['type_default_text'] ?? '');
if ($catId > 0 && $name !== '') {
$stmt = $pdo->prepare("INSERT INTO kalli_appointment_types (category_id, name, display_label, planungsstatus, anzeigeziel, gruppenzuordnung, anzeigeziel_ort, anzeigeziel_notiz, anzeigeziel_verantwortlicher, default_text, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())");
$stmt->execute([$catId, $name, $displayLabel, $planungsstatus, $anzeigeziel, $gruppenzuordnung, $anzeigezielOrt, $anzeigezielNotiz, $anzeigezielVerantw, $defaultText]);
header("Location: admin_kalli.php?kalli_msg=3");
exit();
}
header("Location: admin_kalli.php?kalli_msg=5");
exit();
}
// Terminart bearbeiten
if (isset($_POST['editType'])) {
$id = (int)($_POST['type_id'] ?? 0);
$catId = (int)($_POST['type_category_id'] ?? 0);
$name = trim($_POST['type_name'] ?? '');
$displayLabel = trim($_POST['type_display_label'] ?? '');
$planungsstatus = trim($_POST['type_planungsstatus'] ?? 'fix');
$anzeigeziel = trim($_POST['type_anzeigeziel'] ?? 'intern');
$gruppenzuordnung = trim($_POST['type_gruppenzuordnung'] ?? '');
$anzeigezielOrt = trim($_POST['type_anzeigeziel_ort'] ?? '');
$anzeigezielNotiz = trim($_POST['type_anzeigeziel_notiz'] ?? '');
$anzeigezielVerantw = trim($_POST['type_anzeigeziel_verantwortlicher'] ?? '');
$defaultText = trim($_POST['type_default_text'] ?? '');
if ($id > 0 && $name !== '') {
$stmt = $pdo->prepare("UPDATE kalli_appointment_types SET category_id = ?, name = ?, display_label = ?, planungsstatus = ?, anzeigeziel = ?, gruppenzuordnung = ?, anzeigeziel_ort = ?, anzeigeziel_notiz = ?, anzeigeziel_verantwortlicher = ?, default_text = ?, updated_at = NOW() WHERE id = ?");
$stmt->execute([$catId, $name, $displayLabel, $planungsstatus, $anzeigeziel, $gruppenzuordnung, $anzeigezielOrt, $anzeigezielNotiz, $anzeigezielVerantw, $defaultText, $id]);
header("Location: admin_kalli.php?kalli_msg=3");
exit();
}
header("Location: admin_kalli.php?kalli_msg=5");
exit();
}
// Terminart löschen
if (isset($_POST['deleteType'])) {
$id = (int)($_POST['type_id'] ?? 0);
if ($id > 0) {
$stmt = $pdo->prepare("DELETE FROM kalli_appointment_types WHERE id = ?");
$stmt->execute([$id]);
header("Location: admin_kalli.php?kalli_msg=4");
exit();
}
header("Location: admin_kalli.php?kalli_msg=5");
exit();
}
}
// ── Daten laden ───────────────────────────────────────────────────
$categories = $pdo->query("SELECT * FROM kalli_categories ORDER BY sort_order ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC);
$typesRaw = $pdo->query("SELECT * FROM kalli_appointment_types ORDER BY sort_order ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC);
$typesByCategory = [];
foreach ($typesRaw as $t) {
$typesByCategory[(int)$t['category_id']][] = $t;
}
?>
Noch keine Kategorien vorhanden. Erstelle eine neue Kategorie, um Terminarten zu verwalten.
| Name |
Anzeige-Label |
Planungsstatus |
Anzeigeziel |
Gruppe |
Ort |
Notiz |
Verantw. |
Standardtext |
|
| = htmlspecialchars($type['name']) ?> |
= htmlspecialchars($type['display_label']) ?> |
= htmlspecialchars($type['planungsstatus']) ?> |
= htmlspecialchars($type['anzeigeziel']) ?> |
= htmlspecialchars($type['gruppenzuordnung']) ?> |
= htmlspecialchars($type['anzeigeziel_ort'] ?? '') ?> |
= htmlspecialchars($type['anzeigeziel_notiz'] ?? '') ?> |
= htmlspecialchars($type['anzeigeziel_verantwortlicher'] ?? '') ?> |
= htmlspecialchars(mb_strimwidth($type['default_text'] ?? '', 0, 40, '…')) ?> |
|
Keine Terminarten in dieser Kategorie.
Neue Kategorie
Kategorie für Kalli-Terminarten anlegen
Kategorie bearbeiten
Änderungen an der Kategorie vornehmen
Kategorie löschen
Achtung: Alle zugehörigen Terminarten werden ebenfalls gelöscht!
Soll die Kategorie wirklich gelöscht werden?
Dieser Vorgang kann nicht rückgängig gemacht werden.
Neue Terminart
Terminart anlegen
Terminart bearbeiten
Änderungen an der Terminart vornehmen
Terminart löschen
Soll diese Terminart wirklich gelöscht werden?
Soll die Terminart wirklich gelöscht werden?
Dieser Vorgang kann nicht rückgängig gemacht werden.