138 lines
4.9 KiB
PHP
138 lines
4.9 KiB
PHP
<?php
|
|
session_start();
|
|
include_once(__DIR__ . '/../../../controller/DatabaseController.php');
|
|
|
|
header('Content-Type: application/json');
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', '0');
|
|
|
|
$daten = json_decode(file_get_contents('php://input'), true) ?? [];
|
|
$action = $daten['action'] ?? '';
|
|
$username = $_SESSION['username'] ?? 'Gast';
|
|
|
|
$erlaubteIntervalle = ['daily' => '+1 day', 'weekly' => '+1 week', 'monthly' => '+1 month'];
|
|
|
|
try {
|
|
switch ($action) {
|
|
|
|
// ---------- Termine laden (nur die eigenen, serienweise gruppiert) ----------
|
|
case 'get_entries': {
|
|
$termine = DatabaseShow(
|
|
"Termine",
|
|
"MAX(ID) as ID, MIN(DATUM) as DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON, SERIEN_ID, INTERVALL, SERIEN_ENDE",
|
|
"ERSTELLT_VON = ? GROUP BY IFNULL(SERIEN_ID, ID) ORDER BY DATUM ASC, ZEIT ASC",
|
|
$username
|
|
);
|
|
|
|
echo json_encode(['success' => true, 'entries' => array_values($termine ?? [])]);
|
|
break;
|
|
}
|
|
|
|
// ---------- Neuen Termin (einzeln oder als Serie) anlegen ----------
|
|
case 'add_termin': {
|
|
$datum = trim($daten['datum'] ?? '');
|
|
$zeit = trim($daten['zeit'] ?? '');
|
|
$name = trim($daten['name'] ?? '');
|
|
$notiz = trim($daten['notiz'] ?? '');
|
|
$wiederholung = $daten['wiederholung'] ?? 'none';
|
|
$enddatum = trim($daten['enddatum'] ?? '');
|
|
|
|
if ($datum === '' || $zeit === '' || $name === '') {
|
|
throw new InvalidArgumentException('Bitte alle Pflichtfelder ausfüllen.');
|
|
}
|
|
|
|
// ----- Serientermin -----
|
|
if ($wiederholung !== 'none' && $enddatum !== '') {
|
|
|
|
if (!isset($erlaubteIntervalle[$wiederholung])) {
|
|
throw new InvalidArgumentException('Ungültiges Wiederholungsintervall.');
|
|
}
|
|
|
|
$currentDate = new DateTime($datum);
|
|
$endDate = new DateTime($enddatum);
|
|
|
|
if ($endDate < $currentDate) {
|
|
throw new InvalidArgumentException('Das Enddatum darf nicht vor dem Startdatum liegen.');
|
|
}
|
|
|
|
$modifier = $erlaubteIntervalle[$wiederholung];
|
|
$serienId = uniqid('serie_', true);
|
|
$insertedCount = 0;
|
|
|
|
while ($currentDate <= $endDate) {
|
|
DatabaseInsert(
|
|
"Termine",
|
|
"DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON, SERIEN_ID, INTERVALL, SERIEN_ENDE",
|
|
$currentDate->format('Y-m-d'),
|
|
$zeit,
|
|
$name,
|
|
$notiz,
|
|
$username,
|
|
$serienId,
|
|
$wiederholung,
|
|
$enddatum
|
|
);
|
|
$insertedCount++;
|
|
$currentDate->modify($modifier);
|
|
}
|
|
|
|
echo json_encode(['success' => true, 'message' => "Serientermin ($insertedCount Termine) erfolgreich eingetragen!"]);
|
|
break;
|
|
}
|
|
|
|
// ----- Einzeltermin -----
|
|
DatabaseInsert(
|
|
"Termine",
|
|
"DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON",
|
|
$datum,
|
|
$zeit,
|
|
$name,
|
|
$notiz,
|
|
$username
|
|
);
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Termin erfolgreich eingetragen!']);
|
|
break;
|
|
}
|
|
|
|
// ---------- Einzelnen Termin löschen ----------
|
|
case 'delete_termin': {
|
|
$id = $daten['id'] ?? null;
|
|
|
|
if (!is_numeric($id)) {
|
|
throw new InvalidArgumentException('Ungültige ID');
|
|
}
|
|
|
|
// Zusätzlich ERSTELLT_VON prüfen, damit niemand fremde Termine per ID löschen kann
|
|
DatabaseDelete("Termine", "ID = ? AND ERSTELLT_VON = ?", (int)$id, $username);
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Termin erfolgreich gelöscht!']);
|
|
break;
|
|
}
|
|
|
|
// ---------- Komplette Serie löschen ----------
|
|
case 'delete_serie': {
|
|
$serienId = trim($daten['serienId'] ?? '');
|
|
|
|
if ($serienId === '') {
|
|
throw new InvalidArgumentException('Ungültige Serien-ID');
|
|
}
|
|
|
|
DatabaseDelete("Termine", "SERIEN_ID = ? AND ERSTELLT_VON = ?", $serienId, $username);
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Komplette Terminserie erfolgreich gelöscht!']);
|
|
break;
|
|
}
|
|
|
|
default:
|
|
throw new InvalidArgumentException("Unbekannte Aktion: $action");
|
|
}
|
|
|
|
} catch (InvalidArgumentException $e) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => $e->getMessage()]);
|
|
} catch (Throwable $e) {
|
|
http_response_code(500);
|
|
error_log($e->getMessage());
|
|
echo json_encode(['error' => 'Serverfehler']);
|
|
} |