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']);
}
?>
Описание функционала:
-
Инициализация системы:
-
Определяются пути к файлам OpenCart, после чего подключаются необходимые файлы для инициализации системы (например, базовые модели и компоненты, такие как DB, Cache, Log, Language).
-
-
Загрузка и выполнение задач:
-
Из модели
task_manager
загружаются все ожидающие выполнения задачи с помощью методаgetPendingTasks()
. -
Каждая задача обрабатывается в зависимости от типа (
task_type
), будь то отправка уведомления по email, SMS, Push или Telegram.
-
-
Обработка задач:
-
Для каждой задачи выполняется функция, соответствующая её типу. Например, отправка email уведомлений, SMS, push или telegram сообщений.
-
-
Обновление статуса задачи:
-
После успешной обработки задачи обновляется её статус на "completed", чтобы она больше не обрабатывалась в дальнейшем.
-
-
Ошибки:
-
Ошибки, возникающие в процессе выполнения задач, логируются в файл
task_manager_cron.log
.
-
-
Функции для уведомлений:
-
Реализованы функции для отправки уведомлений через разные каналы, такие как email (
sendEmailNotification
), SMS (sendSMSNotification
), push-уведомления (sendPushNotification
) и Telegram (sendTelegramNotification
).
-
-
Уведомления:
-
Уведомления отправляются в соответствии с деталями задачи и пользователем, которому они предназначены.
-