С 9:00 до 21:00 Без выходных

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-скрипт для автоматической обработки задач в системе "Менеджер задач". Скрипт выполняет следующие действия:

  1. Получение всех невыполненных задач:

    • Функция getPendingTasks() выбирает задачи, у которых статус "Pending" и дата выполнения меньше или равна текущей.

  2. Отправка уведомлений:

    • Для каждой задачи проверяются предпочтения пользователя для получения уведомлений (по email, SMS, push-уведомления).

    • В зависимости от предпочтений отправляются соответствующие уведомления:

      • Email: Функция sendEmailNotification().

      • SMS: Функция sendSMSNotification().

      • Push: Функция sendPushNotification().

  3. Обновление статуса задач:

    • Функция updateTaskStatus() проверяет, если задача просрочена, она меняет статус на "Overdue" (просрочена).

  4. Настройки подключения к базе данных:

    • В файле происходит подключение к базе данных OpenCart и выполнение запросов для получения информации о задачах и пользователях.

Зависимости:

  • Email: Функция sendEmail() (определена в библиотеке email.php).

  • SMS: Функция sendSMS() (определена в библиотеке sms.php).

  • Push: Функция sendPush() (определена в библиотеке push.php).

Этот скрипт должен быть запущен периодически (например, через CRON) для автоматического выполнения задач, обновления статуса и отправки уведомлений пользователям.