From e2e931b74e0bfcec79a2ceeaecf034b5c52306e8 Mon Sep 17 00:00:00 2001 From: Borgal Date: Fri, 22 Aug 2025 15:50:30 +0200 Subject: [PATCH] =?UTF-8?q?Statistik=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stats.php | 240 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 153 insertions(+), 87 deletions(-) diff --git a/stats.php b/stats.php index 468cd67..4caef77 100755 --- a/stats.php +++ b/stats.php @@ -1,50 +1,7 @@ = ? AND mt.attended = 1 AND mt.wore_color = 0 - GROUP BY u.username - ORDER BY penalty_count DESC -"; -$stmt = mysqli_prepare($conn, $sql_penalties); -// Überprüfen, ob das Statement erfolgreich vorbereitet wurde -if ($stmt === false) { - die("Fehler bei der SQL-Abfrage: " . mysqli_error($conn)); -} -mysqli_stmt_bind_param($stmt, "s", $last_reset_date); -mysqli_stmt_execute($stmt); -$result = mysqli_stmt_get_result($stmt); - -while ($row = mysqli_fetch_assoc($result)) { - $penalties_data[] = $row; - $total_penalties += $row['penalty_count']; - $total_due += $row['penalty_count'] * $penalty_amount; -} -mysqli_stmt_close($stmt); - -// --- 2. Gesamt-Statistiken --- - // Statistik 1: Häufigkeit der gewählten Farben $color_stats = []; $sql_colors = " @@ -79,64 +36,100 @@ while ($row = mysqli_fetch_assoc($result)) { $participation_stats[] = $row; } +// Neue Statistik: Durchschnittliche Anwesenheit pro Meeting +$avg_attendance = 0; +$sql_avg_attendance = " + SELECT AVG(attended_count) AS avg_attended + FROM ( + SELECT COUNT(user_id) AS attended_count + FROM meeting_teilnehmer + WHERE attended = 1 + GROUP BY meeting_id + ) AS subquery"; +$result_avg = mysqli_query($conn, $sql_avg_attendance); +if ($row = mysqli_fetch_assoc($result_avg)) { + $avg_attendance = round($row['avg_attended'], 2); +} + +// Neue Statistik: Durchschnittliche Anzahl derer, die die korrekte Farbe getragen haben +$avg_wore_color = 0; +$sql_avg_wore_color = " + SELECT AVG(wore_color_count) AS avg_wore_color + FROM ( + SELECT COUNT(user_id) AS wore_color_count + FROM meeting_teilnehmer + WHERE wore_color = 1 + GROUP BY meeting_id + ) AS subquery"; +$result_avg_wore = mysqli_query($conn, $sql_avg_wore_color); +if ($row = mysqli_fetch_assoc($result_avg_wore)) { + $avg_wore_color = round($row['avg_wore_color'], 2); +} + +// Neue Statistik: Ranking nach dem Tragen der Farbe +$wore_color_stats = []; +$sql_wore_color = " + SELECT + u.username, + COUNT(mt.user_id) AS wore_color_count + FROM meeting_teilnehmer mt + JOIN users u ON mt.user_id = u.id + WHERE mt.wore_color = 1 + GROUP BY u.username + ORDER BY wore_color_count DESC +"; +$result_wore = mysqli_query($conn, $sql_wore_color); +while ($row = mysqli_fetch_assoc($result_wore)) { + $wore_color_stats[] = $row; +} + // Header einbinden require_once 'inc/header.php'; ?>
-

Statistiken & Auswertung

+

Statistiken & Ranking

-
-

Aktuelle Strafen (seit )

+
+

Gesamt-Statistiken

-

- Gesamtzahl der Strafen:
- Fälliger Gesamtbetrag: -

- - - - --- + +
-
-
-

Gesamt-Statistiken (Alle Zeiten)

-
-
-
Häufigkeit der gewählten Farben
- +
+
+
Ranking - Farbe getragen
+

+ Durchschnittliche korrekte Farbe je Treffen: +

+ +
+ +
+
+
-
Teilnahme-Ranking
-
@@ -197,6 +190,7 @@ require_once 'inc/header.php'; options: { indexAxis: 'y', responsive: true, + maintainAspectRatio: false, // Wichtig für die Größenanpassung plugins: { legend: { display: false @@ -209,6 +203,22 @@ require_once 'inc/header.php'; scales: { x: { beginAtZero: true + }, + y: { + ticks: { + font: { + size: 10 // Kleinere Schriftgröße für bessere Lesbarkeit auf mobilen Geräten + }, + // Callback, um lange Namen zu kürzen und Überlappungen zu vermeiden + callback: function(value, index, ticks) { + const username = this.getLabelForValue(value); + const maxChars = 15; // Maximale Zeichen auf Mobilgeräten + if (username.length > maxChars) { + return username.substring(0, maxChars) + '...'; + } + return username; + } + } } } } @@ -218,6 +228,62 @@ require_once 'inc/header.php'; document.getElementById('participationChart'), participationConfig ); + + // Daten für "Farbe getragen"-Diagramm + const woreColorData = { + labels: , + datasets: [{ + label: 'Farbe getragen', + data: , + backgroundColor: 'rgba(75, 192, 192, 0.8)', + borderColor: 'rgb(75, 192, 192)', + borderWidth: 1 + }] + }; + + const woreColorConfig = { + type: 'bar', + data: woreColorData, + options: { + indexAxis: 'y', + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: false + }, + title: { + display: true, + text: 'Anzahl der "Farbe getragen"-Einträge pro Benutzer' + } + }, + scales: { + x: { + beginAtZero: true + }, + y: { + ticks: { + font: { + size: 10 + }, + callback: function(value, index, ticks) { + const username = this.getLabelForValue(value); + const maxChars = 15; + if (username.length > maxChars) { + return username.substring(0, maxChars) + '...'; + } + return username; + } + } + } + } + } + }; + + new Chart( + document.getElementById('woreColorChart'), + woreColorConfig + ); });