Update: 2026-07-04 04:05:08
This commit is contained in:
@@ -20,7 +20,8 @@ require_once __DIR__ . '/../core/Security/EncryptionHelper.php';
|
||||
set_time_limit(0);
|
||||
|
||||
try {
|
||||
$con = Database::get('main');
|
||||
$con = Database::get('main');
|
||||
$redis = getRedisConnection();
|
||||
} catch (Exception $e) {
|
||||
die("Database connection failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
@@ -101,22 +102,49 @@ foreach ($passengersByCountry as $countryCode => $passengers) {
|
||||
|
||||
// 4. إرسال الـ Push Notification لكل راكب
|
||||
foreach ($passengers as $p) {
|
||||
$passengerId = $p['passenger_id'];
|
||||
$encryptedToken = $p['token'];
|
||||
$decryptedToken = $encryptionHelper->decryptData($encryptedToken);
|
||||
|
||||
if ($decryptedToken) {
|
||||
$dataPayload = [
|
||||
'type' => 'marketing_promo',
|
||||
'promo_code' => $promoCode
|
||||
];
|
||||
|
||||
// استدعاء دالة الإرسال (يفترض وجودها في نظام FCM الخاص بك، مثل sendFCM)
|
||||
// sendFCM($decryptedToken, $title, $body, $dataPayload);
|
||||
// سنطبع للـ Log فقط في هذا السكربت لتجنب إرسال رسائل حقيقية دون تفعيل FCM الفعلي
|
||||
|
||||
error_log("Sending Push to passenger {$p['passenger_id']}: $title");
|
||||
$totalPushes++;
|
||||
|
||||
if (!$decryptedToken) continue;
|
||||
|
||||
// ── Anti-spam: لا يُرسَل لنفس الراكب أكثر من مرة/24 ساعة ──
|
||||
$redisKey = "marketing_push:sent:{$passengerId}";
|
||||
if ($redis && $redis->exists($redisKey)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$dataPayload = [
|
||||
'type' => 'marketing_promo',
|
||||
'promo_code' => $promoCode,
|
||||
'screen' => 'home',
|
||||
];
|
||||
|
||||
// ── إرسال FCM الفعلي ──────────────────────────────────────
|
||||
sendFCM_Internal(
|
||||
$decryptedToken,
|
||||
$title,
|
||||
$body,
|
||||
$dataPayload,
|
||||
'Marketing',
|
||||
false,
|
||||
'ding'
|
||||
);
|
||||
|
||||
// ── تسجيل anti-spam في Redis (TTL 24 ساعة) ───────────────
|
||||
if ($redis) {
|
||||
$redis->setex($redisKey, 86400, '1');
|
||||
}
|
||||
|
||||
// ── حفظ في جدول notifications الداخلي ────────────────────
|
||||
try {
|
||||
$ins = $con->prepare(
|
||||
"INSERT INTO notifications (title, body, passenger_id) VALUES (:t, :b, :pid)"
|
||||
);
|
||||
$ins->execute([':t' => $title, ':b' => $body, ':pid' => $passengerId]);
|
||||
} catch (Exception $ignored) {}
|
||||
|
||||
$totalPushes++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user