Current File : /var/www/vinorea/modules/ipexportimport/classes/import/order/EIASheduledTasks.php |
<?php
/**
*
* NOTICE OF LICENSE
*
* @author SmartPresta <tehran.alishov@gmail.com>
* @copyright 2024 SmartPresta
* @license Commercial License
*/
if (!defined('_PS_VERSION_')) {
exit;
}
//require_once dirname(__FILE__) . '/EIACronExpression.php';
require_once dirname(__FILE__) . '/EIAConfiguration.php';
class EIASheduledTasks
{
const TABLE_NAME_SHEDULED_TASKS = 'mpm_ipexportimport_task';
const TABLE_NAME_SHEDULED_TASKS_WITH_PREFIX = _DB_PREFIX_ . self::TABLE_NAME_SHEDULED_TASKS;
public static function getModuleSheduledTasksList($id_shop = false, $id_shop_group = false, $active = false)
{
$where = "";
if(!$id_shop){
$id_shop = (int)Context::getContext()->shop->id;
}
if(!$id_shop_group){
$id_shop_group = (int)Context::getContext()->shop->id_shop_group;
}
if($active){
$where = " AND t.active = 1";
}
$sql = '
SELECT t.*, c.name
FROM ' . self::TABLE_NAME_SHEDULED_TASKS_WITH_PREFIX . ' AS t
LEFT JOIN ' . EIAConfiguration::TABLE_NAME_IMPORT_WITH_PREFIX . ' AS c
ON c.id_setting = t.id_setting
WHERE t.id_shop = '.$id_shop.'
AND t.id_shop_group = '.$id_shop_group.'
'.$where.'
';
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
}
public static function getCountTasks()
{
$id_shop = (int)Context::getContext()->shop->id;
$id_shop_group = (int)Context::getContext()->shop->id_shop_group;
$sql = '
SELECT count(*) as count_settings
FROM ' . self::TABLE_NAME_SHEDULED_TASKS_WITH_PREFIX . ' AS t
WHERE t.id_shop = '.$id_shop.'
AND t.id_shop_group = '.$id_shop_group.'
';
$res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
if(isset($res[0]['count_settings']) && $res[0]['count_settings']){
return $res[0]['count_settings'];
}
return 0;
}
public static function getLastTaskRunDate($id_task)
{
$sql = '
SELECT p.start
FROM ' . _DB_PREFIX_ . 'mpm_ipexportimport_process AS p
WHERE p.id_task = '.(int)$id_task.'
ORDER BY p.start DESC
';
$res = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
if($res){
return date(Context::getContext()->language->date_format_full, $res);
}
return false;
}
public static function changeStatus($id_task, $val)
{
if ($id_task) {
Db::getInstance(_PS_USE_SQL_SLAVE_)->update(self::TABLE_NAME_SHEDULED_TASKS, array('active' => $val), 'id_task=' . (int)$id_task);
}
}
public static function save($task)
{
self::validate($task);
$id_task = $task['id_task'];
unset($task['id_task']);
$task['id_shop'] = (int)Context::getContext()->shop->id;
$task['id_shop_group'] = (int)Context::getContext()->shop->id_shop_group;
$task['active'] = 1;
if ($id_task) {
if (!$task['one_shot']) {
$task['is_one_shot_executed'] = false;
}
Db::getInstance(_PS_USE_SQL_SLAVE_)->update(self::TABLE_NAME_SHEDULED_TASKS, $task, 'id_task=' . (int)$id_task);
} else {
Db::getInstance(_PS_USE_SQL_SLAVE_)->insert(self::TABLE_NAME_SHEDULED_TASKS, $task);
$id_task = Db::getInstance(_PS_USE_SQL_SLAVE_)->Insert_ID();
}
return $id_task;
}
public static function delete($id_task)
{
Db::getInstance(_PS_USE_SQL_SLAVE_)->delete(self::TABLE_NAME_SHEDULED_TASKS, 'id_task=' . (int)$id_task);
return true;
}
public static function validate($task)
{
$cron_expression = new EIACronExpression($task['frequency']);
if (!$cron_expression->isValid()) {
throw new Exception(EIATranslatorWrapper::l('Please enter task frequency!'));
}
if (!$task['id_setting']) {
throw new Exception(EIATranslatorWrapper::l('Please select export configration!'));
}
if ($task['email_message'] && !$task['emails']) {
throw new Exception(EIATranslatorWrapper::l('Please enter email address!'));
}
if ($task['email_message'] && $task['emails']) {
$emails = explode("\n", trim($task['emails']));
foreach ($emails as $email) {
$is_valid_email = \Validate::isEmail($email);
if (!$is_valid_email) {
throw new Exception(EIATranslatorWrapper::l('Email - ') . $email . EIATranslatorWrapper::l(' is not valid!'));
}
}
}
return true;
}
public static function getTaskById($id_task)
{
$sql = '
SELECT t.*, c.name
FROM ' . self::TABLE_NAME_SHEDULED_TASKS_WITH_PREFIX . ' AS t
LEFT JOIN ' . EIAConfiguration::TABLE_NAME_IMPORT_WITH_PREFIX . ' AS c
ON c.id_setting = t.id_setting
WHERE t.id_task = '.(int)$id_task.'
';
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
}
public static function getById($id_task)
{
$query = "SELECT t.*, s.name
FROM " . self::TABLE_NAME_SHEDULED_TASKS_WITH_PREFIX . " AS t
LEFT JOIN " . EIAConfiguration::TABLE_NAME_IMPORT_WITH_PREFIX . " AS s
ON s.id_setting = t.id_setting
WHERE t.id_task=" . (int)$id_task;
$task = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
if (empty($task[0])) {
return [];
}
$task = $task[0];
$cron_expression = new EIACronExpression($task['frequency']);
$task['next_run'] = date(\Context::getContext()->language->date_format_full, $cron_expression->getNextRunTime());
return $task;
}
public static function checkNotImportedTaskOrders(){
$query = "SELECT *
FROM " . _DB_PREFIX_ . "mpm_ipexportimport_data
WHERE 1";
return Db::getInstance()->getRow($query);
}
public static function getSheduledUrl($id_task = false, $limit = false, $id_process = false)
{
$token = Configuration::getGlobalValue('MPM_IMPORT_ORDERS_TASKS_KEY');
$admin_folder = str_replace(_PS_ROOT_DIR_ . '/', null, basename(_PS_ADMIN_DIR_));
$id_shop = (int)Context::getContext()->shop->id;
$id_lang = (int)Context::getContext()->language->id;
$id_shop_group = (int)Context::getContext()->shop->id_shop_group;
if (version_compare(_PS_VERSION_, '1.7', '<') == true) {
$path = Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . $admin_folder . '/';
$schedule_url = $path . Context::getContext()->link->getAdminLink('AdminImportTask', false);
$schedule_url .= '&id_shop=' . $id_shop . '&id_lang=' . $id_lang . '&task=true&id_shop_group=' . $id_shop_group . '&secure_key=' . $token;
} else {
$schedule_url = Context::getContext()->link->getAdminLink('AdminImportTask', false);
$schedule_url .= '&id_shop=' . $id_shop . '&id_lang=' . $id_lang . '&task=true&id_shop_group=' . $id_shop_group . '&secure_key=' . $token;
}
if($id_task){
$schedule_url .= '&id_task='.$id_task;
}
if($limit){
$schedule_url .= '&limit=1';
}
if($id_process){
$schedule_url .= '&id_process='.$id_process;
}
return $schedule_url;
}
public static function isShouldBeExecuted($task)
{
if ($task['one_shot'] && self::isOneShotExecuted($task['id_task'])) {
return false;
}
$cron_expression = new EIACronExpression($task['frequency']);
$next_run = $cron_expression->getNextRunTime();
$now = time();
if (($next_run - $now) <= 30) {
return true;
}
return false;
}
public static function isOneShotExecuted($id_task)
{
$query = "SELECT `is_one_shot_executed`
FROM " . self::TABLE_NAME_SHEDULED_TASKS_WITH_PREFIX . "
WHERE `id_task` = '".(int)$id_task."'";
return Db::getInstance()->getValue($query);
}
public static function setOneShotIsExecuted($id_task, $is_one_shot_executed)
{
return Db::getInstance()->update(self::TABLE_NAME_SHEDULED_TASKS, ['is_one_shot_executed' => (int)$is_one_shot_executed], 'id_task=' . (int)$id_task);
}
}