Added highlighting of tabs with errors in settings

This commit is contained in:
gleemand 2021-06-25 18:44:52 +03:00 committed by GitHub
parent 5fc6e4c5b8
commit 45ce3247f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 116 additions and 19 deletions

View File

@ -256,7 +256,7 @@ class RetailcrmReferences
return $this->getApiStatuses();
}
protected function getApiDeliveryTypes()
public function getApiDeliveryTypes()
{
$crmDeliveryTypes = array();
$request = $this->api->deliveryTypesList();
@ -281,7 +281,7 @@ class RetailcrmReferences
return $crmDeliveryTypes;
}
protected function getApiStatuses()
public function getApiStatuses()
{
$crmStatusTypes = array();
$request = $this->api->statusesList();
@ -315,7 +315,7 @@ class RetailcrmReferences
return $crmStatusTypes;
}
protected function getApiPaymentTypes()
public function getApiPaymentTypes()
{
$crmPaymentTypes = array();
$request = $this->api->paymentTypesList();

View File

@ -83,6 +83,7 @@ class RetailcrmSettingsTemplate extends RetailcrmAbstractTemplate
$params['currentJob'] = Configuration::get(RetailcrmJobManager::CURRENT_TASK);
$params['currentJobCli'] = Configuration::get(RetailcrmCli::CURRENT_TASK_CLI);
$params['retailcrmLogsInfo'] = RetailcrmLogger::getLogFilesInfo();
$params['errorTabs'] = $this->module->validateStoredSettings();
}
return $params;

View File

