Files
2026-08-20 18:39:37 +07:00

107 lines
2.5 KiB
PHP

<?php
header('Content-Type: application/json');
include '../config/connect.php';
try {
// ===============================
// VALIDASI INPUT
// ===============================
if (!isset($_GET['server']) || !isset($_GET['kategori'])) {
echo json_encode([
"error" => true,
"message" => "Parameter tidak lengkap"
]);
exit;
}
$server = trim($_GET['server']);
$kategori = trim($_GET['kategori']);
$status = isset($_GET['status']) ? strtolower(trim($_GET['status'])) : 'semua';
if ($server === '' || $kategori === '') {
echo json_encode([
"error" => true,
"message" => "Parameter kosong"
]);
exit;
}
// ===============================
// BASE QUERY (WHITELIST STATUS)
// ===============================
$sql = "
SELECT keterangan, SUM(jumlah) as jumlah
FROM v_analisa_onu_per_server
WHERE id_data_server = :server
AND kategori COLLATE utf8mb4_general_ci = :kategori
AND LOWER(status) IN ('aktif','tidak aktif')
";
$params = [
':server' => $server,
':kategori' => $kategori
];
// ===============================
// FILTER STATUS (JIKA DIPILIH)
// ===============================
if ($status === 'aktif' || $status === 'tidak aktif') {
$sql .= " AND LOWER(status) = :status";
$params[':status'] = $status;
}
$sql .= "
GROUP BY keterangan
ORDER BY jumlah DESC
";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// ===============================
// FORMAT DATA
// ===============================
$labels = [];
$values = [];
$total = 0;
$empty = 0;
foreach ($data as $row) {
$keterangan = $row['keterangan'] ?? 'UNKNOWN';
$jumlah = (int) $row['jumlah'];
$labels[] = $keterangan;
$values[] = $jumlah;
$total += $jumlah;
if (strtoupper(trim($keterangan)) === 'BELUM DIISI') {
$empty += $jumlah;
}
}
echo json_encode([
"error" => false,
"labels" => $labels,
"values" => $values,
"summary" => [
"total" => $total,
"empty" => $empty,
"filled" => $total - $empty
]
]);
} catch (PDOException $e) {
echo json_encode([
"error" => true,
"message" => "Database error",
"detail" => $e->getMessage()
]);
}