add new featurs like gamination

This commit is contained in:
Hamza-Ayed
2026-05-08 22:46:34 +03:00
parent 5928695212
commit fc74c20730
4 changed files with 72 additions and 62 deletions

View File

@@ -3,40 +3,46 @@ require_once __DIR__ . '/../../connect.php';
$type = isset($_POST['type']) ? filterRequest("type") : 'trips'; $type = isset($_POST['type']) ? filterRequest("type") : 'trips';
if ($type === 'earnings') { try {
$sql = " if ($type === 'earnings') {
SELECT $sql = "
d.id as driver_id, SELECT
COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name, d.id as driver_id,
d.personal_photo as photoUrl, COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name,
COALESCE(SUM(p.amount), 0) as value d.personal_photo as photoUrl,
FROM `driver` d COALESCE(SUM(r.price_for_driver), 0) as value
JOIN `payments` p ON d.id = p.driverID FROM `driver` d
WHERE p.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY) JOIN `ride` r ON d.id = r.driver_id
GROUP BY d.id WHERE r.status = 'Finished'
ORDER BY value DESC AND r.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
LIMIT 10 GROUP BY d.id
"; ORDER BY value DESC
} else { LIMIT 10
// Default to trips ";
$sql = " } else {
SELECT // Default to trips
d.id as driver_id, $sql = "
COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name, SELECT
d.personal_photo as photoUrl, d.id as driver_id,
COUNT(r.id) as value COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name,
FROM `driver` d d.personal_photo as photoUrl,
JOIN `ride` r ON d.id = r.driver_id COUNT(r.id) as value
WHERE r.status = 'Finished' FROM `driver` d
AND r.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY) JOIN `ride` r ON d.id = r.driver_id
GROUP BY d.id WHERE r.status = 'Finished'
ORDER BY value DESC AND r.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
LIMIT 10 GROUP BY d.id
"; ORDER BY value DESC
} LIMIT 10
";
}
$stmt = $con->prepare($sql); $stmt = $con->prepare($sql);
$stmt->execute(); $stmt->execute();
} catch (PDOException $e) {
error_log("getLeaderboard Error: " . $e->getMessage());
jsonError("Database error occurred");
}
if ($stmt->rowCount() > 0) { if ($stmt->rowCount() > 0) {
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

View File

@@ -3,30 +3,34 @@ require_once __DIR__ . '/../../connect.php';
$driver_id = filterRequest("driver_id"); $driver_id = filterRequest("driver_id");
$sql = " try {
SELECT $sql = "
DATE(r.created_at) as day, SELECT
COUNT(r.id) as trips, DATE(r.created_at) as day,
COALESCE(SUM(p.amount), 0) as earnings, COUNT(r.id) as trips,
COALESCE(SUM(r.duration)/60, 0) as hours COALESCE(SUM(r.price_for_driver), 0) as earnings,
FROM `ride` r COALESCE(SUM(TIMESTAMPDIFF(MINUTE, r.time, r.endtime))/60, 0) as hours
LEFT JOIN `payments` p ON r.id = p.rideId FROM `ride` r
WHERE r.driver_id = :driver_id WHERE r.driver_id = :driver_id
AND r.status = 'Finished' AND r.status = 'Finished'
AND r.created_at >= DATE(NOW()) - INTERVAL 6 DAY AND r.created_at >= DATE(NOW()) - INTERVAL 6 DAY
GROUP BY DATE(r.created_at) GROUP BY DATE(r.created_at)
ORDER BY DATE(r.created_at) ASC ORDER BY DATE(r.created_at) ASC
"; ";
$stmt = $con->prepare($sql); $stmt = $con->prepare($sql);
$stmt->bindParam(':driver_id', $driver_id, PDO::PARAM_INT); $stmt->bindParam(':driver_id', $driver_id, PDO::PARAM_INT);
$stmt->execute(); $stmt->execute();
if ($stmt->rowCount() > 0) { if ($stmt->rowCount() > 0) {
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
jsonSuccess($rows); jsonSuccess($rows);
} else { } else {
// Return empty array instead of error so the app doesn't crash jsonSuccess([]);
jsonSuccess([]); }
} catch (PDOException $e) {
// Return empty but log error
error_log("getWeeklyAggregate Error: " . $e->getMessage());
jsonError("Database error occurred");
} }
?> ?>

View File

@@ -2,10 +2,10 @@
require_once __DIR__ . '/../../connect.php'; require_once __DIR__ . '/../../connect.php';
function generateUniqueCode($con, $length = 7) { function generateUniqueCode($con) {
while (true) { while (true) {
$letters = substr(str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4); $letters = substr(str_shuffle("ABCDEFGHJKLMNPQRSTUVWXYZ"), 0, 2); // Excluded I, O for clarity
$numbers = substr(str_shuffle("0123456789"), 0, 3); $numbers = substr(str_shuffle("23456789"), 0, 3); // Excluded 0, 1 for clarity
$code = $letters . $numbers; $code = $letters . $numbers;
$stmt = $con->prepare("SELECT COUNT(*) FROM invites WHERE inviteCode = ?"); $stmt = $con->prepare("SELECT COUNT(*) FROM invites WHERE inviteCode = ?");
@@ -38,7 +38,7 @@ if ($checkStmt->rowCount() > 0) {
// تحديث الدعوة الحالية // تحديث الدعوة الحالية
$updateSql = "UPDATE `invites` SET `driverId` = :driverId, `expirationTime` = :expirationTime, `createdAt` = NOW() WHERE `id` = :id"; $updateSql = "UPDATE `invites` SET `driverId` = :driverId, `expirationTime` = :expirationTime, `createdAt` = NOW() WHERE `id` = :id";
$updateStmt = $con->prepare($updateSql); $updateStmt = $con->prepare($updateSql);
$expirationTime = date('Y-m-d H:i:s', strtotime('+1 hour')); $expirationTime = date('Y-m-d H:i:s', strtotime('+24 hours'));
$updateStmt->bindParam(':driverId', $driverId, PDO::PARAM_INT); $updateStmt->bindParam(':driverId', $driverId, PDO::PARAM_INT);
$updateStmt->bindParam(':expirationTime', $expirationTime); $updateStmt->bindParam(':expirationTime', $expirationTime);
$updateStmt->bindParam(':id', $existingInvite['id'], PDO::PARAM_INT); $updateStmt->bindParam(':id', $existingInvite['id'], PDO::PARAM_INT);
@@ -59,7 +59,7 @@ if ($checkStmt->rowCount() > 0) {
} else { } else {
// إنشاء دعوة جديدة // إنشاء دعوة جديدة
$inviteCode = generateUniqueCode($con); $inviteCode = generateUniqueCode($con);
$expirationTime = date('Y-m-d H:i:s', strtotime('+1 hour')); $expirationTime = date('Y-m-d H:i:s', strtotime('+24 hours'));
$sql = "INSERT INTO `invites` (`driverId`, `inviterDriverPhone`, `inviteCode`, `expirationTime`, `createdAt`, `isInstall`) $sql = "INSERT INTO `invites` (`driverId`, `inviterDriverPhone`, `inviteCode`, `expirationTime`, `createdAt`, `isInstall`)
VALUES (:driverId, :inviterDriverPhone, :inviteCode, :expirationTime, NOW(), 0)"; VALUES (:driverId, :inviterDriverPhone, :inviteCode, :expirationTime, NOW(), 0)";

View File

@@ -11,7 +11,7 @@ $sql = "SELECT
i.`isInstall`, i.`isInstall`,
d.`id` AS driverInviterId, d.`id` AS driverInviterId,
d.`phone` AS invitorPhone, d.`phone` AS invitorPhone,
d.`name_arabic` AS invitorName, d.`nameArabic` AS invitorName,
COALESCE(r.finishedTrips, 0) AS countOfInvitDriver COALESCE(r.finishedTrips, 0) AS countOfInvitDriver
FROM FROM
`invites` i `invites` i