Fix decryptData null type error and live analytics overflow

This commit is contained in:
Hamza-Ayed
2026-07-23 20:42:48 +03:00
parent 12e70f3d7e
commit 1e785061ec
3 changed files with 30 additions and 20 deletions
+9 -9
View File
@@ -67,15 +67,15 @@ $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// فك تشفير الحقول الحساسة // فك تشفير الحقول الحساسة
foreach ($result as &$row) { foreach ($result as &$row) {
$row['phone'] = $encryptionHelper->decryptData($row['phone']); $row['phone'] = $encryptionHelper->decryptData($row['phone'] ?? '') ?: ($row['phone'] ?? '');
$row['email'] = $encryptionHelper->decryptData($row['email']); $row['email'] = $encryptionHelper->decryptData($row['email'] ?? '') ?: ($row['email'] ?? '');
$row['gender'] = $encryptionHelper->decryptData($row['gender']); $row['gender'] = $encryptionHelper->decryptData($row['gender'] ?? '') ?: ($row['gender'] ?? 'unknown yet');
$row['birthdate'] = $encryptionHelper->decryptData($row['birthdate']); $row['birthdate'] = $encryptionHelper->decryptData($row['birthdate'] ?? '') ?: ($row['birthdate'] ?? 'unknown yet');
$row['site'] = $encryptionHelper->decryptData($row['site']); $row['site'] = $encryptionHelper->decryptData($row['site'] ?? '') ?: ($row['site'] ?? 'unknown yet');
$row['first_name'] = $encryptionHelper->decryptData($row['first_name']); $row['first_name'] = $encryptionHelper->decryptData($row['first_name'] ?? '') ?: ($row['first_name'] ?? '');
$row['last_name'] = $encryptionHelper->decryptData($row['last_name']); $row['last_name'] = $encryptionHelper->decryptData($row['last_name'] ?? '') ?: ($row['last_name'] ?? '');
$row['employmentType'] = $encryptionHelper->decryptData($row['employmentType']); $row['employmentType'] = $encryptionHelper->decryptData($row['employmentType'] ?? '') ?: ($row['employmentType'] ?? 'unknown yet');
$row['maritalStatus'] = $encryptionHelper->decryptData($row['maritalStatus']); $row['maritalStatus'] = $encryptionHelper->decryptData($row['maritalStatus'] ?? '') ?: ($row['maritalStatus'] ?? 'unknown yet');
} }
$countStmt = $con->query("SELECT COUNT(*) FROM `driver`"); $countStmt = $con->query("SELECT COUNT(*) FROM `driver`");
+2 -1
View File
@@ -44,8 +44,9 @@ class EncryptionHelper
} }
// ─── فك تشفير نص (يدعم CBC والـ GCM المستقبلي) ─────────── // ─── فك تشفير نص (يدعم 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)) { if (str_starts_with($cipherText, self::PREFIX_GCM)) {
$raw = base64_decode(substr($cipherText, strlen(self::PREFIX_GCM)), true); $raw = base64_decode(substr($cipherText, strlen(self::PREFIX_GCM)), true);
@@ -137,6 +137,7 @@ class _StatCard extends StatelessWidget {
border: Border.all(color: AppColor.divider), border: Border.all(color: AppColor.divider),
), ),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
@@ -150,22 +151,30 @@ class _StatCard extends StatelessWidget {
style: const TextStyle( style: const TextStyle(
fontSize: 11, fontSize: 11,
color: AppColor.textMuted, color: AppColor.textMuted,
fontWeight: FontWeight.w600)), fontWeight: FontWeight.w600),
maxLines: 1,
overflow: TextOverflow.ellipsis),
), ),
], ],
), ),
const SizedBox(height: 8), const SizedBox(height: 4),
Text(value, FittedBox(
style: const TextStyle( fit: BoxFit.scaleDown,
fontSize: 24, alignment: Alignment.centerRight,
fontWeight: FontWeight.w700, child: Text(value,
color: AppColor.textPrimary)), style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.w700,
color: AppColor.textPrimary)),
),
if (sub != null) ...[ if (sub != null) ...[
const SizedBox(height: 4), const SizedBox(height: 2),
Text(sub!, Text(sub!,
style: TextStyle( style: TextStyle(
fontSize: 11, fontSize: 10,
color: subColor ?? AppColor.textSecondary)), color: subColor ?? AppColor.textSecondary),
maxLines: 1,
overflow: TextOverflow.ellipsis),
], ],
], ],
), ),