(int)$termin['startzeit'], 'end' => (int)$termin['endzeit'], 'title' => trim((string)$termin['location']), 'desc' => trim((string)$termin['beschreibung']), ]; return hash('sha256', json_encode($data)); } $statusMap = [ "0" => "Offen", "1" => "Bereit", "2" => "Erledigt", "3" => "Storniert" ]; require_once "config/session.php"; if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) { header("location: index.php"); exit; } if(isset($_GET["id"])){ $id = $_GET["id"]; } if(isset($_POST["id"])){ $id = $_POST["id"]; } /* =============================== TERMIN LADEN (für Kalenderstatus) =============================== */ $stmt = $pdo->prepare("SELECT * FROM termine WHERE id = :id"); $stmt->execute([':id' => $id]); $termin = $stmt->fetch(PDO::FETCH_ASSOC); // =============================== // RECHNUNG ZU DIESEM TERMIN? // =============================== $invoice = null; try { $stInv = $pdo->prepare("SELECT id, invoice_no FROM invoices WHERE termine_id = :tid ORDER BY id DESC LIMIT 1"); $stInv->execute([':tid' => $id]); $invoice = $stInv->fetch(PDO::FETCH_ASSOC) ?: null; } catch (Throwable $e) { // Falls Tabellen noch nicht existieren oder so: einfach ignorieren $invoice = null; } /* =============================== KALENDER STATUS BERECHNEN =============================== */ $currentHash = buildCalendarHash($termin); if (empty($termin['calendar_event_id'])) { $calendarStatus = 'missing'; // 🔴 } elseif ($termin['calendar_hash'] !== $currentHash) { $calendarStatus = 'outdated'; // 🟡 } else { $calendarStatus = 'ok'; // 🟢 } $per_page = 5; // Anzahl der Changelog-Einträge pro Seite $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; if ($page < 1) $page = 1; $offset = ($page - 1) * $per_page; // Gesamtanzahl Einträge $count_sql = $pdo->prepare("SELECT COUNT(*) FROM changes WHERE termin_id = :id"); $count_sql->execute([':id' => $id]); $total_entries = $count_sql->fetchColumn(); $total_pages = ceil($total_entries / $per_page); // Daten holen $sql = $pdo->prepare(" SELECT * FROM changes WHERE termin_id = :id ORDER BY timestamp DESC LIMIT :limit OFFSET :offset "); $sql->bindValue(':id', $id, PDO::PARAM_INT); $sql->bindValue(':limit', $per_page, PDO::PARAM_INT); $sql->bindValue(':offset', $offset, PDO::PARAM_INT); $sql->execute(); $changes = $sql->fetchAll(PDO::FETCH_ASSOC); if(isset($_POST['save'])){ if(isset($_POST['inputStartzeit_ts']) && !empty($_POST['inputStartzeit_ts'])){ $startzeit = $_POST['inputStartzeit_ts']; if($Data->getTerminDataById($id, "startzeit") != $startzeit){ $Data->createChanges($id, $_SESSION["id"], "startzeit", $Data->getTerminDataById($id, "startzeit"), $startzeit); $Data->changeTermin($id, "startzeit", $startzeit); } } if(isset($_POST['inputEndzeit_ts']) && !empty($_POST['inputEndzeit_ts'])){ $endzeit = $_POST['inputEndzeit_ts']; if($Data->getTerminDataById($id, "endzeit") != $endzeit){ $Data->createChanges($id, $_SESSION["id"], "endzeit", $Data->getTerminDataById($id, "endzeit"), $endzeit); $Data->changeTermin($id, "endzeit", $endzeit); } } if(isset($_POST['inputLocation'])){ $location = $_POST['inputLocation']; if($Data->getTerminDataById($id, "location") != $location){ $Data->createChanges($id, $_SESSION["id"], "location", $Data->getTerminDataById($id, "location"), $location); $Data->changeTermin($id, "location", $location); } } if(isset($_POST['inputGage'])){ $gage = $_POST['inputGage']; if($Data->getTerminDataById($id, "gage") != $gage){ $Data->createChanges($id, $_SESSION["id"], "gage", $Data->getTerminDataById($id, "gage"), $gage); $Data->changeTermin($id, "gage", $gage); } } if (isset($_POST['users'])) { // Neue Daten $userIDs_new = array_map('intval', $_POST['users']); $json_new = json_encode($userIDs_new); // Alte Daten holen und in Array umwandeln $old_json = $Data->getTerminDataById($id, "anwesend"); $userIDs_old = json_decode($old_json, true); // Falls alt NULL oder kein Array if (!is_array($userIDs_old)) { $userIDs_old = []; } // Arrays vergleichen – unabhängig von Reihenfolge if (array_diff($userIDs_old, $userIDs_new) || array_diff($userIDs_new, $userIDs_old)) { // Changelog schreiben $Data->createChanges( $id, $_SESSION["id"], "anwesend", json_encode($userIDs_old), $json_new ); // Speichern $Data->changeTermin($id, "anwesend", $json_new); } } if (isset($_POST['inputBeschreibung'])) { $beschreibung = trim($_POST['inputBeschreibung']); if ($Data->getTerminDataById($id, "beschreibung") != $beschreibung) { $Data->createChanges($id, $_SESSION["id"], "beschreibung", "", ""); $Data->changeTermin($id, "beschreibung", $beschreibung); } } if(isset($_POST['status'])){ $status = $_POST['status']; if($Data->getTerminDataById($id, "status") != $status){ $Data->createChanges($id, $_SESSION["id"], "status", $Data->getTerminDataById($id, "status"), $status); $Data->changeTermin($id, "status", $status); if($status == "3"){ $Data->deleteCalendarEvent($id); header("location: termin_show.php?id=" . $id); exit; } } } $Data->updateCalendarEvent($id); header("location: termin_show.php?id=" . $id); exit; } include('navbar.php'); ?> ANJUMA Dashboard
getTerminDataById($id, "status"); ?> PDF öffnen ()
📅 Kalender aktuell () 📅 Kalender nicht aktuell 📅 Kein Kalender-Eintrag
⚠️ Der Termin wurde geändert, der Kalendereintrag ist nicht mehr aktuell.
timestampToDate($row['timestamp']); $name = $Data->getDataByID($row['user_id'], "name"); $feld = strtoupper($row['was']); $alt = $row['alt']; $neu = $row['neu']; if ($row['was'] === 'anwesend'){ $alt = json_decode($row["alt"], true) ?: []; $neu = json_decode($row["neu"], true) ?: []; $alt = array_map(fn($uid) => $Data->getDataByID($uid, "name"), $alt); $neu = array_map(fn($uid) => $Data->getDataByID($uid, "name"), $neu); } if ($row['was'] === 'status') { $alt = $statusMap[$alt] ?? $alt; $neu = $statusMap[$neu] ?? $neu; } if (in_array($row['was'], ['startzeit','endzeit','realendzeit'])) { if ($alt > 0) $alt = date('d.m.Y H:i', $alt); $neu = date('d.m.Y H:i', $neu); } echo ""; } ?>
Datum/Uhrzeit Änderung
$datum
"; if ($row['was'] === 'create') { echo "$name hat diesen Termin erstellt!"; } elseif ($row['was'] === 'anwesend') { echo "$name hat $feld geändert von ".implode(', ', $alt)." zu ".implode(', ', $neu)."."; } elseif ($row['was'] === 'startzeit' && $row['alt'] == 0) { echo "$name hat STARTZEIT geändert zu $neu."; } elseif ($row['was'] === 'beschreibung') { echo "$name hat die Beschreibung geändert!"; }else{ echo "$name hat $feld geändert von $alt zu $neu."; } echo "