0) { return mysqli_fetch_assoc($result); } return null; } // Den aktuellen Termin holen $row = get_current_meeting($conn); // Logik: Wenn ein Termin existiert und dessen Datum/Uhrzeit in der Vergangenheit liegt, // wird er als "abgeschlossen" markiert und der nächste Termin wird geladen. if ($row && strtotime($row['meeting_date']) < time()) { $id_to_complete = $row['id']; $sql_update = "UPDATE meetings SET is_completed = 1 WHERE id = ?"; $stmt_update = mysqli_prepare($conn, $sql_update); if ($stmt_update) { mysqli_stmt_bind_param($stmt_update, "i", $id_to_complete); mysqli_stmt_execute($stmt_update); mysqli_stmt_close($stmt_update); } // Den nächsten (jetzt aktuellen) Termin neu laden $row = get_current_meeting($conn); } // --- NEUE LOGIK FÜR TEILNAHMEBESTÄTIGUNG --- if ($row) { $meeting_id = $row['id']; $user_attendance_status = null; // Aktionen aus der URL verarbeiten if (isset($_GET['action']) && isset($_GET['meeting_id']) && $_GET['meeting_id'] == $meeting_id) { $action = $_GET['action']; $rsvp_status_value = null; $attended_value = 0; // Standardwert für attended ist 0 if ($action == 'accept') { $rsvp_status_value = 'accepted'; $attended_value = 1; // Setze attended auf 1 bei Zusage } elseif ($action == 'decline') { $rsvp_status_value = 'declined'; $attended_value = 0; // Setze attended auf 0 bei Absage } elseif ($action == 'maybe') { $rsvp_status_value = 'maybe'; $attended_value = 0; // Setze attended auf 0 bei "Vielleicht" } if ($rsvp_status_value !== null) { // Vorhandenen Eintrag prüfen $check_sql = "SELECT rsvp_status FROM meeting_teilnehmer WHERE meeting_id = ? AND user_id = ?"; $check_stmt = mysqli_prepare($conn, $check_sql); if ($check_stmt) { mysqli_stmt_bind_param($check_stmt, "ii", $meeting_id, $logged_in_user_id); mysqli_stmt_execute($check_stmt); $check_result = mysqli_stmt_get_result($check_stmt); $existing_attendance = mysqli_fetch_assoc($check_result); mysqli_stmt_close($check_stmt); if ($existing_attendance) { // Eintrag aktualisieren $update_sql = "UPDATE meeting_teilnehmer SET rsvp_status = ?, attended = ? WHERE meeting_id = ? AND user_id = ?"; $update_stmt = mysqli_prepare($conn, $update_sql); if ($update_stmt) { mysqli_stmt_bind_param($update_stmt, "siii", $rsvp_status_value, $attended_value, $meeting_id, $logged_in_user_id); mysqli_stmt_execute($update_stmt); mysqli_stmt_close($update_stmt); } } else { // Neuen Eintrag hinzufügen $insert_sql = "INSERT INTO meeting_teilnehmer (meeting_id, user_id, attended, rsvp_status) VALUES (?, ?, ?, ?)"; $insert_stmt = mysqli_prepare($conn, $insert_sql); if ($insert_stmt) { mysqli_stmt_bind_param($insert_stmt, "iiis", $meeting_id, $logged_in_user_id, $attended_value, $rsvp_status_value); mysqli_stmt_execute($insert_stmt); mysqli_stmt_close($insert_stmt); } } } } // Nach der Aktion die Seite neu laden, um die Buttons zu aktualisieren header("Location: index.php"); exit; } // Status des eingeloggten Nutzers für den aktuellen Termin abrufen $user_status_sql = "SELECT rsvp_status FROM meeting_teilnehmer WHERE meeting_id = ? AND user_id = ?"; $user_status_stmt = mysqli_prepare($conn, $user_status_sql); if ($user_status_stmt) { mysqli_stmt_bind_param($user_status_stmt, "ii", $meeting_id, $logged_in_user_id); mysqli_stmt_execute($user_status_stmt); $user_status_result = mysqli_stmt_get_result($user_status_stmt); $user_status_row = mysqli_fetch_assoc($user_status_result); if ($user_status_row) { $user_attendance_status = $user_status_row['rsvp_status']; } mysqli_stmt_close($user_status_stmt); } // Daten für die Benutzerübersicht abrufen // Annahme: Es gibt eine 'users'-Tabelle mit 'id' und 'username' $attendees_sql = "SELECT t.rsvp_status, u.username FROM meeting_teilnehmer AS t LEFT JOIN users AS u ON t.user_id = u.id WHERE t.meeting_id = ?"; $attendees_stmt = mysqli_prepare($conn, $attendees_sql); $accepted_users = []; $declined_users = []; $maybe_users = []; $total_accepted = 0; $total_declined = 0; $total_maybe = 0; if ($attendees_stmt) { mysqli_stmt_bind_param($attendees_stmt, "i", $meeting_id); mysqli_stmt_execute($attendees_stmt); $attendees_result = mysqli_stmt_get_result($attendees_stmt); while ($row_user = mysqli_fetch_assoc($attendees_result)) { switch ($row_user['rsvp_status']) { case 'accepted': $accepted_users[] = htmlspecialchars($row_user['username']); $total_accepted++; break; case 'declined': $declined_users[] = htmlspecialchars($row_user['username']); $total_declined++; break; case 'maybe': $maybe_users[] = htmlspecialchars($row_user['username']); $total_maybe++; break; } } mysqli_stmt_close($attendees_stmt); } // --- NEUE LOGIK FÜR DIE BESTIMMUNG DES NÄCHSTEN ZAHLERS --- $next_payer_username = null; // Nur prüfen, wenn es zugesagte Teilnehmer gibt if ($total_accepted > 0) { // SQL-Abfrage, um die Anzahl der bezahlten Einträge für zugesagte Benutzer zu ermitteln // Die Sub-Query zählt die bezahlten Einträge (paid=1) für jeden Benutzer. $sql_next_payer = " SELECT u.username, (SELECT COUNT(*) FROM meeting_teilnehmer WHERE user_id = u.id AND paid = 1) AS paid_count FROM meeting_teilnehmer mt JOIN users u ON mt.user_id = u.id WHERE mt.meeting_id = ? AND mt.rsvp_status = 'accepted' ORDER BY paid_count ASC "; $stmt_next_payer = mysqli_prepare($conn, $sql_next_payer); mysqli_stmt_bind_param($stmt_next_payer, "i", $meeting_id); mysqli_stmt_execute($stmt_next_payer); $result_next_payer = mysqli_stmt_get_result($stmt_next_payer); $payer_candidates = []; $min_paid_count = -1; while ($row_payer = mysqli_fetch_assoc($result_next_payer)) { // Finden der minimalen Anzahl an bezahlten Rechnungen if ($min_paid_count == -1 || $row_payer['paid_count'] < $min_paid_count) { $min_paid_count = $row_payer['paid_count']; $payer_candidates = [$row_payer['username']]; } elseif ($row_payer['paid_count'] == $min_paid_count) { // Bei Gleichstand den Benutzer zur Liste der Kandidaten hinzufügen $payer_candidates[] = $row_payer['username']; } } mysqli_stmt_close($stmt_next_payer); // Neu: Bei Gleichstand wird alphabetisch sortiert und der erste genommen. if (!empty($payer_candidates)) { sort($payer_candidates); $next_payer_username = $payer_candidates[0]; } } } // Die Funktion get_readable_text_color() ist jetzt in helpers.php und kann hier direkt aufgerufen werden. include('inc/header.php'); // Wochentags-Übersetzung $german_weekdays = [ 'Mon' => 'Mo.', 'Tue' => 'Di.', 'Wed' => 'Mi.', 'Thu' => 'Do.', 'Fri' => 'Fr.', 'Sat' => 'Sa.', 'Sun' => 'So.', ]; ?>

Farbe des nächsten Treffens

nächster Termin:

Du hast zugesagt!

Du hast abgesagt!

Vielleicht dabei!

Bist du dabei?

Rechnung wird bezahlt von:

Keine anstehenden Termine gefunden.