Add functionality for changing the time interval for cron tasks
This commit is contained in:
parent
2b17ec6a1c
commit
b8c1cd9ec8
53
doc/1.Setup/Cron tasks.md
Normal file
53
doc/1.Setup/Cron tasks.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
### Настройки cron задач
|
||||||
|
|
||||||
|
В версии 4.4.5 добавлен функционал для изменения интервалов времени выполнения cron задач.
|
||||||
|
|
||||||
|
Для изменения интервала времени необходимо с помощью фильтра **retailcrm_add_cron_interval** добавить пользовательский интервал. Затем изменить интервал для cron задач с помощью фильтра **retailcrm_cron_schedules**.
|
||||||
|
Кастомизацию необходимо добавить на сервере в директорию wp-content -> mu-plugins -> mu-simla.php. После добавления кастомизации в настройках модуля необходимо очистить старые cron задачи.
|
||||||
|
Перейдите в настройки, откройте "Отладочная информация" и нажмите на кнопку "Очистить cron задачи", появится окно с сообщением об успешной очистке, интервалы будут применены.
|
||||||
|
|
||||||
|
Если необходимо вернуть стандартные интервалы, то удаляем кастомизацию и в настройках так же очищаем старые cron задачи.
|
||||||
|
|
||||||
|
**Интервалы по умолчанию:**
|
||||||
|
```php
|
||||||
|
[
|
||||||
|
'icml' => 'three_hours',
|
||||||
|
'history' => 'five_minutes',
|
||||||
|
'inventories' => 'fiveteen_minutes',
|
||||||
|
]
|
||||||
|
```
|
||||||
|
> Важно! При использовании фильтра **retailcrm_cron_schedules**, можно использовать ключи: 'icml', 'history', 'inventories'.
|
||||||
|
|
||||||
|
**Фильтры:**
|
||||||
|
|
||||||
|
> retailcrm_add_cron_interval - позволяет добавить пользовательский интервал времени.
|
||||||
|
|
||||||
|
> retailcrm_cron_schedules - позволяет изменить интервал времени для cron задач.
|
||||||
|
|
||||||
|
**Пример использования:**
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
add_filter('retailcrm_add_cron_interval', 'add_cron_interval');
|
||||||
|
|
||||||
|
function add_cron_interval($schedules)
|
||||||
|
{
|
||||||
|
return ['two_minutes' => [
|
||||||
|
'interval' => 120, // seconds
|
||||||
|
'display' => __('Every 2 minutes')
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
add_filter('retailcrm_cron_schedules', 'change_cron_tasks');
|
||||||
|
|
||||||
|
function change_cron_tasks($cronTasks)
|
||||||
|
{
|
||||||
|
$cronTasks['history'] = 'two_minutes';
|
||||||
|
|
||||||
|
return $cronTasks;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
@ -327,3 +327,15 @@ msgstr "Descripción corta"
|
|||||||
|
|
||||||
msgid "In the catalog, you can use a full or short description of the product"
|
msgid "In the catalog, you can use a full or short description of the product"
|
||||||
msgstr "En el catálogo, puedes utilizar una descripción del producto corta o completa"
|
msgstr "En el catálogo, puedes utilizar una descripción del producto corta o completa"
|
||||||
|
|
||||||
|
msgid "If you change the time interval, need to clear the old cron tasks"
|
||||||
|
msgstr "Si cambias el Intervalo de Tiempo tienes que limpiar los cron tareas antiguos"
|
||||||
|
|
||||||
|
msgid "Clear cron tasks"
|
||||||
|
msgstr "Borrar tareas cron"
|
||||||
|
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Borrar"
|
||||||
|
|
||||||
|
msgid "Cron tasks cleared"
|
||||||
|
msgstr "Trabajos cron borrados"
|
||||||
|
@ -337,3 +337,14 @@ msgstr "Краткое описание"
|
|||||||
msgid "In the catalog, you can use a full or short description of the product"
|
msgid "In the catalog, you can use a full or short description of the product"
|
||||||
msgstr "В каталоге можно использовать полное или краткое описание товара"
|
msgstr "В каталоге можно использовать полное или краткое описание товара"
|
||||||
|
|
||||||
|
msgid "If you change the time interval, need to clear the old cron tasks"
|
||||||
|
msgstr "Если вы изменили временной интервал, необходимо очистить старые cron задачи"
|
||||||
|
|
||||||
|
msgid "Clear cron tasks"
|
||||||
|
msgstr "Очистить cron задачи"
|
||||||
|
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Очистить"
|
||||||
|
|
||||||
|
msgid "Cron tasks cleared"
|
||||||
|
msgstr "Cron задачи очищены"
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
.retail-cron-info {
|
|
||||||
padding: 5px 30px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.retail-cron-info-title {
|
.retail-cron-info-title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
2
src/assets/css/debug-info.min.css
vendored
2
src/assets/css/debug-info.min.css
vendored
@ -1 +1 @@
|
|||||||
.retail-cron-info{padding:5px 30px!important}.retail-cron-info-title{font-weight:700}
|
.retail-cron-info-title{font-weight:700}
|
@ -2,14 +2,20 @@ jQuery(function () {
|
|||||||
function RetailcrmCronInfo()
|
function RetailcrmCronInfo()
|
||||||
{
|
{
|
||||||
this.title = jQuery('.debug_info_options').get(0)
|
this.title = jQuery('.debug_info_options').get(0)
|
||||||
|
this.submitButton = jQuery('button[id="clear_cron_tasks"]').get(0);
|
||||||
|
|
||||||
if (typeof this.title === 'undefined') {
|
if (typeof this.title === 'undefined') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.history = 0;
|
if (typeof this.submitButton === 'undefined') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
this.icml = 0;
|
this.icml = 0;
|
||||||
|
this.history = 0;
|
||||||
this.inventories = 0;
|
this.inventories = 0;
|
||||||
|
this.messageSuccessful = '';
|
||||||
|
|
||||||
let _this = this;
|
let _this = this;
|
||||||
|
|
||||||
@ -24,14 +30,19 @@ jQuery(function () {
|
|||||||
_this.history = response.history;
|
_this.history = response.history;
|
||||||
_this.icml = response.icml;
|
_this.icml = response.icml;
|
||||||
_this.inventories = response.inventories;
|
_this.inventories = response.inventories;
|
||||||
|
_this.messageSuccessful = response.translate.tr_successful;
|
||||||
|
|
||||||
_this.displayInfoAboutCron(
|
_this.displayInfoAboutCron(
|
||||||
response.translate.tr_td_cron,
|
response.translate.tr_td_cron,
|
||||||
response.translate.tr_td_icml,
|
response.translate.tr_td_icml,
|
||||||
response.translate.tr_td_history,
|
response.translate.tr_td_history,
|
||||||
response.translate.tr_td_inventories
|
response.translate.tr_td_inventories,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.clearCronTasks = this.clearCronTasks.bind(this);
|
||||||
|
|
||||||
|
jQuery(this.submitButton).click(this.clearCronTasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
RetailcrmCronInfo.prototype.displayInfoAboutCron = function (cron, icml, history, inventories) {
|
RetailcrmCronInfo.prototype.displayInfoAboutCron = function (cron, icml, history, inventories) {
|
||||||
@ -40,11 +51,23 @@ jQuery(function () {
|
|||||||
this.infoTable = jQuery('tbody[class="retail-debug-info"]').get(0);
|
this.infoTable = jQuery('tbody[class="retail-debug-info"]').get(0);
|
||||||
|
|
||||||
jQuery(this.infoTable).append("<tr><td class='retail-cron-info-title'>" + cron + " : " + "</td></tr>");
|
jQuery(this.infoTable).append("<tr><td class='retail-cron-info-title'>" + cron + " : " + "</td></tr>");
|
||||||
jQuery(this.infoTable).append("<tr><td class='retail-cron-info'>" + icml + " : " + this.icml + "</td></tr>");
|
jQuery(this.infoTable).append("<tr><td>" + icml + "</td><td> " + this.icml + "</td></tr>");
|
||||||
jQuery(this.infoTable).append("<tr><td class='retail-cron-info'>" + history + " : " + this.history + "</td></tr>");
|
jQuery(this.infoTable).append("<tr><td>" + history + "</td><td> " + this.history + "</td></tr>");
|
||||||
jQuery(this.infoTable).append("<tr><td class='retail-cron-info'>" + inventories + " : " + this.inventories + "</td></tr>");
|
jQuery(this.infoTable).append("<tr><td>" + inventories + "</td><td> " + this.inventories + "</td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RetailcrmCronInfo.prototype.clearCronTasks = function () {
|
||||||
|
let _this = this;
|
||||||
|
|
||||||
|
jQuery.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: window.location.origin + '/wp-admin/admin-ajax.php?action=clear_cron_tasks',
|
||||||
|
success: function (response) {
|
||||||
|
alert(_this.messageSuccessful);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
window.RetailcrmCronInfo = RetailcrmCronInfo;
|
window.RetailcrmCronInfo = RetailcrmCronInfo;
|
||||||
|
|
||||||
if (!(typeof RetailcrmCronInfo === 'undefined')) {
|
if (!(typeof RetailcrmCronInfo === 'undefined')) {
|
||||||
|
@ -62,6 +62,7 @@ abstract class WC_Retailcrm_Abstracts_Settings extends WC_Integration
|
|||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize integration settings form fields.
|
* Initialize integration settings form fields.
|
||||||
*/
|
*/
|
||||||
@ -567,6 +568,15 @@ abstract class WC_Retailcrm_Abstracts_Settings extends WC_Integration
|
|||||||
'type' => 'heading',
|
'type' => 'heading',
|
||||||
'class' => 'debug_info_options'
|
'class' => 'debug_info_options'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$this->form_fields['clear_cron_tasks'] = [
|
||||||
|
'label' => __('Clear', 'retailcrm'),
|
||||||
|
'title' => __('Clear cron tasks', 'retailcrm'),
|
||||||
|
'type' => 'button',
|
||||||
|
'description' => __('If you change the time interval, need to clear the old cron tasks', 'retailcrm'),
|
||||||
|
'desc_tip' => true,
|
||||||
|
'id' => 'clear_cron_tasks'
|
||||||
|
];
|
||||||
}
|
}
|
||||||
} elseif (empty($apiUrl) === false && empty($apiKey) === false) {
|
} elseif (empty($apiUrl) === false && empty($apiKey) === false) {
|
||||||
$api = new WC_Retailcrm_Proxy(
|
$api = new WC_Retailcrm_Proxy(
|
||||||
|
@ -82,6 +82,7 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
add_action('wp_ajax_content_upload', [$this, 'count_upload_data'], 99);
|
add_action('wp_ajax_content_upload', [$this, 'count_upload_data'], 99);
|
||||||
add_action('wp_ajax_generate_icml', [$this, 'generate_icml']);
|
add_action('wp_ajax_generate_icml', [$this, 'generate_icml']);
|
||||||
add_action('wp_ajax_upload_selected_orders', [$this, 'upload_selected_orders']);
|
add_action('wp_ajax_upload_selected_orders', [$this, 'upload_selected_orders']);
|
||||||
|
add_action('wp_ajax_clear_cron_tasks', [$this, 'clear_cron_tasks']);
|
||||||
add_action('admin_print_footer_scripts', [$this, 'ajax_generate_icml'], 99);
|
add_action('admin_print_footer_scripts', [$this, 'ajax_generate_icml'], 99);
|
||||||
add_action('woocommerce_update_customer', [$this, 'update_customer'], 10, 1);
|
add_action('woocommerce_update_customer', [$this, 'update_customer'], 10, 1);
|
||||||
add_action('user_register', [$this, 'create_customer'], 10, 2);
|
add_action('user_register', [$this, 'create_customer'], 10, 2);
|
||||||
@ -122,9 +123,18 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
*/
|
*/
|
||||||
public function api_sanitized($settings)
|
public function api_sanitized($settings)
|
||||||
{
|
{
|
||||||
|
$timeInterval = apply_filters(
|
||||||
|
'retailcrm_cron_schedules',
|
||||||
|
[
|
||||||
|
'icml' => 'three_hours',
|
||||||
|
'history' => 'five_minutes',
|
||||||
|
'inventories' => 'fiveteen_minutes',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
if (isset($settings['sync']) && $settings['sync'] == static::YES) {
|
if (isset($settings['sync']) && $settings['sync'] == static::YES) {
|
||||||
if (!wp_next_scheduled('retailcrm_inventories')) {
|
if (!wp_next_scheduled('retailcrm_inventories')) {
|
||||||
wp_schedule_event(time(), 'fiveteen_minutes', 'retailcrm_inventories');
|
wp_schedule_event(time(), $timeInterval['inventories'], 'retailcrm_inventories');
|
||||||
}
|
}
|
||||||
} elseif (isset($settings['sync']) && $settings['sync'] == static::NO) {
|
} elseif (isset($settings['sync']) && $settings['sync'] == static::NO) {
|
||||||
wp_clear_scheduled_hook('retailcrm_inventories');
|
wp_clear_scheduled_hook('retailcrm_inventories');
|
||||||
@ -132,7 +142,7 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
|
|
||||||
if (isset($settings['history']) && $settings['history'] == static::YES) {
|
if (isset($settings['history']) && $settings['history'] == static::YES) {
|
||||||
if (!wp_next_scheduled('retailcrm_history')) {
|
if (!wp_next_scheduled('retailcrm_history')) {
|
||||||
wp_schedule_event(time(), 'five_minutes', 'retailcrm_history');
|
wp_schedule_event(time(), $timeInterval['history'], 'retailcrm_history');
|
||||||
}
|
}
|
||||||
} elseif (isset($settings['history']) && $settings['history'] == static::NO) {
|
} elseif (isset($settings['history']) && $settings['history'] == static::NO) {
|
||||||
wp_clear_scheduled_hook('retailcrm_history');
|
wp_clear_scheduled_hook('retailcrm_history');
|
||||||
@ -140,7 +150,7 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
|
|
||||||
if (isset($settings['icml']) && $settings['icml'] == static::YES) {
|
if (isset($settings['icml']) && $settings['icml'] == static::YES) {
|
||||||
if (!wp_next_scheduled('retailcrm_icml')) {
|
if (!wp_next_scheduled('retailcrm_icml')) {
|
||||||
wp_schedule_event(time(), 'three_hours', 'retailcrm_icml');
|
wp_schedule_event(time(), $timeInterval['icml'], 'retailcrm_icml');
|
||||||
}
|
}
|
||||||
} elseif (isset($settings['icml']) && $settings['icml'] == static::NO) {
|
} elseif (isset($settings['icml']) && $settings['icml'] == static::NO) {
|
||||||
wp_clear_scheduled_hook('retailcrm_icml');
|
wp_clear_scheduled_hook('retailcrm_icml');
|
||||||
@ -153,6 +163,21 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
return $settings;
|
return $settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you change the time interval, need to clear the old cron tasks
|
||||||
|
*
|
||||||
|
* @codeCoverageIgnore Check in another tests
|
||||||
|
*/
|
||||||
|
public function clear_cron_tasks()
|
||||||
|
{
|
||||||
|
wp_clear_scheduled_hook('retailcrm_icml');
|
||||||
|
wp_clear_scheduled_hook('retailcrm_history');
|
||||||
|
wp_clear_scheduled_hook('retailcrm_inventories');
|
||||||
|
|
||||||
|
//Add new cron tasks
|
||||||
|
$this->api_sanitized($this->settings);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate ICML
|
* Generate ICML
|
||||||
*
|
*
|
||||||
@ -532,6 +557,7 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
'tr_td_cron' => __('Cron launches', 'retailcrm'),
|
'tr_td_cron' => __('Cron launches', 'retailcrm'),
|
||||||
'tr_td_icml' => __('Generation ICML', 'retailcrm'),
|
'tr_td_icml' => __('Generation ICML', 'retailcrm'),
|
||||||
'tr_td_history' => __('Syncing history', 'retailcrm'),
|
'tr_td_history' => __('Syncing history', 'retailcrm'),
|
||||||
|
'tr_successful' => __('Cron tasks cleared', 'retailcrm'),
|
||||||
'tr_td_inventories' => __('Syncing inventories', 'retailcrm'),
|
'tr_td_inventories' => __('Syncing inventories', 'retailcrm'),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -38,27 +38,28 @@ class WC_Retailcrm_Plugin
|
|||||||
{
|
{
|
||||||
$this->file = $file;
|
$this->file = $file;
|
||||||
|
|
||||||
add_filter('cron_schedules', array($this, 'filter_cron_schedules'), 10, 1);
|
add_filter('cron_schedules', [$this, 'filter_cron_schedules'], 10, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function filter_cron_schedules($schedules)
|
public function filter_cron_schedules($schedules)
|
||||||
{
|
{
|
||||||
return array_merge(
|
return array_merge(
|
||||||
$schedules,
|
$schedules,
|
||||||
array(
|
[
|
||||||
'five_minutes' => array(
|
'five_minutes' => [
|
||||||
'interval' => 300, // seconds
|
'interval' => 300, // seconds
|
||||||
'display' => __('Every 5 minutes')
|
'display' => __('Every 5 minutes')
|
||||||
),
|
],
|
||||||
'three_hours' => array(
|
'three_hours' => [
|
||||||
'interval' => 10800, // seconds
|
'interval' => 10800, // seconds
|
||||||
'display' => __('Every 3 hours')
|
'display' => __('Every 3 hours')
|
||||||
),
|
],
|
||||||
'fiveteen_minutes' => array(
|
'fiveteen_minutes' => [
|
||||||
'interval' => 900, // seconds
|
'interval' => 900, // seconds
|
||||||
'display' => __('Every 15 minutes')
|
'display' => __('Every 15 minutes')
|
||||||
)
|
]
|
||||||
)
|
],
|
||||||
|
apply_filters('retailcrm_add_cron_interval', $schedules)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user