diff --git a/backend/Admin/AdminCaptain/get.php b/backend/Admin/AdminCaptain/get.php index efe1815c..00837d28 100644 --- a/backend/Admin/AdminCaptain/get.php +++ b/backend/Admin/AdminCaptain/get.php @@ -67,15 +67,15 @@ $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // فك تشفير الحقول الحساسة foreach ($result as &$row) { - $row['phone'] = $encryptionHelper->decryptData($row['phone']); - $row['email'] = $encryptionHelper->decryptData($row['email']); - $row['gender'] = $encryptionHelper->decryptData($row['gender']); - $row['birthdate'] = $encryptionHelper->decryptData($row['birthdate']); - $row['site'] = $encryptionHelper->decryptData($row['site']); - $row['first_name'] = $encryptionHelper->decryptData($row['first_name']); - $row['last_name'] = $encryptionHelper->decryptData($row['last_name']); - $row['employmentType'] = $encryptionHelper->decryptData($row['employmentType']); - $row['maritalStatus'] = $encryptionHelper->decryptData($row['maritalStatus']); + $row['phone'] = $encryptionHelper->decryptData($row['phone'] ?? '') ?: ($row['phone'] ?? ''); + $row['email'] = $encryptionHelper->decryptData($row['email'] ?? '') ?: ($row['email'] ?? ''); + $row['gender'] = $encryptionHelper->decryptData($row['gender'] ?? '') ?: ($row['gender'] ?? 'unknown yet'); + $row['birthdate'] = $encryptionHelper->decryptData($row['birthdate'] ?? '') ?: ($row['birthdate'] ?? 'unknown yet'); + $row['site'] = $encryptionHelper->decryptData($row['site'] ?? '') ?: ($row['site'] ?? 'unknown yet'); + $row['first_name'] = $encryptionHelper->decryptData($row['first_name'] ?? '') ?: ($row['first_name'] ?? ''); + $row['last_name'] = $encryptionHelper->decryptData($row['last_name'] ?? '') ?: ($row['last_name'] ?? ''); + $row['employmentType'] = $encryptionHelper->decryptData($row['employmentType'] ?? '') ?: ($row['employmentType'] ?? 'unknown yet'); + $row['maritalStatus'] = $encryptionHelper->decryptData($row['maritalStatus'] ?? '') ?: ($row['maritalStatus'] ?? 'unknown yet'); } $countStmt = $con->query("SELECT COUNT(*) FROM `driver`"); diff --git a/backend/core/Security/EncryptionHelper.php b/backend/core/Security/EncryptionHelper.php index d410f8f1..3771e4ef 100644 --- a/backend/core/Security/EncryptionHelper.php +++ b/backend/core/Security/EncryptionHelper.php @@ -44,8 +44,9 @@ class EncryptionHelper } // ─── فك تشفير نص (يدعم CBC والـ GCM المستقبلي) ─────────── - public function decryptData(string $cipherText): string|false + public function decryptData(?string $cipherText): string|false { + if (empty($cipherText)) return ''; // تحقق إن كان مشفر بالنظام الجديد if (str_starts_with($cipherText, self::PREFIX_GCM)) { $raw = base64_decode(substr($cipherText, strlen(self::PREFIX_GCM)), true); diff --git a/siro_admin/lib/views/admin/analytics/live_analytics_page.dart b/siro_admin/lib/views/admin/analytics/live_analytics_page.dart index ef778c3b..729efa4c 100644 --- a/siro_admin/lib/views/admin/analytics/live_analytics_page.dart +++ b/siro_admin/lib/views/admin/analytics/live_analytics_page.dart @@ -137,6 +137,7 @@ class _StatCard extends StatelessWidget { border: Border.all(color: AppColor.divider), ), child: Column( + mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( @@ -150,22 +151,30 @@ class _StatCard extends StatelessWidget { style: const TextStyle( fontSize: 11, color: AppColor.textMuted, - fontWeight: FontWeight.w600)), + fontWeight: FontWeight.w600), + maxLines: 1, + overflow: TextOverflow.ellipsis), ), ], ), - const SizedBox(height: 8), - Text(value, - style: const TextStyle( - fontSize: 24, - fontWeight: FontWeight.w700, - color: AppColor.textPrimary)), + const SizedBox(height: 4), + FittedBox( + fit: BoxFit.scaleDown, + alignment: Alignment.centerRight, + child: Text(value, + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w700, + color: AppColor.textPrimary)), + ), if (sub != null) ...[ - const SizedBox(height: 4), + const SizedBox(height: 2), Text(sub!, style: TextStyle( - fontSize: 11, - color: subColor ?? AppColor.textSecondary)), + fontSize: 10, + color: subColor ?? AppColor.textSecondary), + maxLines: 1, + overflow: TextOverflow.ellipsis), ], ], ),