53 lines
2.2 KiB
PHP
53 lines
2.2 KiB
PHP
<?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);
|
||
}
|