Fix decryptData null type error and live analytics overflow
This commit is contained in:
@@ -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`");
|
||||||
|
|||||||
@@ -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),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user