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:
@@ -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']);
|
||||
|
||||
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(){
|
||||
$query = "SELECT * FROM main_contact ORDER BY last_interaction DESC LIMIT 20";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
@@ -141,4 +161,49 @@ $GLOBALS['log_language'] = $language;
|
||||
</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>
|
||||
|
||||
Reference in New Issue
Block a user