@ -86,6 +86,14 @@ class RetailCRM extends Module
'RetailcrmClearLogsEvent' => 'Clearing logs'
];
const TABS_TO_VALIDATE = [
'delivery' => self::DELIVERY,
'statuses' => self::STATUS,
'payment' => self::PAYMENT,
'deliveryDefault' => self::DELIVERY_DEFAULT,
'paymentDefault' => self::PAYMENT_DEFAULT,
];
/**
* @var array $templateErrors
*/
@ -1086,6 +1094,56 @@ class RetailCRM extends Module
return true;
}
public function validateStoredSettings()
{
$output = array();
$checkApiMethods = array(
'delivery' => 'getApiDeliveryTypes',
'statuses' => 'getApiStatuses',
'payment' => 'getApiPaymentTypes',
);
foreach (self::TABS_TO_VALIDATE as $tabName => $settingName) {
$storedValues = Tools::getIsset($settingName)
? Tools::getValue($settingName)
: json_decode(Configuration::get($settingName), true);
if ($storedValues !== false && $storedValues !== null) {
if (!$this->validateMappingSelected($storedValues)) {
$output[] = $tabName;
} else {
if (array_key_exists($tabName, $checkApiMethods)) {
$crmValues = call_user_func(array($this->reference, $checkApiMethods[$tabName]));
$crmCodes = array_column($crmValues, 'id_option');
if (!empty(array_diff($storedValues, $crmCodes))) {
$output[] = $tabName;
};
}
}
}
}
return $output;
}
private function validateMappingSelected($values)
{
if (is_array($values)) {
foreach ($values as $item) {
if (empty($item)) {
return false;
}
}
} else {
if (empty($values)) {
return false;
}
}
return true;
}
/**
* Settings form validator
*
@ -1124,6 +1182,21 @@ class RetailCRM extends Module
);
}
$errorTabs = $this->validateStoredSettings();
if (in_array('delivery', $errorTabs)) {
$this->displayWarning($this->l('Select values for all delivery types'));
}
if (in_array('statuses', $errorTabs)) {
$this->displayWarning($this->l('Select values for all order statuses'));
}
if (in_array('payment', $errorTabs)) {
$this->displayWarning($this->l('Select values for all payment types'));
}
if (in_array('deliveryDefault', $errorTabs) || in_array('paymentDefault', $errorTabs)) {
$this->displayWarning($this->l('Select values for all default parameters'));
}
return $output;
}

View File

@ -15,6 +15,10 @@ $_MODULE['<{retailcrm}prestashop>retailcrm_b9c4e8fe56eabcc4c7913ebb2f8eb388'] =
$_MODULE['<{retailcrm}prestashop>retailcrm_39e90036af004a005ccbccbe9a9c19c2'] = 'Los estados de orden no deben repetirse en la matriz de estados';
$_MODULE['<{retailcrm}prestashop>retailcrm_a52213fa61ecf700d1a6091d9769c9a8'] = 'Los tipos de entrega no deben repetirse en la matriz de entrega';
$_MODULE['<{retailcrm}prestashop>retailcrm_f08acd4b354f4d5f4e531ca1972e4504'] = 'Los tipos de pago no deben repetirse en la matriz de pagos';
$_MODULE['<{retailcrm}prestashop>retailcrm_49910de3587b1c6141c03f65ef26b334'] = 'Seleccionar valores para todos los tipos de envío';
$_MODULE['<{retailcrm}prestashop>retailcrm_220b6b5418e80a7f86b0ce9fbdd96bb0'] = 'Seleccionar valores para todos los estados de los pedidos';
$_MODULE['<{retailcrm}prestashop>retailcrm_10f66d6041a2b944b446b6ca02f7f4f3'] = 'Seleccionar valores para todos los tipos de pago';
$_MODULE['<{retailcrm}prestashop>retailcrm_1bf0b3775f120ff1991773064903e8b1'] = 'Seleccionar valores para todos los parámetros predeterminados';
$_MODULE['<{retailcrm}prestashop>retailcrm_d5bb7c2cb1565fb1568924b01847b330'] = 'Tras 15 minutos';
$_MODULE['<{retailcrm}prestashop>retailcrm_9d3095e54f694bb41ef4a3e62ed90e7a'] = 'Tras 30 minutos';
$_MODULE['<{retailcrm}prestashop>retailcrm_dfb403fd86851c7d9f97706dff5a2327'] = 'Tras 45 minutos';

View File

@ -15,6 +15,10 @@ $_MODULE['<{retailcrm}prestashop>retailcrm_b9c4e8fe56eabcc4c7913ebb2f8eb388'] =
$_MODULE['<{retailcrm}prestashop>retailcrm_39e90036af004a005ccbccbe9a9c19c2'] = 'Статусы заказов не должны повторяться в матрице соответствий статусов';
$_MODULE['<{retailcrm}prestashop>retailcrm_a52213fa61ecf700d1a6091d9769c9a8'] = 'Типы доставок не должны повторяться в матрице соответствий типов доставок';
$_MODULE['<{retailcrm}prestashop>retailcrm_f08acd4b354f4d5f4e531ca1972e4504'] = 'Способы оплат не должны повторяться в матрице соответствий способов оплат';
$_MODULE['<{retailcrm}prestashop>retailcrm_49910de3587b1c6141c03f65ef26b334'] = 'Выберите соответствия для всех типов доставки';
$_MODULE['<{retailcrm}prestashop>retailcrm_220b6b5418e80a7f86b0ce9fbdd96bb0'] = 'Выберите соответствия для всех статусов заказов';
$_MODULE['<{retailcrm}prestashop>retailcrm_10f66d6041a2b944b446b6ca02f7f4f3'] = 'Выберите соответствия для всех типов оплаты';
$_MODULE['<{retailcrm}prestashop>retailcrm_1bf0b3775f120ff1991773064903e8b1'] = 'Выберите соответствия для всех параметров по умолчанию';
$_MODULE['<{retailcrm}prestashop>retailcrm_d5bb7c2cb1565fb1568924b01847b330'] = 'Через 15 минут';
$_MODULE['<{retailcrm}prestashop>retailcrm_9d3095e54f694bb41ef4a3e62ed90e7a'] = 'Через 30 минут';
$_MODULE['<{retailcrm}prestashop>retailcrm_dfb403fd86851c7d9f97706dff5a2327'] = 'Через 45 минут';

View File

@ -1,8 +1,11 @@
@import "fonts.less";
@red: #0068FF;
@redHover: #005add;
@red: #ff553b;
@redHover: #da4932;
@redActive: darken(@redHover, 10%);
@blue: #0068FF;
@blueHover: #005add;
@blueActive: darken(@blueHover, 10%);
@gray: #7A7A7A;
@grayBg: #EAEBEC;
@grayBtn: rgba(122, 122, 122, 0.1);
@ -146,12 +149,12 @@ body, html {
margin-bottom: 22px;
&_link {
color: @red;
color: @blue;
transition: .25s ease;
float: right;
&:hover {
color: @redHover;
color: @blueHover;
}
}
}
@ -273,7 +276,7 @@ body, html {
right: 0;
opacity: 0;
visibility: hidden;
background: @red;
background: @blue;
transition: .25s ease;
}
@ -372,14 +375,14 @@ body, html {
margin-top: 10px;
}
&__link {
color: @red;
color: @blue;
font-size: 16px;
font-weight: 600;
line-height: 24px;
transition: .25s ease;
&:hover {
color: @redHover;
color: @blueHover;
}
}
}
@ -488,6 +491,18 @@ body, html {
}
&_active {
color: white !important;
background: @blue !important;
&:hover {
background: @blueHover !important;
}
&.retail-menu__btn_error {
background: @redHover !important;
}
}
&_error {
color: white !important;
background: @red !important;
@ -520,7 +535,7 @@ body, html {
font-size: 18px;
font-weight: 600;
text-align: center;
color: @red;
color: @blue;
text-decoration: none;
cursor: pointer;
appearance: none;
@ -540,15 +555,15 @@ body, html {
min-width: 356px;
}
&_invert {
background: @red;
background: @blue;
color: white;
&:hover {
background: @redHover;
background: @blueHover;
}
&:active {
background: @redActive;
background: @blueActive;
}
}
&_whatsapp {

File diff suppressed because one or more lines are too long

View File

@ -49,10 +49,10 @@
<aside class="retail-column__aside">
<div class="retail-menu">
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_connection" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_active"><span>{l s='Connection' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_delivery_types" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Delivery' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_order_statuses" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Order statuses' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_payment_types" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Payment types' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_default_types" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Default' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_delivery_types" class="retail-menu__btn retail-menu__btn_big{if in_array('delivery', $errorTabs)} retail-menu__btn_error{/if}"><span>{l s='Delivery' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_order_statuses" class="retail-menu__btn retail-menu__btn_big{if in_array('statuses', $errorTabs)} retail-menu__btn_error{/if}"><span>{l s='Order statuses' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_payment_types" class="retail-menu__btn retail-menu__btn_big{if in_array('payment', $errorTabs)} retail-menu__btn_error{/if}"><span>{l s='Payment types' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_default_types" class="retail-menu__btn retail-menu__btn_big{if in_array('deliveryDefault', $errorTabs) || in_array('paymentDefault', $errorTabs)} retail-menu__btn_error{/if}"><span>{l s='Default' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_orders_upload" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Upload orders' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_carts_sync" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Abandoned carts' mod='retailcrm'}<span/></a>
<a href="{$url_post|escape:'htmlall':'UTF-8'}&amp;configure=retailcrm" data-tab-trigger="rcrm_tab_daemon_collector" class="retail-menu__btn retail-menu__btn_big retail-menu__btn_inactive"><span>{l s='Daemon Collector' mod='retailcrm'}<span/></a>