Compare commits

3 Commits
4 changed files with 37 additions and 60 deletions
+3 -3
View File
@@ -84,10 +84,10 @@ try {
// ── المحاولة الثانية: طريقة قديمة (قيم مشفرة) للتوافق ─ // ── المحاولة الثانية: طريقة قديمة (قيم مشفرة) للتوافق ─
$oldParts = [ $oldParts = [
$driver['id'], $driver['id'],
$encryptionHelper->encryptData(trim($decPhone)), $driver['phone'],
]; ];
if (!empty($decNat)) { if (!empty($driver['national_number'])) {
$oldParts[] = $encryptionHelper->encryptData(trim($decNat)); $oldParts[] = $driver['national_number'];
} }
$oldString = implode('|', $oldParts); $oldString = implode('|', $oldParts);
$oldSecret = hash_hmac('sha256', $oldString, $pepper, true); $oldSecret = hash_hmac('sha256', $oldString, $pepper, true);
+9
View File
@@ -53,6 +53,15 @@ try {
]; ];
$con = new PDO($dsn, $user, $pass, $options); $con = new PDO($dsn, $user, $pass, $options);
// Ride DB Connection (for cross-db queries)
$rideDbname = getenv('DB_RIDE_NAME') ?: 'rideDB';
$rideDbHost = getenv('DB_RIDE_HOST') ?: (getenv('DB_HOST') ?: 'mysql');
$rideUser = getenv('DB_RIDE_USER') ?: 'root';
$ridePass = getenv('DB_RIDE_PASS') ?: getenv('MYSQL_ROOT_PASSWORD') ?: '';
$dsnRide = "mysql:host=$rideDbHost;dbname=$rideDbname;charset=utf8mb4";
$conRide = new PDO($dsnRide, $rideUser, $ridePass, $options);
// 5. JWT Authentication // 5. JWT Authentication
include __DIR__ . "/functions.php"; include __DIR__ . "/functions.php";
$decodedToken = authenticateJWT(); $decodedToken = authenticateJWT();
@@ -2,63 +2,31 @@
include "../../connect.php"; include "../../connect.php";
$driverID = filterRequest("driverID"); $driverID = filterRequest("driverID");
$sql = "SELECT
(
SELECT
COUNT(*)
FROM
`ride`
WHERE
LOWER(`ride`.`status`) IN ('finished','completed')
AND `ride`.`created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR AND CURRENT_DATE() + INTERVAL 10 HOUR
AND `ride`.`driver_id` = :driverID
) AS morning_count,
(
SELECT
COUNT(*)
FROM
`ride`
WHERE
LOWER(`ride`.`status`) IN ('finished','completed')
AND `ride`.`created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR AND CURRENT_DATE() + INTERVAL 18 HOUR
AND `ride`.`driver_id` = :driverID
) AS afternoon_count,
(
SELECT
COALESCE(SUM(amount), 0) AS total_amount
FROM
payments
WHERE
isGiven = 'waiting' AND `driverID` = :driverID
) AS total_amount,
(
SELECT
COALESCE(SUM(price), 0) AS total_amount
FROM
ride
WHERE
`driver_id` = :driverID
AND LOWER(`ride`.`status`) IN ('finished','completed')
AND `ride`.`created_at` > CURRENT_DATE() - INTERVAL 1 WEEK
) AS total_amount_last_week
FROM
dual
LIMIT 1;
";
/**
* كان معرّف السائق يُدمج في نص الاستعلام مباشرةً (حقن SQL)، وكانت الحالة
* تُطابق 'Finished' فقط بينما خط الرحلات الحالي يكتب 'completed' — فتظهر
* أرباح السائق ورحلاته أصفاراً.
*/
try { try {
$stmt = $con->prepare($sql); // 1. Get ride stats using $conRide
$stmt->bindValue(':driverID', $driverID); $sqlRide = "SELECT
$stmt->execute(); (SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR AND CURRENT_DATE() + INTERVAL 10 HOUR AND `driver_id` = :driverID) AS morning_count,
(SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR AND CURRENT_DATE() + INTERVAL 18 HOUR AND `driver_id` = :driverID) AS afternoon_count,
(SELECT COALESCE(SUM(price), 0) FROM `ride` WHERE `driver_id` = :driverID AND LOWER(`status`) IN ('finished','completed') AND `created_at` > CURRENT_DATE() - INTERVAL 1 WEEK) AS total_amount_last_week
FROM dual";
if ($stmt->rowCount() > 0) { $stmtRide = $conRide->prepare($sqlRide);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmtRide->bindValue(':driverID', $driverID);
$stmtRide->execute();
$rideStats = $stmtRide->fetch(PDO::FETCH_ASSOC) ?: [];
// 2. Get payment stats using $con
$sqlPayment = "SELECT COALESCE(SUM(amount), 0) AS total_amount FROM payments WHERE isGiven = 'waiting' AND `driverID` = :driverID";
$stmtPayment = $con->prepare($sqlPayment);
$stmtPayment->bindValue(':driverID', $driverID);
$stmtPayment->execute();
$paymentStats = $stmtPayment->fetch(PDO::FETCH_ASSOC) ?: [];
// 3. Combine
if (!empty($rideStats) || !empty($paymentStats)) {
$row = [
array_merge($rideStats, $paymentStats)
];
printSuccess($row); printSuccess($row);
} else { } else {
printFailure("No wallet record found"); printFailure("No wallet record found");
@@ -7,13 +7,13 @@ $sql = "SELECT
FROM FROM
`ride` `ride`
WHERE WHERE
LOWER(`ride`.`status`) IN ('finished','completed') LOWER(`status`) IN ('finished','completed')
AND driver_id = :driver_id AND driver_id = :driver_id
AND created_at >= CURDATE(); AND created_at >= CURDATE();
"; ";
// كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL. // كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL.
try { try {
$stmt = $con->prepare($sql); $stmt = $conRide->prepare($sql);
$stmt->bindValue(':driver_id', $driver_id); $stmt->bindValue(':driver_id', $driver_id);
$stmt->execute(); $stmt->execute();