system/cron/task_manager_cron.php
Вот содержимое файла system/cron/task_manager_cron.php
:
<?php
// Task Manager CRON Job - Automated Task Management
// Load configuration
require_once(dirname(__FILE__) . '/../config/task_manager.php');
require_once(dirname(__FILE__) . '/../config/config.php');
require_once(DIR_SYSTEM . 'library/db.php');
require_once(DIR_SYSTEM . 'library/email.php');
require_once(DIR_SYSTEM . 'library/sms.php');
require_once(DIR_SYSTEM . 'library/push.php');
// Initialize database connection
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
// Function to get pending tasks
function getPendingTasks($db) {
$sql = "SELECT * FROM " . DB_PREFIX . "task_manager WHERE status = 'Pending' AND task_date <= NOW()";
$query = $db->query($sql);
return $query->rows;
}
// Function to send notifications
function sendTaskNotification($task, $db) {
$user_id = $task['user_id'];
$task_title = $task['task_title'];
$task_due_date = $task['task_date'];
// Check notification preferences for user
$sql = "SELECT * FROM " . DB_PREFIX . "user_notification_preferences WHERE user_id = '" . (int)$user_id . "'";
$query = $db->query($sql);
$user_notifications = $query->row;
if ($user_notifications) {
if ($user_notifications['email'] == 1) {
sendEmailNotification($user_id, $task_title, $task_due_date);
}
if ($user_notifications['sms'] == 1) {
sendSMSNotification($user_id, $task_title, $task_due_date);
}
if ($user_notifications['push'] == 1) {
sendPushNotification($user_id, $task_title, $task_due_date);
}
}
}
// Function to send email notification
function sendEmailNotification($user_id, $task_title, $task_due_date) {
global $db;
// Fetch user's email address
$sql = "SELECT email FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'";
$query = $db->query($sql);
$email = $query->row['email'];
$subject = "Task Reminder: " . $task_title;
$message = "You have a pending task titled '$task_title' that is due on $task_due_date.";
// Send the email
sendEmail($email, $subject, $message);
}
// Function to send SMS notification
function sendSMSNotification($user_id, $task_title, $task_due_date) {
global $db;
// Fetch user's phone number
$sql = "SELECT phone FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'";
$query = $db->query($sql);
$phone = $query->row['phone'];
$message = "You have a pending task titled '$task_title' that is due on $task_due_date.";
// Send the SMS
sendSMS($phone, $message);
}
// Function to send Push notification
function sendPushNotification($user_id, $task_title, $task_due_date) {
global $db;
// Fetch user's push notification token
$sql = "SELECT push_token FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'";
$query = $db->query($sql);
$push_token = $query->row['push_token'];
$message = "You have a pending task titled '$task_title' that is due on $task_due_date.";
// Send the Push notification
sendPush($push_token, $message);
}
// Function to update task status to 'In Progress' or 'Overdue'
function updateTaskStatus($task, $db) {
$current_date = date('Y-m-d H:i:s');
if ($task['task_date'] <= $current_date && $task['status'] == 'Pending') {
// If the task due date has passed and it's still pending, mark it as overdue
$sql = "UPDATE " . DB_PREFIX . "task_manager SET status = 'Overdue' WHERE task_id = '" . (int)$task['task_id'] . "'";
$db->query($sql);
}
}
// Fetch pending tasks
$tasks = getPendingTasks($db);
foreach ($tasks as $task) {
// Send notifications for each task
sendTaskNotification($task, $db);
// Update task status if needed
updateTaskStatus($task, $db);
}
?>
Объяснение:
Этот файл представляет собой CRON-скрипт для автоматической обработки задач в системе "Менеджер задач". Скрипт выполняет следующие действия:
-
Получение всех невыполненных задач:
-
Функция
getPendingTasks()
выбирает задачи, у которых статус "Pending" и дата выполнения меньше или равна текущей.
-
-
Отправка уведомлений:
-
Для каждой задачи проверяются предпочтения пользователя для получения уведомлений (по email, SMS, push-уведомления).
-
В зависимости от предпочтений отправляются соответствующие уведомления:
-
Email: Функция
sendEmailNotification()
. -
SMS: Функция
sendSMSNotification()
. -
Push: Функция
sendPushNotification()
.
-
-
-
Обновление статуса задач:
-
Функция
updateTaskStatus()
проверяет, если задача просрочена, она меняет статус на "Overdue" (просрочена).
-
-
Настройки подключения к базе данных:
-
В файле происходит подключение к базе данных OpenCart и выполнение запросов для получения информации о задачах и пользователях.
-
Зависимости:
-
Email: Функция
sendEmail()
(определена в библиотекеemail.php
). -
SMS: Функция
sendSMS()
(определена в библиотекеsms.php
). -
Push: Функция
sendPush()
(определена в библиотекеpush.php
).
Этот скрипт должен быть запущен периодически (например, через CRON) для автоматического выполнения задач, обновления статуса и отправки уведомлений пользователям.