Files
Siro/backend/ride/rides/getRideOrderIDNew.php
2026-06-12 20:40:40 +03:00

148 lines
5.5 KiB
PHP

<?php
// نقوم بتضمين ملف الاتصال المعدل الذي يحتوي على $con (الرئيسي) و $con_ride (الرحلات)
require_once __DIR__ . '/../../get_connect.php';
// استلام البيانات (يمكن استلام ID الرحلة أو ID الراكب)
$passengerID = filterRequest("passengerID");
$rideID = filterRequest("id"); // إضافة استقبال متغير رقم الرحلة
try {
// =================================================================
// 1. الخطوة الأولى: تحديد استراتيجية البحث (بواسطة رقم الرحلة أو الراكب)
// =================================================================
$sqlRide = "SELECT
id,
start_location,
end_location,
date,
driver_id,
passenger_id,
price,
status,
created_at,
DriverIsGoingToPassenger,
rideTimeStart,
rideTimeFinish,
price_for_driver,
distance
FROM ride ";
// المنطق الجديد:
// إذا تم إرسال rideID، نبحث عن الرحلة المحددة بدقة (تجنباً لأي تضارب)
// إذا لم يتم إرساله، نبحث عن أحدث رحلة للراكب (للتتبع المباشر)
if (!empty($rideID)) {
$sqlRide .= "WHERE id = :rideID";
} else {
$sqlRide .= "WHERE passenger_id = :passengerID ORDER BY id DESC LIMIT 1";
}
// نستخدم المتغير $con_ride (سيرفر الرحلات)
$stmtRide = $con_ride->prepare($sqlRide);
// ربط المتغيرات حسب نوع البحث
if (!empty($rideID)) {
$stmtRide->bindParam(':rideID', $rideID);
} else {
$stmtRide->bindParam(':passengerID', $passengerID);
}
$stmtRide->execute();
$rideData = $stmtRide->fetch(PDO::FETCH_ASSOC);
// إذا لم يتم العثور على رحلة في سيرفر الرحلات، نوقف العملية
if (!$rideData) {
echo json_encode(["status" => "failure", "message" => "No ride found"]);
exit;
}
// =================================================================
// 2. الخطوة الثانية: جلب البيانات الثابتة (سائق، سيارة، تقييم) من السيرفر الرئيسي ($con)
// نستخدم المعرفات التي حصلنا عليها من نتيجة الاستعلام الأول
// =================================================================
$driverID = $rideData['driver_id'];
$pID = $rideData['passenger_id']; // نأخذ معرف الراكب من الرحلة نفسها لضمان التطابق
// ملاحظة: استخدام :driverID_Sub في الاستعلام الفرعي لتجنب أخطاء PDO
$sqlDetails = "SELECT
passengers.first_name AS passengerName,
passengers.last_name,
CarRegistration.make,
CarRegistration.model,
CarRegistration.car_plate,
CarRegistration.year,
CarRegistration.color,
CarRegistration.color_hex,
driver.first_name AS driverName,
driver.gender,
driver.phone,
(
SELECT ROUND(AVG(ratingDriver.rating), 2)
FROM ratingDriver
WHERE ratingDriver.driver_id = :driverID_Sub
) AS ratingDriver,
driverToken.token AS token
FROM driver
LEFT JOIN passengers ON passengers.id = :passengerID
LEFT JOIN CarRegistration ON CarRegistration.driverID = driver.id
LEFT JOIN driverToken ON driverToken.captain_id = driver.id
WHERE driver.id = :driverID";
// نستخدم المتغير الأصلي $con للسيرفر الرئيسي
$stmtDetails = $con->prepare($sqlDetails);
// نربط المتغيرات
$stmtDetails->bindParam(':driverID', $driverID);
$stmtDetails->bindParam(':driverID_Sub', $driverID);
$stmtDetails->bindParam(':passengerID', $pID);
$stmtDetails->execute();
$detailsData = $stmtDetails->fetch(PDO::FETCH_ASSOC);
// =================================================================
// 3. الخطوة الثالثة: دمج البيانات وتجهيز الرد
// =================================================================
$finalData = [];
if ($detailsData) {
// دمج مصفوفة الرحلة (من سيرفر الرحلات) مع مصفوفة التفاصيل (من الرئيسي)
$finalData = array_merge($rideData, $detailsData);
} else {
// في حال كانت الرحلة بدون سائق بعد، نكتفي ببيانات الرحلة
$finalData = $rideData;
}
// =================================================================
// 4. فك التشفير (Decrypt)
// =================================================================
if ($finalData) {
$fieldsToDecrypt = ['driverName', 'gender', 'phone', 'car_plate', 'passengerName', 'last_name', 'token'];
foreach ($fieldsToDecrypt as $field) {
if (!empty($finalData[$field])) {
$finalData[$field] = $encryptionHelper->decryptData($finalData[$field]);
}
}
}
echo json_encode([
"status" => "success",
"data" => $finalData
]);
} catch (Exception $e) {
error_log("API Error: " . $e->getMessage());
http_response_code(500);
echo json_encode(["status" => "failure", "message" => "Server Error: " . $e->getMessage()]);
}
?>