'Unauthorized: Admin access required']); exit; } $driver_id = filterRequest("driver_id"); if (empty($driver_id)) { jsonError("driver_id is required", 400); } $sql = "SELECT `driver`.`id`, `driver`.`phone`, `driver`.`email`, `driver`.`gender`, `driver`.`status`, `driver`.`birthdate`, `driver`.`site`, `driver`.`first_name`, `driver`.`last_name`, `driver`.`employmentType`, `driver`.`maritalStatus`, `driver`.`created_at`, `driver`.`updated_at`, ( SELECT COUNT(*) FROM `driver` ) AS countPassenger, ( SELECT CAST(AVG(`rating`) AS DECIMAL(10, 2)) FROM `ratingPassenger` WHERE `ratingPassenger`.`driverID` = `driver`.`id` ) AS ratingPassenger, ( SELECT COUNT(*) FROM `ratingPassenger` WHERE `ratingPassenger`.`driverID` = `driver`.`id` ) AS countDriverRate, ( SELECT COUNT(*) FROM `canecl` WHERE `canecl`.`driverID` = `driver`.`id` ) AS countPassengerCancel, ( SELECT CAST(AVG(`rating`) AS DECIMAL(10, 2)) FROM `ratingDriver` WHERE `ratingDriver`.`driver_id` = `driver`.`id` ) AS passengerAverageRating, ( SELECT COUNT(*) FROM `ratingDriver` WHERE `ratingDriver`.`driver_id` = `driver`.`id` ) AS countPassengerRate, ( SELECT COUNT(*) FROM `ride` WHERE `ride`.`driver_id` = `driver`.`id` ) AS countPassengerRide, ( SELECT `token` FROM `driverToken` WHERE `driverToken`.`captain_id` = `driver`.`id` LIMIT 1 ) AS passengerToken FROM `driver` WHERE `driver`.`id` = :driver_id ORDER BY passengerAverageRating DESC LIMIT 10"; try { $stmt = $con->prepare($sql); $stmt->bindParam(':driver_id', $driver_id); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { // بلا هذا الالتقاط كان الاستثناء يُنهي السكربت فيصل للعميل جسم فارغ // بحالة HTTP 200، فيظهر كـ "رد غير JSON". error_log("[getCaptainDetailsById] " . $e->getMessage()); jsonError("Could not read the captain record: " . $e->getMessage(), 500); } // فك تشفير الحقول الحساسة بعد الجلب foreach ($result as &$row) { foreach (['phone','email','gender','birthdate','site','first_name','last_name','employmentType','maritalStatus'] as $f) { if (!array_key_exists($f, $row)) $row[$f] = null; } $row['phone'] = $encryptionHelper->decryptData($row['phone']); $row['email'] = $encryptionHelper->decryptData($row['email']); $row['gender'] = $encryptionHelper->decryptData($row['gender']); $row['birthdate'] = $encryptionHelper->decryptData($row['birthdate']); $row['site'] = $encryptionHelper->decryptData($row['site']); $row['first_name'] = $encryptionHelper->decryptData($row['first_name']); $row['last_name'] = $encryptionHelper->decryptData($row['last_name']); $row['employmentType'] = $encryptionHelper->decryptData($row['employmentType']); $row['maritalStatus'] = $encryptionHelper->decryptData($row['maritalStatus']); } if ($stmt->rowCount() > 0) { jsonSuccess($result); } else { jsonError("No records found"); } ?>