Historytermine jetzt auch editierbar

This commit is contained in:
Borgal
2025-08-21 01:12:35 +02:00
parent 357d3db777
commit 755ddcef22
2 changed files with 72 additions and 14 deletions

View File

@@ -11,13 +11,34 @@ if (!isset($_GET['id'])) {
header("Location: index.php"); header("Location: index.php");
exit; exit;
} }
$meeting_id = htmlspecialchars($_GET['id']); $meeting_id = htmlspecialchars($_GET['id']);
// Neu: Quelle des Aufrufs festlegen für bedingte Logik und Weiterleitung
$source_page = isset($_GET['source']) && $_GET['source'] == 'history' ? 'history' : 'index';
$cancel_link = $source_page === 'history' ? '../history.php' : '../index.php';
// Daten speichern, wenn das Formular abgeschickt wurde // Daten speichern, wenn das Formular abgeschickt wurde
if ($_SERVER["REQUEST_METHOD"] == "POST") { if ($_SERVER["REQUEST_METHOD"] == "POST") {
$table_name = "meeting_teilnehmer"; // <<< Korrekter Tabellenname $table_name = "meeting_teilnehmer";
// Vorhandene Daten für dieses Meeting löschen, um Duplikate zu vermeiden // Neu: Daten des Meetings selbst aktualisieren, falls aus der History aufgerufen
if ($source_page === 'history') {
$meeting_date = $_POST['meeting_date'];
$color_id = $_POST['color_id'];
$reason = $_POST['reason'] ?? null;
$stmt = mysqli_prepare($conn, "UPDATE meetings SET meeting_date = ?, color_id = ?, reason = ? WHERE id = ?");
if ($stmt) {
mysqli_stmt_bind_param($stmt, "sisi", $meeting_date, $color_id, $reason, $meeting_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
} else {
die("Fehler beim Vorbereiten der Meeting-Update-Abfrage: " . mysqli_error($conn));
}
}
// Vorhandene Daten für dieses Meeting löschen
$stmt = mysqli_prepare($conn, "DELETE FROM " . $table_name . " WHERE meeting_id = ?"); $stmt = mysqli_prepare($conn, "DELETE FROM " . $table_name . " WHERE meeting_id = ?");
if ($stmt === false) { if ($stmt === false) {
die("Fehler in der SQL-Abfrage: " . mysqli_error($conn)); die("Fehler in der SQL-Abfrage: " . mysqli_error($conn));
@@ -55,8 +76,8 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Daten für das Formular abrufen (Meetings und Benutzer) // Daten für das Formular abrufen (Meetings und Benutzer)
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// Meeting-Details abrufen // Neu: Zusätzliche Meeting-Details für den Edit-Modus abrufen
$stmt = mysqli_prepare($conn, "SELECT m.meeting_date, c.name AS color_name FROM meetings m JOIN colors c ON m.color_id = c.id WHERE m.id = ?"); $stmt = mysqli_prepare($conn, "SELECT m.meeting_date, m.reason, m.color_id, c.name AS color_name FROM meetings m LEFT JOIN colors c ON m.color_id = c.id WHERE m.id = ?");
if ($stmt === false) { if ($stmt === false) {
die("Fehler in der SQL-Abfrage: " . mysqli_error($conn)); die("Fehler in der SQL-Abfrage: " . mysqli_error($conn));
} }
@@ -71,6 +92,15 @@ if (!$meeting) {
exit; exit;
} }
// Neu: Alle Farben für das Dropdown im Edit-Modus abrufen
$colors = [];
$colors_result = mysqli_query($conn, "SELECT id, name FROM colors ORDER BY name");
if ($colors_result) {
while ($row = mysqli_fetch_assoc($colors_result)) {
$colors[] = $row;
}
}
// Alle Benutzer abrufen // Alle Benutzer abrufen
$users = []; $users = [];
$users_result = mysqli_query($conn, "SELECT id, username AS name FROM users ORDER BY username"); $users_result = mysqli_query($conn, "SELECT id, username AS name FROM users ORDER BY username");
@@ -82,7 +112,7 @@ while ($row = mysqli_fetch_assoc($users_result)) {
} }
// Bestehende Feedback-Daten für dieses Meeting abrufen, falls vorhanden // Bestehende Feedback-Daten für dieses Meeting abrufen, falls vorhanden
$table_name = "meeting_teilnehmer"; // <<< Korrekter Tabellenname $table_name = "meeting_teilnehmer";
$stmt = mysqli_prepare($conn, "SELECT user_id, attended, wore_color, paid FROM " . $table_name . " WHERE meeting_id = ?"); $stmt = mysqli_prepare($conn, "SELECT user_id, attended, wore_color, paid FROM " . $table_name . " WHERE meeting_id = ?");
if ($stmt === false) { if ($stmt === false) {
die("Fehler in der SQL-Abfrage: " . mysqli_error($conn)); die("Fehler in der SQL-Abfrage: " . mysqli_error($conn));
@@ -100,7 +130,10 @@ require_once '../inc/header.php';
<div class="container mt-5"> <div class="container mt-5">
<h2 class="mb-4">Teilnahme eintragen</h2> <h2 class="mb-4">Teilnahme eintragen</h2>
<p class="text-muted">für das Treffen am <strong><?= date('d.m.Y', strtotime($meeting['meeting_date'])) ?></strong> in der Farbe <strong><?= htmlspecialchars($meeting['color_name']) ?></strong>.</p>
<?php if ($source_page === 'index'): ?>
<p class="text-muted">für das Treffen am <strong><?= date('d.m.Y', strtotime($meeting['meeting_date'])) ?></strong> in der Farbe <strong><?= htmlspecialchars($meeting['color_name']) ?></strong>.</p>
<?php endif; ?>
<?php if ($message): ?> <?php if ($message): ?>
<div class="alert alert-<?= $message_type ?> alert-dismissible fade show" role="alert"> <div class="alert alert-<?= $message_type ?> alert-dismissible fade show" role="alert">
@@ -111,7 +144,33 @@ require_once '../inc/header.php';
<div class="card shadow mb-4"> <div class="card shadow mb-4">
<div class="card-body"> <div class="card-body">
<form action="participant.php?id=<?= $meeting_id ?>" method="post"> <form action="participant.php?id=<?= $meeting_id ?>&source=<?= $source_page ?>" method="post">
<?php if ($source_page === 'history'): ?>
<h5 class="mb-3">Treffen-Details bearbeiten</h5>
<div class="row">
<div class="col-md-4 mb-3">
<label for="meeting_date" class="form-label">Datum des Treffens</label>
<input type="datetime-local" class="form-control" id="meeting_date" name="meeting_date" value="<?= date('Y-m-d\TH:i', strtotime($meeting['meeting_date'])) ?>" required>
</div>
<div class="col-md-4 mb-3">
<label for="color_id" class="form-label">Farbvorgabe</label>
<select class="form-select" id="color_id" name="color_id" required>
<?php foreach ($colors as $color): ?>
<option value="<?= $color['id'] ?>" <?= $meeting['color_id'] == $color['id'] ? 'selected' : '' ?>>
<?= htmlspecialchars($color['name']) ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4 mb-3">
<label for="reason" class="form-label">Grund (optional)</label>
<input type="text" class="form-control" id="reason" name="reason" value="<?= htmlspecialchars($meeting['reason']) ?>">
</div>
</div>
<hr>
<h5 class="mb-3">Teilnehmer-Details bearbeiten</h5>
<?php endif; ?>
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
@@ -147,7 +206,7 @@ require_once '../inc/header.php';
</table> </table>
<div class="d-flex justify-content-between mt-3"> <div class="d-flex justify-content-between mt-3">
<button type="submit" class="btn btn-primary">Speichern</button> <button type="submit" class="btn btn-primary">Speichern</button>
<a href="../index.php" class="btn btn-outline-secondary">Abbrechen</a> <a href="<?= htmlspecialchars($cancel_link) ?>" class="btn btn-outline-secondary">Abbrechen</a>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -171,14 +171,13 @@ include('inc/header.php');
<?php else: ?> <?php else: ?>
<?php foreach ($all_meetings as $meeting_id => $meeting): ?> <?php foreach ($all_meetings as $meeting_id => $meeting): ?>
<div class="card shadow mb-4"> <div class="card shadow mb-4">
<div class="card-header d-flex justify-content-between align-items-center" style="background-color: rgba(<?= hexToRgb($meeting['hex_code']) ?>, 0.25);"> <div class="card-header d-flex justify-content-between bg-secondary bg-opacity-25 text-dark align-items-center">
<div class="mb-0 fs-6 fs-md-5 fw-bold" style="color: <?= get_readable_text_color($meeting['hex_code']) ?>;"> <div class="mb-0 fs-6 fs-md-5 fw-bold">
<span class="fw-normal me-2">am</span> <span class="fw-normal me-2">am</span><?= date('d.m.y', strtotime($meeting['date'])) ?>
<?= date('d.m.y', strtotime($meeting['date'])) ?>
</div> </div>
<div> <div>
<a href="admin/participant.php?id=<?= $meeting_id ?>" style="text-decoration: none; border: none; outline: none;"> <a href="admin/participant.php?id=<?= $meeting_id ?>&source=history" style="text-decoration: none; border: none; outline: none;">
<span class="material-symbols-outlined" style="color: <?= get_readable_text_color($meeting['hex_code']) ?>;">edit_calendar</span> <span class="material-symbols-outlined text-dark">edit_calendar</span>
</a> </a>
<a href="history.php?action=delete&id=<?= $meeting_id ?>" class="ms-1" style="text-decoration: none; border: none; outline: none;" onclick="return confirm('Möchtest du diesen Termin wirklich löschen?');"> <a href="history.php?action=delete&id=<?= $meeting_id ?>" class="ms-1" style="text-decoration: none; border: none; outline: none;" onclick="return confirm('Möchtest du diesen Termin wirklich löschen?');">
<span class="material-symbols-outlined text-danger">delete_outline</span> <span class="material-symbols-outlined text-danger">delete_outline</span>