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

system/cron/task_manager_cron.php

Вот содержимое файла system/cron/task_manager_cron.php:

<?php
// Task Manager Cron Job Script

// Define the path to the OpenCart system files
define('DIR_SYSTEM', '/var/www/html/system/');
define('DIR_STORAGE', '/var/www/html/storage/');
define('DIR_CATALOG', '/var/www/html/catalog/');
define('DIR_IMAGE', '/var/www/html/image/');
define('DIR_LANGUAGES', '/var/www/html/catalog/language/');
define('DIR_MODEL', '/var/www/html/catalog/model/');
define('DIR_VIEW', '/var/www/html/catalog/view/');
define('DIR_CONTROLLER', '/var/www/html/catalog/controller/');

// Include OpenCart initialization files
require_once DIR_SYSTEM . 'startup.php';

// Load necessary libraries and models
$loader = new \Registry();
$loader->set('config', new Config());
$loader->set('db', new DB('mysqli', DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE));
$loader->set('cache', new Cache('file'));
$loader->set('log', new Log('task_manager_cron.log'));
$loader->set('language', new Language(CATALOG_LANGUAGE));

// Initialize the task manager model
$loader->model('extension/task_manager');
$task_manager_model = $loader->getModel('extension/task_manager');

// Run the task manager cron jobs
runCronTasks($task_manager_model);

// Function to execute the scheduled tasks
function runCronTasks($task_manager_model) {
    // Fetch all tasks that need to be processed
    $tasks = $task_manager_model->getPendingTasks();

    if (empty($tasks)) {
        echo "No tasks to process at the moment.\n";
        return;
    }

    // Process each task
    foreach ($tasks as $task) {
        try {
            // Execute the task based on the task type (Example: sending email notifications)
            switch ($task['task_type']) {
                case 'email':
                    sendEmailNotification($task);
                    break;
                case 'sms':
                    sendSMSNotification($task);
                    break;
                case 'push':
                    sendPushNotification($task);
                    break;
                case 'telegram':
                    sendTelegramNotification($task);
                    break;
                // Add more task types as needed
                default:
                    echo "Unknown task type: " . $task['task_type'] . "\n";
            }

            // Mark the task as completed
            $task_manager_model->updateTaskStatus($task['task_id'], 'completed');
            echo "Task ID {$task['task_id']} completed.\n";

        } catch (Exception $e) {
            // Log any errors encountered during task processing
            $loader->get('log')->write("Error processing task ID {$task['task_id']}: " . $e->getMessage());
        }
    }
}

// Function to send email notifications
function sendEmailNotification($task) {
    $subject = "Task Notification: " . $task['title'];
    $message = "Hello " . $task['user_name'] . ",\n\n" . $task['description'];
    $to = $task['user_email'];

    // Use OpenCart's built-in email functionality
    $mail = new Mail();
    $mail->protocol = MAIL_PROTOCOL;
    $mail->parameter = MAIL_PARAMETER;
    $mail->smtp_hostname = MAIL_SMTP_HOSTNAME;
    $mail->smtp_username = MAIL_SMTP_USERNAME;
    $mail->smtp_password = MAIL_SMTP_PASSWORD;
    $mail->smtp_port = MAIL_SMTP_PORT;
    $mail->smtp_timeout = MAIL_SMTP_TIMEOUT;
    $mail->setTo($to);
    $mail->setFrom(MAIL_SENDER);
    $mail->setSender(MAIL_SENDER_NAME);
    $mail->setSubject($subject);
    $mail->setText($message);
    $mail->send();
}

// Function to send SMS notifications
function sendSMSNotification($task) {
    // Example of sending SMS through an SMS gateway (use your specific SMS API integration)
    $sms_gateway = new SMSGateway();
    $sms_gateway->sendSMS($task['user_phone'], $task['description']);
}

// Function to send Push notifications
function sendPushNotification($task) {
    $push_service = new PushNotificationService();
    $push_service->sendPush($task['user_device_id'], $task['description']);
}

// Function to send Telegram notifications
function sendTelegramNotification($task) {
    // Example of sending a message through Telegram bot (use your specific Telegram API)
    $telegram = new TelegramBot();
    $telegram->sendMessage($task['user_telegram_id'], $task['description']);
}

?>

Описание функционала:

  1. Инициализация системы:

    • Определяются пути к файлам OpenCart, после чего подключаются необходимые файлы для инициализации системы (например, базовые модели и компоненты, такие как DB, Cache, Log, Language).

  2. Загрузка и выполнение задач:

    • Из модели task_manager загружаются все ожидающие выполнения задачи с помощью метода getPendingTasks().

    • Каждая задача обрабатывается в зависимости от типа (task_type), будь то отправка уведомления по email, SMS, Push или Telegram.

  3. Обработка задач:

    • Для каждой задачи выполняется функция, соответствующая её типу. Например, отправка email уведомлений, SMS, push или telegram сообщений.

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

    • После успешной обработки задачи обновляется её статус на "completed", чтобы она больше не обрабатывалась в дальнейшем.

  5. Ошибки:

    • Ошибки, возникающие в процессе выполнения задач, логируются в файл task_manager_cron.log.

  6. Функции для уведомлений:

    • Реализованы функции для отправки уведомлений через разные каналы, такие как email (sendEmailNotification), SMS (sendSMSNotification), push-уведомления (sendPushNotification) и Telegram (sendTelegramNotification).

  7. Уведомления:

    • Уведомления отправляются в соответствии с деталями задачи и пользователем, которому они предназначены.