66 lines
2.4 KiB
PHP
66 lines
2.4 KiB
PHP
<?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');
|