35667-vm/statistics.php
Flatlogic Bot f1dff12888 3
2025-11-12 18:10:03 +00:00

232 lines
8.1 KiB
PHP

<?php
require_once 'header.php';
try {
$pdo = db();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Fetch data for Discipline
$discipline_stmt = $pdo->query("SELECT discipline, COUNT(*) as count FROM grievances GROUP BY discipline");
$discipline_data = $discipline_stmt->fetchAll(PDO::FETCH_ASSOC);
// Fetch data for Subject
$subject_stmt = $pdo->query("SELECT subject, COUNT(*) as count FROM grievances GROUP BY subject");
$subject_data = $subject_stmt->fetchAll(PDO::FETCH_ASSOC);
// Fetch data for Grievances per Quarter
$quarter_stmt = $pdo->query("SELECT QUARTER(last_updated) as quarter, COUNT(*) as count FROM grievances GROUP BY QUARTER(last_updated)");
$quarter_data = $quarter_stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo '<div class="alert alert-danger">Database error: ' . $e->getMessage() . '</div>';
exit;
}
$discipline_labels = [];
$discipline_values = [];
foreach ($discipline_data as $data) {
$discipline_labels[] = $data['discipline'];
$discipline_values[] = $data['count'];
}
$subject_labels = [];
$subject_values = [];
foreach ($subject_data as $data) {
$subject_labels[] = $data['subject'];
$subject_values[] = $data['count'];
}
$quarter_labels = [];
$quarter_values = [];
foreach ($quarter_data as $data) {
$quarter_labels[] = 'Q' . $data['quarter'];
$quarter_values[] = $data['count'];
}
?>
<div class="container mt-5">
<h2 class="text-center mb-4">Grievance Statistics</h2>
<div class="row">
<div class="col-md-4">
<h4 class="text-center">Discipline</h4>
<canvas id="disciplineChart"></canvas>
</div>
<div class="col-md-4">
<h4 class="text-center">Subject</h4>
<canvas id="subjectChart"></canvas>
</div>
<div class="col-md-4">
<h4 class="text-center">Grievances per Quarter</h4>
<canvas id="quarterChart"></canvas>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
// Discipline Chart
var disciplineCtx = document.getElementById('disciplineChart').getContext('2d');
var disciplineChart = new Chart(disciplineCtx, {
type: 'pie',
data: {
labels: <?php echo json_encode($discipline_labels); ?>,
datasets: [{
label: 'Discipline',
data: <?php echo json_encode($discipline_values); ?>,
backgroundColor: [
'rgba(255, 99, 132, 0.7)',
'rgba(54, 162, 235, 0.7)',
'rgba(255, 206, 86, 0.7)',
'rgba(75, 192, 192, 0.7)',
'rgba(153, 102, 255, 0.7)',
'rgba(255, 159, 64, 0.7)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.label || '';
if (label) {
label += ': ';
}
if (context.parsed !== null) {
label += context.parsed;
const total = context.chart.data.datasets[0].data.reduce((a, b) => a + b, 0);
const percentage = (context.parsed / total * 100).toFixed(2) + '%';
label += ' (' + percentage + ')';
}
return label;
}
}
}
}
}
});
// Subject Chart
var subjectCtx = document.getElementById('subjectChart').getContext('2d');
var subjectChart = new Chart(subjectCtx, {
type: 'pie',
data: {
labels: <?php echo json_encode($subject_labels); ?>,
datasets: [{
label: 'Subject',
data: <?php echo json_encode($subject_values); ?>,
backgroundColor: [
'rgba(255, 99, 132, 0.7)',
'rgba(54, 162, 235, 0.7)',
'rgba(255, 206, 86, 0.7)',
'rgba(75, 192, 192, 0.7)',
'rgba(153, 102, 255, 0.7)',
'rgba(255, 159, 64, 0.7)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.label || '';
if (label) {
label += ': ';
}
if (context.parsed !== null) {
label += context.parsed;
const total = context.chart.data.datasets[0].data.reduce((a, b) => a + b, 0);
const percentage = (context.parsed / total * 100).toFixed(2) + '%';
label += ' (' + percentage + ')';
}
return label;
}
}
}
}
}
});
// Quarter Chart
var quarterCtx = document.getElementById('quarterChart').getContext('2d');
var quarterChart = new Chart(quarterCtx, {
type: 'pie',
data: {
labels: <?php echo json_encode($quarter_labels); ?>,
datasets: [{
label: 'Grievances per Quarter',
data: <?php echo json_encode($quarter_values); ?>,
backgroundColor: [
'rgba(255, 99, 132, 0.7)',
'rgba(54, 162, 235, 0.7)',
'rgba(255, 206, 86, 0.7)',
'rgba(75, 192, 192, 0.7)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.label || '';
if (label) {
label += ': ';
}
if (context.parsed !== null) {
label += context.parsed;
const total = context.chart.data.datasets[0].data.reduce((a, b) => a + b, 0);
const percentage = (context.parsed / total * 100).toFixed(2) + '%';
label += ' (' + percentage + ')';
}
return label;
}
}
}
}
}
});
});
</script>
<?php
require_once 'footer.php';
?>