Вышел CS-Cart 4.12.1

Баг/не баг, но вот такая фишка. Магазин закрыт.
Сохраняю в Быстром меню ссылку на страницу контроллера модуля, сами понимаете, для быстрого доступа.
Модуль выключаю.
Ссылка само собой остается
В итоге:

Оповещение Просим прощения, магазин закрыт на обслуживание.

@cs-cart_team верните уже в ядро это пожалуйста.
После обнов править приходится.

Подниму давнюю тему…
Добрался/решился наконец-то обновиться. Прошел шаги с 4.9.3sp1 да 4.11.5 - безупречно.
Дошел до 4.12.1 - обновляюсь на нее.
Обновление проходит успешно - в логе обновления

2023-02-20 16:58:40: ----------
2023-02-20 16:58:40: Upgrade completed!

но по завершении обновления админка вылетает с 500 error
смотрю лог веб сервера

[Mon Feb 20 16:58:40.615661 2023] [:error] [pid 14903] [client 178.208.128.5:55900] PHP Fatal error: Cannot use string offset as an array in /путь/к/магазину/app/Tygh/Settings.php on line 828, referer: http://site.ru/admin.php?dispatch=upgrade_center.manage

фронт аналогично

<!--
PHP Fatal Error

Message
Cannot use string offset as an array

Error at
app/Tygh/Settings.php, line: 828

Backtrace
-->

вроде бы в свое время что-то писалось тут об этом, может кто помнит?

PS все сторонние модули выключил (включая и свои :slight_smile: )

Я с 4.9.3SP1 до 4.13 обновился без подобных проблем.

Вобщем нашел и причину, и решение (надеюсь временное)
Один из модулей (и пофиг совершенно ядру, что в модулях я все сторонние модули выключил, карт всё равно грузит из таблицы все настройки, и включенных модулей, и выключенных).
К версии 4.12.1 файл Tygh/Settings.php претерпел массу изменений, сильно далеко не углублялся, но видимо где-то на уровне получения данных может какая проверка пропала.
Вобщем, в итоге, на стадии формирования массива settings могут дойти табы настроек модуля, которые имеют записи в таблице settings_sections, но для них нет записей в остальных таблицах (например просто вкладка с информацией и кнопками установки демо данных).
В результате в коде

        if ($result) {
            foreach ($result as $_row) {
                $section_name = ($_row['section_id'] != 0 && isset($_sections[$_row['section_id']])) ? $_sections[$_row['section_id']]['name'] : '';
                $section_tab_name = ($_row['section_tab_id'] != 0 && isset($_sections[$_row['section_tab_id']])) ? $_sections[$_row['section_tab_id']]['name'] : '';

                $force_parse = $_row['type'] == 'N' ? true : false;
                if (!empty($_row['section_tab_id']) && $hierarchy) {
                    $settings[$section_name][$section_tab_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
                } elseif (!empty($_row['section_id']) && $hierarchy) {
                    $settings[$section_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
                } else {
                    $settings[$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
                }
            }

$section_name и $section_tab_name - имеют пустые значения, так как
$_row[‘section_id’] и $_row[‘section_tab_id’] имеют значения
а $_sections[$_row[‘section_id’]] и $_sections[$_row[‘section_tab_id’]] - не существуют
однако $_row[‘section_id’] и $_row[‘section_tab_id’] имеют значения, поэтому далее код пытается создать элемент массива

$settings[''][''][$_row['name']]

что и вызывает ошибку

Пока принял решение “в лоб” - добавил проверку на пустое значение

                if (!empty($_row['section_tab_id']) && $hierarchy && !empty($section_tab_name)) {
                    $settings[$section_name][$section_tab_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
                } elseif (!empty($_row['section_id']) && $hierarchy && !empty($section_name)) {
                    $settings[$section_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
                } else {
                    $settings[$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
                }

полет нормальный.
Интересует - как обстоят дела с этим файлом в последней версии (пока решил отложить обновление модуля из-за которого возникла такая ситуация, чтобы обновиться дальше, убрать свои правки и посмотреть результат).

На модуль-то грешить тоже не особо хочется, потому что если ядро позволяет в базе создавать такую ситуацию - то проблема в ядре, не в модуле.

@Asya @cs-cart_team - понимаю что на баг пока не тянет, как минимум пока не обновлюсь до последней версии, но всё-равно, звоночек есть.

PS полет не совсем нормальный, нельзя зайти в настройки именно этого модуля, настройки одним списком вне табов (это и понятно). Буду думать.

2 лайка