Files
Siro/backend/Admin/safety/list_incidents.php
T

53 lines
2.2 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// ============================================================
// safety/list_incidents.php — قائمة بلاغات السلامة للوحة الإدارة
//
// ‏قراءة خالصة. الترتيب: المفتوح أولاً ثم الأحدث — غرفة العمليات تحتاج
// ‏ما لم يُعالَج بعد، لا أحدث ما وقع.
// ============================================================
// ‏تحت Admin/ عمداً: بوّابة connect.php المسارية تفرض دور admin أو
// ‏super_admin على كل ما تحت هذا المجلد. لو بقي في safety/ لقرأه أي حامل
// ‏JWT صالح — بما فيه راكب — وفيه معرّفات ومواقع أطراف الحادثة.
require_once __DIR__ . '/../../connect.php';
$status = filterRequest("status"); // open | acknowledged | resolved | false_alarm | (فارغ = الكل)
$limit = (int) (filterRequest("limit", 'int') ?: 50);
$limit = max(1, min(200, $limit));
$allowed = ['open', 'acknowledged', 'resolved', 'false_alarm'];
try {
if ($status && in_array($status, $allowed, true)) {
$stmt = $con->prepare("
SELECT * FROM safety_incidents
WHERE status = ?
ORDER BY created_at DESC
LIMIT $limit
");
$stmt->execute([$status]);
} else {
// ‏FIELD() يضع 'open' أولاً مهما كان تاريخه — بلاغ مفتوح من أمس
// ‏أهم من بلاغ عولج قبل دقيقة.
$stmt = $con->query("
SELECT * FROM safety_incidents
ORDER BY FIELD(status, 'open', 'acknowledged', 'resolved', 'false_alarm'),
created_at DESC
LIMIT $limit
");
}
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// ‏عدّاد المفتوح — الرقم الذي يظهر كشارة على اللوحة
$openCount = (int) $con->query(
"SELECT COUNT(*) FROM safety_incidents WHERE status = 'open'"
)->fetchColumn();
jsonSuccess(['open_count' => $openCount, 'incidents' => $rows], "ok");
} catch (PDOException $e) {
error_log("[safety/list] " . $e->getMessage());
jsonError("DB Error", 500);
}