prepare("SELECT * FROM safety_incidents WHERE id = ? LIMIT 1"); $stmt->execute([$incidentId]); $incident = $stmt->fetch(PDO::FETCH_ASSOC); if (!$incident) { jsonError("Incident not found", 404); } $con->prepare(" UPDATE safety_incidents SET status = ?, acknowledged_by = ?, acknowledged_at = NOW(), resolution_note = ? WHERE id = ? ")->execute([ $newStatus, $user_id ?? 'admin', $note ? mb_substr($note, 0, 500) : null, $incidentId, ]); // ── رفع التجميد ───────────────────────────────────────── // ‏افتراضياً يُرفع عند الإغلاق (resolved / false_alarm) ولا يُرفع عند // ‏مجرد الاطلاع (acknowledged). ويمكن للمراجع أن يقرر صراحةً. $shouldRelease = $releaseHold !== null ? in_array(strtolower((string) $releaseHold), ['1', 'true', 'yes'], true) : in_array($newStatus, ['resolved', 'false_alarm'], true); $released = false; $driverId = $incident['driver_id'] ?? null; if ($shouldRelease && $driverId) { try { // ‏نرفع فقط إن كان التجميد من هذا البلاغ تحديداً: سائق عليه // ‏بلاغ ثانٍ أحدث يجب ألا يُفرَج عنه بإغلاق الأقدم. $upd = $con->prepare(" UPDATE driver SET safetyHoldIncidentId = NULL WHERE id = ? AND safetyHoldIncidentId = ? "); $upd->execute([$driverId, $incidentId]); if ($upd->rowCount() > 0) { if (isset($redisLocation) && $redisLocation) { $redisLocation->del("driver:$driverId:safety_hold"); } $released = true; } } catch (Throwable $e) { error_log("[safety/update] تعذّر رفع تجميد السائق $driverId: " . $e->getMessage()); } } error_log("[safety] بلاغ #$incidentId → $newStatus بواسطة " . ($user_id ?? 'admin') . ($released ? " (رُفع التجميد)" : "")); jsonSuccess([ 'incident_id' => $incidentId, 'status' => $newStatus, 'hold_released' => $released, ], "Incident updated"); } catch (PDOException $e) { error_log("[safety/update] " . $e->getMessage()); jsonError("DB Error", 500); }