قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ. الخريطة: backend · payment_server · loction_server · ride_server · passenger_server · docker · dashboard · stress_test → الجذر siro_rider → apps/rider siro_driver → apps/driver siro_admin → dashboards/admin siro_service → dashboards/service android_bot → apps/android_bot socialBot → apps/socialBot نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب) لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً: كل ما يلي يصير فرقاً مقروءاً مقابل المصدر. لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز، سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh (ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و dashboards/transit-web). ⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة: 1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر): كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner. 2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist) يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً. 3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع → يجب ضمّ الحزم داخله أسوة بـ apps/rider. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
61 lines
2.1 KiB
PHP
61 lines
2.1 KiB
PHP
<?php
|
|
// ============================================================
|
|
// osrm_routing.php
|
|
// Helper functions for OpenStreetMap Routing Machine (OSRM)
|
|
// Used to estimate accurate distance (km) and duration (mins)
|
|
// ============================================================
|
|
|
|
/**
|
|
* Get Distance and Duration between two coordinates using public OSRM server.
|
|
* Note: If you host your own OSRM, replace the $osrmBaseUrl.
|
|
*
|
|
* @param float $startLat
|
|
* @param float $startLng
|
|
* @param float $endLat
|
|
* @param float $endLng
|
|
* @param string $countryCode (e.g. 'JO', 'SY', 'EG')
|
|
* @return array|null Returns ['distance_km' => float, 'duration_min' => float] or null on failure.
|
|
*/
|
|
function getOsrmRouteDetails($startLat, $startLng, $endLat, $endLng, $countryCode = 'JO') {
|
|
// Intaleq Maps SaaS server handles all countries (Jordan, Syria, Egypt)
|
|
$baseUrl = "https://map-saas.intaleqapp.com/api/maps/route";
|
|
|
|
$queryParams = http_build_query([
|
|
'fromLat' => $startLat,
|
|
'fromLng' => $startLng,
|
|
'toLat' => $endLat,
|
|
'toLng' => $endLng
|
|
]);
|
|
|
|
$url = "{$baseUrl}?{$queryParams}";
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 5 seconds timeout
|
|
|
|
// Add Intaleq API Key Header
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
"x-api-key: in_9478b32836d19cff73db3063"
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
if ($httpCode === 200 && $response) {
|
|
$data = json_decode($response, true);
|
|
if (isset($data['distance']) && isset($data['duration'])) {
|
|
$distanceMeters = (float)$data['distance'];
|
|
$durationSeconds = isset($data['trafficAwareDuration']) ? (float)$data['trafficAwareDuration'] : (float)$data['duration'];
|
|
|
|
return [
|
|
'distance_km' => round($distanceMeters / 1000, 2),
|
|
'duration_min' => round($durationSeconds / 60, 2)
|
|
];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|