Merge branch 'main' into dev
This commit is contained in:
commit
5479d0e364
1 file changed
+156
-53
+156
-53
@@ -3,13 +3,21 @@ include_once(__DIR__ . '/../controller/DatabaseController.php');
|
||||
include_once(__DIR__ . '/../controller/DataController.php');
|
||||
|
||||
$msg = "";
|
||||
$username = $_SESSION['username'] ?? 'Gast'; // Holt den eingeloggten User[cite: 5]
|
||||
$username = $_SESSION['username'] ?? 'Gast';
|
||||
|
||||
// 1. Termin löschen (Aktion)
|
||||
if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['id'])) {
|
||||
$deleteId = (int)$_GET['id'];
|
||||
DatabaseDelete("Termine", "ID = ?", $deleteId);
|
||||
$msg = "Termin erfolgreich gelöscht!";
|
||||
if (isset($_GET['action']) && $_GET['action'] === 'delete') {
|
||||
if (isset($_GET['serien_id']) && !empty($_GET['serien_id'])) {
|
||||
// Löscht die gesamte Serie
|
||||
$serienId = $_GET['serien_id'];
|
||||
DatabaseDelete("Termine", "SERIEN_ID = ?", $serienId);
|
||||
$msg = "Komplette Terminserie erfolgreich gelöscht!";
|
||||
} elseif (isset($_GET['id'])) {
|
||||
// Löscht nur einen einzelnen Termin
|
||||
$deleteId = (int)$_GET['id'];
|
||||
DatabaseDelete("Termine", "ID = ?", $deleteId);
|
||||
$msg = "Termin erfolgreich gelöscht!";
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Termin hinzufügen (Aktion)
|
||||
@@ -18,73 +26,131 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_termin'])) {
|
||||
$zeit = $_POST['zeit'] ?? '';
|
||||
$name = $_POST['name'] ?? '';
|
||||
$notiz = $_POST['notiz'] ?? '';
|
||||
$wiederholung = $_POST['wiederholung'] ?? 'none';
|
||||
$enddatum = $_POST['enddatum'] ?? '';
|
||||
|
||||
if (!empty($datum) && !empty($zeit) && !empty($name)) {
|
||||
DatabaseInsert(
|
||||
"Termine",
|
||||
"DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON",
|
||||
$datum,
|
||||
$zeit,
|
||||
$name,
|
||||
$notiz,
|
||||
$username
|
||||
);
|
||||
$msg = "Termin erfolgreich eingetragen!";
|
||||
|
||||
if ($wiederholung !== 'none' && !empty($enddatum)) {
|
||||
$currentDate = new DateTime($datum);
|
||||
$endDate = new DateTime($enddatum);
|
||||
|
||||
if ($endDate < $currentDate) {
|
||||
$msg = "Das Enddatum darf nicht vor dem Startdatum liegen.";
|
||||
} else {
|
||||
$insertedCount = 0;
|
||||
// Generiere eine eindeutige ID für diese Serie
|
||||
$serienId = uniqid('serie_', true);
|
||||
|
||||
$intervalMapping = [
|
||||
'daily' => '+1 day',
|
||||
'weekly' => '+1 week',
|
||||
'monthly' => '+1 month'
|
||||
];
|
||||
|
||||
$modifier = $intervalMapping[$wiederholung] ?? null;
|
||||
|
||||
if ($modifier) {
|
||||
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);
|
||||
}
|
||||
$msg = "Serientermin ($insertedCount Termine) erfolgreich eingetragen!";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Normaler Einzeltermin
|
||||
DatabaseInsert(
|
||||
"Termine",
|
||||
"DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON",
|
||||
$datum,
|
||||
$zeit,
|
||||
$name,
|
||||
$notiz,
|
||||
$username
|
||||
);
|
||||
$msg = "Termin erfolgreich eingetragen!";
|
||||
}
|
||||
} else {
|
||||
$msg = "Bitte alle Pflichtfelder ausfüllen.";
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Alle anstehenden Termine laden (Sortiert nach Datum und Zeit)
|
||||
$termine = DatabaseShow("Termine", "*", "1=1 ORDER BY DATUM ASC, ZEIT ASC");
|
||||
// 3. Termine laden: JETZT MIT GRUPPIERUNG FÜR DIE ÜBERSICHT
|
||||
// Falls ein Termin eine SERIEN_ID hat, nehmen wir das MIN(DATUM) (also den nächsten anstehenden bzw. ersten Termin)
|
||||
// Wichtig: Deine DatabaseShow-Funktion muss GROUP BY im WHERE-String erlauben.
|
||||
$queryCondition = "1=1 GROUP BY IFNULL(SERIEN_ID, ID) ORDER BY DATUM ASC, ZEIT ASC";
|
||||
$termine = DatabaseShow("Termine", "*, MIN(DATUM) as DATUM", $queryCondition);
|
||||
|
||||
// Übersetzung für die Anzeige
|
||||
$intervallNamen = [
|
||||
'daily' => 'Täglich',
|
||||
'weekly' => 'Wöchentlich',
|
||||
'monthly' => 'Monatlich'
|
||||
];
|
||||
?>
|
||||
|
||||
<!-- Status-Meldung anzeigen, falls vorhanden -->
|
||||
<?php if (!empty($msg)): ?>
|
||||
<div class="status-msg"><?= htmlspecialchars($msg) ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="form-container">
|
||||
<h3>📅 Neuen Termin vergeben</h3>
|
||||
|
||||
<form method="POST" class="vergabe-form">
|
||||
<div class="vergabe-grid">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="datum">Datum *</label>
|
||||
<label for="datum">Start-Datum *</label>
|
||||
<input type="date" id="datum" name="datum" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="zeit">Uhrzeit *</label>
|
||||
<input type="time" id="zeit" name="zeit" required style="width:100%; padding:10px; border-radius:5px; border:1px solid var(--input-border); background:var(--input-bg); color:var(--input-text);">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="name">Name / Zweck *</label>
|
||||
<input type="text" id="name" name="name" placeholder="z.B. Kundentermin" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="notiz">Notiz (Optional)</label>
|
||||
<input type="text" id="notiz" name="notiz" placeholder="Details zum Termin...">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="wiederholung">Wiederholung</label>
|
||||
<select id="wiederholung" name="wiederholung" onchange="toggleEnddatum()" style="width:100%; padding:10px; border-radius:5px; border:1px solid var(--input-border); background:var(--input-bg); color:var(--input-text);">
|
||||
<option value="none">Keine Wiederholung</option>
|
||||
<option value="daily">Täglich</option>
|
||||
<option value="weekly">Wöchentlich</option>
|
||||
<option value="monthly">Monatlich</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group" id="enddatum-group" style="display: none;">
|
||||
<label for="enddatum">Wiederholen bis *</label>
|
||||
<input type="date" id="enddatum" name="enddatum">
|
||||
</div>
|
||||
<button type="submit" name="add_termin" class="btn-submit-vergabe">Speichern</button>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Termine Übersicht -->
|
||||
<div class="form-container">
|
||||
<h3>📋 Aktuelle Terminbelegungen</h3>
|
||||
|
||||
<div class="table-container">
|
||||
<table class="db-table mobile-responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Datum</th>
|
||||
<th>Datum / Turnus</th>
|
||||
<th>Uhrzeit</th>
|
||||
<th>Termin / Name</th>
|
||||
<th>Notiz</th>
|
||||
@@ -96,31 +162,68 @@ $termine = DatabaseShow("Termine", "*", "1=1 ORDER BY DATUM ASC, ZEIT ASC");
|
||||
<?php if (empty($termine)): ?>
|
||||
<tr>
|
||||
<td colspan="6" style="text-align: center; padding: 20px;">Keine Termine eingetragen.</td>
|
||||
</td>
|
||||
<?php else: ?>
|
||||
<?php foreach ($termine as $termin): ?>
|
||||
<?php
|
||||
// Formatiere das Datum lesbar (DD.MM.YYYY)
|
||||
$dateFormatted = date('d.m.Y', strtotime($termin['DATUM']));
|
||||
// Formatiere die Zeit lesbar (HH:MM)
|
||||
$timeFormatted = date('H:i', strtotime($termin['ZEIT']));
|
||||
?>
|
||||
<tr>
|
||||
<td data-label="Datum:"><?= htmlspecialchars($dateFormatted) ?></td>
|
||||
<td data-label="Uhrzeit:"><?= htmlspecialchars($timeFormatted) ?></td>
|
||||
<td data-label="Termin / Name:"><strong><?= htmlspecialchars($termin['NAME']) ?></strong></td>
|
||||
<td data-label="Notiz:"><?= htmlspecialchars($termin['NOTIZ'] ?: '-') ?></td>
|
||||
<td data-label="Von:"><span class="badge"><?= htmlspecialchars($termin['ERSTELLT_VON']) ?></span></td>
|
||||
<td data-label="Aktion:">
|
||||
<a href="?service=vergabe&action=delete&id=<?= $termin['ID'] ?>"
|
||||
onclick="return confirm('Möchtest du diesen Termin wirklich löschen?');">
|
||||
<button class="btn-delete">Löschen</button>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
<?php else: ?>
|
||||
<?php foreach ($termine as $termin): ?>
|
||||
<?php
|
||||
$dateFormatted = date('d.m.Y', strtotime($termin['DATUM']));
|
||||
$timeFormatted = date('H:i', strtotime($termin['ZEIT']));
|
||||
$istSerie = !empty($termin['SERIEN_ID']);
|
||||
?>
|
||||
<tr>
|
||||
<td data-label="Datum:">
|
||||
<strong><?= htmlspecialchars($dateFormatted) ?></strong>
|
||||
<?php if ($istSerie): ?>
|
||||
<br>
|
||||
<small style="color: var(--primary-color, #007bff); font-style: italic;">
|
||||
🔄 <?= $intervallNamen[$termin['INTERVALL']] ?? '' ?> <br>
|
||||
(bis <?= date('d.m.Y', strtotime($termin['SERIEN_ENDE'])) ?>)
|
||||
</small>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td data-label="Uhrzeit:"><?= htmlspecialchars($timeFormatted) ?></td>
|
||||
<td data-label="Termin / Name:">
|
||||
<strong><?= htmlspecialchars($termin['NAME']) ?></strong>
|
||||
<?php if ($istSerie): ?>
|
||||
<span style="font-size: 0.8em; background: #e1f5fe; color: #0288d1; padding: 2px 6px; border-radius: 10px; margin-left: 5px;">Serie</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td data-label="Notiz:"><?= htmlspecialchars($termin['NOTIZ'] ?: '-') ?></td>
|
||||
<td data-label="Von:"><span class="badge"><?= htmlspecialchars($termin['ERSTELLT_VON']) ?></span></td>
|
||||
<td data-label="Aktion:">
|
||||
<?php if ($istSerie): ?>
|
||||
<a href="?service=vergabe&action=delete&serien_id=<?= urlencode($termin['SERIEN_ID']) ?>"
|
||||
onclick="return confirm('Möchtest du die GESAMTE Terminserie löschen?');">
|
||||
<button class="btn-delete" style="background-color: #d32f2f;">Serie löschen</button>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a href="?service=vergabe&action=delete&id=<?= $termin['ID'] ?>"
|
||||
onclick="return confirm('Möchtest du diesen Termin wirklich löschen?');">
|
||||
<button class="btn-delete">Löschen</button>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleEnddatum() {
|
||||
var wiederholung = document.getElementById('wiederholung').value;
|
||||
var enddatumGroup = document.getElementById('enddatum-group');
|
||||
var enddatumInput = document.getElementById('enddatum');
|
||||
|
||||
if (wiederholung !== 'none') {
|
||||
enddatumGroup.style.display = 'block';
|
||||
enddatumInput.required = true;
|
||||
} else {
|
||||
enddatumGroup.style.display = 'none';
|
||||
enddatumInput.required = false;
|
||||
enddatumInput.value = '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in new issue
Block a user