81 lines
3.7 KiB
PHP
81 lines
3.7 KiB
PHP
<?php
|
|
// scripts/send_reminders.php
|
|
// Should be run as a cron job daily: php scripts/send_reminders.php
|
|
|
|
require_once __DIR__ . '/../db/config.php';
|
|
require_once __DIR__ . '/../mail/MailService.php';
|
|
|
|
echo "[" . date('Y-m-d H:i:s') . "] Starting reminder process..." . PHP_EOL;
|
|
|
|
// 1. Tasks due in 24 hours (exactly 1 day away)
|
|
$due_tomorrow = db()->query("
|
|
SELECT m.*, u.email, u.full_name
|
|
FROM mailbox m
|
|
JOIN users u ON m.assigned_to = u.id
|
|
JOIN mailbox_statuses s ON m.status_id = s.id
|
|
WHERE m.due_date = DATE_ADD(CURDATE(), INTERVAL 1 DAY)
|
|
AND s.name != 'closed'
|
|
")->fetchAll();
|
|
|
|
foreach ($due_tomorrow as $task) {
|
|
if (!empty($task['email'])) {
|
|
$subject = "تذكير: موعد نهائي لمهمة غداً - " . $task['ref_no'];
|
|
$html = "
|
|
<div dir='rtl' style='font-family: Arial, sans-serif;'>
|
|
<h3>تذكير بموعد نهائي</h3>
|
|
<p>عزيزي <b>" . htmlspecialchars($task['full_name']) . "</b>،</p>
|
|
<p>هذا تذكير بأن المهمة التالية مستحقة غداً:</p>
|
|
<ul>
|
|
<li><b>رقم المرجع:</b> " . htmlspecialchars($task['ref_no']) . "</li>
|
|
<li><b>الموضوع:</b> " . htmlspecialchars($task['subject']) . "</li>
|
|
<li><b>تاريخ الاستحقاق:</b> " . $task['due_date'] . "</li>
|
|
</ul>
|
|
<p>يرجى متابعة المهمة وإغلاقها في الوقت المحدد.</p>
|
|
</div>
|
|
";
|
|
$res = MailService::sendMail($task['email'], $subject, $html);
|
|
if ($res['success']) {
|
|
echo "Sent 24h reminder to " . $task['email'] . " for task " . $task['ref_no'] . PHP_EOL;
|
|
} else {
|
|
echo "Failed to send 24h reminder to " . $task['email'] . ": " . ($res['error'] ?? 'Unknown error') . PHP_EOL;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 2. Overdue tasks (due date passed and still not closed) - Only send once a week or daily?
|
|
// For now, let's send daily for overdue tasks to ensure they are handled.
|
|
$overdue = db()->query("
|
|
SELECT m.*, u.email, u.full_name
|
|
FROM mailbox m
|
|
JOIN users u ON m.assigned_to = u.id
|
|
JOIN mailbox_statuses s ON m.status_id = s.id
|
|
WHERE m.due_date < CURDATE()
|
|
AND s.name != 'closed'
|
|
")->fetchAll();
|
|
|
|
foreach ($overdue as $task) {
|
|
if (!empty($task['email'])) {
|
|
$subject = "تنبيه: مهمة متأخرة! - " . $task['ref_no'];
|
|
$html = "
|
|
<div dir='rtl' style='font-family: Arial, sans-serif;'>
|
|
<h3 style='color: red;'>تنبيه: مهمة متأخرة</h3>
|
|
<p>عزيزي <b>" . htmlspecialchars($task['full_name']) . "</b>،</p>
|
|
<p>هذه المهمة قد تجاوزت الموعد النهائي المحدد:</p>
|
|
<ul>
|
|
<li><b>رقم المرجع:</b> " . htmlspecialchars($task['ref_no']) . "</li>
|
|
<li><b>الموضوع:</b> " . htmlspecialchars($task['subject']) . "</li>
|
|
<li><b>تاريخ الاستحقاق:</b> <span style='color: red;'>" . $task['due_date'] . "</span></li>
|
|
</ul>
|
|
<p>يرجى معالجة هذه المهمة في أقرب وقت ممكن.</p>
|
|
</div>
|
|
";
|
|
$res = MailService::sendMail($task['email'], $subject, $html);
|
|
if ($res['success']) {
|
|
echo "Sent overdue reminder to " . $task['email'] . " for task " . $task['ref_no'] . PHP_EOL;
|
|
} else {
|
|
echo "Failed to send overdue reminder to " . $task['email'] . ": " . ($res['error'] ?? 'Unknown error') . PHP_EOL;
|
|
}
|
|
}
|
|
}
|
|
|
|
echo "[" . date('Y-m-d H:i:s') . "] Reminder process finished." . PHP_EOL; |