Update: 2026-08-03 13:37:04

This commit is contained in:
Hamza-Ayed
2026-08-03 13:37:04 +03:00
parent 79333a4bee
commit dbf1e7870f
3 changed files with 31 additions and 8 deletions
+9 -1
View File
@@ -10,7 +10,15 @@ if ($role !== 'admin' && $role !== 'super_admin') {
exit; exit;
} }
$driverId = filterRequest("id"); // filterRequest() تقرأ من POST أو JSON body فقط ولا تلمس $_GET
// (core/helpers.php). شاشة مراجعة الوثائق تنادي هذه النقطة بـ
// ?id=... في الـ query string، فكانت تُرجع "driver_id is required"
// دائماً رغم إرسال المعرّف. نقبل الشكلين، ونقبل driver_id أيضاً
// لأن رسالة الخطأ نفسها تسمّيه هكذا.
$driverId = filterRequest("id")
?: filterRequest("driver_id")
?: (isset($_GET['id']) ? trim((string) $_GET['id']) : null)
?: (isset($_GET['driver_id']) ? trim((string) $_GET['driver_id']) : null);
if (empty($driverId)) { if (empty($driverId)) {
jsonError("driver_id is required."); jsonError("driver_id is required.");
+7
View File
@@ -44,6 +44,12 @@ if (!$key) {
$iv = getenv('initializationVector'); // 16 bytes $iv = getenv('initializationVector'); // 16 bytes
// ‏الصنف نفسه معرَّف أيضاً في core/Security/EncryptionHelper.php، وأي ملف
// ‏يحمّل bootstrap.php ثم يصل إلى هنا كان ينهار بـ "Cannot declare class
// ‏EncryptionHelper, because the name is already in use" — وهو ما أسقط
// ‏blacklist_manager.php. نُبقي أول تعريف محمَّل (النسخة الحديثة في core)
// ‏ونتخطّى هذه النسخة القديمة المتروكة للتوافقية.
if (!class_exists('EncryptionHelper', false)) {
class EncryptionHelper { class EncryptionHelper {
private $key; private $key;
private $iv; private $iv;
@@ -160,6 +166,7 @@ class EncryptionHelper {
return $decrypted; return $decrypted;
} }
} }
} // نهاية حارس class_exists
// ✅ Load the key and IV from .env or use default values // ✅ Load the key and IV from .env or use default values
// ✅ Ensure the lengths are correct // ✅ Ensure the lengths are correct
@@ -540,16 +540,24 @@ class _AdminHomePageState extends State<AdminHomePage>
children: [ children: [
Icon(Icons.schedule_rounded, color: cs.primary, size: 18), Icon(Icons.schedule_rounded, color: cs.primary, size: 18),
const SizedBox(width: 8), const SizedBox(width: 8),
Text('توزيع الرحلات حسب الوقت', // العنوان مرن والعدد ثابت: بدون Expanded كان مجموع
style: TextStyle( // العرضين يتجاوز الحاوية بكسور البكسل في العربية
color: cs.onSurface, // (فاض 0.313 بكسل عند 1742 رحلة).
fontSize: 13, Expanded(
fontWeight: FontWeight.w600)), child: Text('توزيع الرحلات حسب الوقت',
const Spacer(), maxLines: 1,
if (total > 0) overflow: TextOverflow.ellipsis,
style: TextStyle(
color: cs.onSurface,
fontSize: 13,
fontWeight: FontWeight.w600)),
),
if (total > 0) ...[
const SizedBox(width: 8),
Text('${total.toInt()} رحلة', Text('${total.toInt()} رحلة',
style: TextStyle( style: TextStyle(
color: cs.onSurfaceVariant, fontSize: 11)), color: cs.onSurfaceVariant, fontSize: 11)),
],
], ],
), ),
const SizedBox(height: 16), const SizedBox(height: 16),