Dashboard: Anmelde-Statistik als Balkendiagramm hinzufügen

Zeigt anonyme Anmeldungen der letzten 30 Tage als Bar-Chart
(Chart.js, bereits im Admin geladen). Nur Tagessummen sichtbar,
keine Rückschlüsse auf einzelne Nutzer möglich.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 08:52:16 +02:00
parent b2a3a23116
commit 5c585caeba

View File

@@ -32,6 +32,26 @@ function count_entrys($table){
$GLOBALS["pdo_conn"] = new PDO("mysql:host=".$GLOBALS['myservername'].";dbname=".$GLOBALS['mydb'].';charset=utf8', $GLOBALS['mylogin'], $GLOBALS['mypass']); $GLOBALS["pdo_conn"] = new PDO("mysql:host=".$GLOBALS['myservername'].";dbname=".$GLOBALS['mydb'].';charset=utf8', $GLOBALS['mylogin'], $GLOBALS['mypass']);
function getLoginChartData($days = 30) {
$rows = [];
$result = @mysqli_query($GLOBALS['mysql_con'],
"SELECT login_date, COUNT(*) AS cnt FROM stat_login_daily
WHERE login_date >= DATE_SUB(CURDATE(), INTERVAL " . (int)$days . " DAY)
GROUP BY login_date"
);
while ($row = @mysqli_fetch_assoc($result)) {
$rows[$row['login_date']] = (int)$row['cnt'];
}
$labels = [];
$values = [];
for ($i = $days - 1; $i >= 0; $i--) {
$date = date('Y-m-d', strtotime("-{$i} days"));
$labels[] = date('d.m.', strtotime($date));
$values[] = $rows[$date] ?? 0;
}
return ['labels' => $labels, 'values' => $values];
}
function listUsers(){ function listUsers(){
$query = "SELECT * FROM main_contact ORDER BY last_interaction DESC LIMIT 20"; $query = "SELECT * FROM main_contact ORDER BY last_interaction DESC LIMIT 20";
$result = @mysqli_query($GLOBALS['mysql_con'], $query); $result = @mysqli_query($GLOBALS['mysql_con'], $query);
@@ -141,4 +161,49 @@ $GLOBALS['log_language'] = $language;
</div> </div>
</div> </div>
</div> </div>
<!-- Anonyme Login-Statistik -->
<?php $loginChart = getLoginChartData(30); ?>
<div class="dashboard_overview">
<h2 class="line always_white_no">Anmeldungen (letzte 30 Tage)</h2>
<div class="dashboard_content" style="padding: 1rem 0;">
<canvas id="loginStatsChart" style="max-height:220px;"></canvas>
</div>
</div>
<script>
(function() {
var ctx = document.getElementById('loginStatsChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: <?= json_encode($loginChart['labels']) ?>,
datasets: [{
label: 'Anmeldungen',
data: <?= json_encode($loginChart['values']) ?>,
backgroundColor: 'rgba(0, 120, 212, 0.7)',
borderColor: 'rgba(0, 120, 212, 1)',
borderWidth: 1,
borderRadius: 3
}]
},
options: {
responsive: true,
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: function(ctx) { return ctx.parsed.y + ' Anmeldung(en)'; }
}
}
},
scales: {
y: {
beginAtZero: true,
ticks: { stepSize: 1, precision: 0 }
}
}
}
});
})();
</script>
</div> </div>