Update: 2026-08-08 12:58:16
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/**
|
||||
* fuel/stations.php — المحطات الشريكة
|
||||
*
|
||||
* قائمة للسائق، مرتّبة بالقرب إن أرسل موقعه. لا يُرجع مفاتيح المحطات
|
||||
* ولا أي حقل تشغيلي — القائمة تُعرض في تطبيق السائق، وكل ما يخرج إليه
|
||||
* يجب افتراض أنه علنيّ.
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/../connect.php';
|
||||
require_once __DIR__ . '/functions.php';
|
||||
|
||||
$driverId = $user_id ?? '';
|
||||
if (empty($driverId) || ($role ?? '') !== 'driver') {
|
||||
jsonError('Unauthorized', 401);
|
||||
}
|
||||
|
||||
$lat = filterRequest('lat', 'numeric');
|
||||
$lng = filterRequest('lng', 'numeric');
|
||||
|
||||
try {
|
||||
if ($lat !== null && $lng !== null) {
|
||||
// مسافة تقريبية بفرق الإحداثيات لا Haversine: الغرض ترتيب قائمة
|
||||
// محطات في مدينة واحدة، والفارق بين الطريقتين على هذا النطاق
|
||||
// لا يغيّر ترتيباً — بينما الحساب المثلثي على كل صف يكلّف بلا مقابل.
|
||||
$st = $con->prepare("
|
||||
SELECT id, name_ar, chain_name, city, address, lat, lng, phone,
|
||||
discount_percent,
|
||||
(POW(lat - ?, 2) + POW(lng - ?, 2)) AS dist
|
||||
FROM fuel_stations
|
||||
WHERE is_active = 1
|
||||
ORDER BY (lat IS NULL), dist ASC
|
||||
LIMIT 50
|
||||
");
|
||||
$st->execute([(float) $lat, (float) $lng]);
|
||||
} else {
|
||||
$st = $con->query("
|
||||
SELECT id, name_ar, chain_name, city, address, lat, lng, phone,
|
||||
discount_percent
|
||||
FROM fuel_stations
|
||||
WHERE is_active = 1
|
||||
ORDER BY city ASC, name_ar ASC
|
||||
LIMIT 50
|
||||
");
|
||||
}
|
||||
|
||||
$rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
||||
} catch (PDOException $e) {
|
||||
error_log('[fuel/stations] ' . $e->getMessage());
|
||||
jsonError('Server error');
|
||||
}
|
||||
|
||||
$out = array_map(static fn(array $r): array => [
|
||||
'id' => (int) $r['id'],
|
||||
'name' => $r['name_ar'],
|
||||
'chain' => $r['chain_name'],
|
||||
'city' => $r['city'],
|
||||
'address' => $r['address'],
|
||||
'lat' => $r['lat'] !== null ? (float) $r['lat'] : null,
|
||||
'lng' => $r['lng'] !== null ? (float) $r['lng'] : null,
|
||||
'phone' => $r['phone'],
|
||||
'discount_percent' => (float) $r['discount_percent'],
|
||||
], $rows);
|
||||
|
||||
jsonSuccess(['stations' => $out], 'success');
|
||||
Reference in New Issue
Block a user