В 4.11.1 некорректно работает установка модулей

В cscart 4.11.1 при установке модулей “Опасным” способом некорректно работает установка модулей. В описании способа говорится “мы установим новый модуль поверх старого” что в свою очередь предполагает старое поведение установки модулей, при этом выполняется контроллер addons.php(mode recheck), который в свою очередь вызывает функцию fn_addons_move_and_install в котором уже вызывается fn_remove_addon_files и в этой функции вызывается следующий код > $themes_dirs_list = fn_get_dir_contents($config_dirs[‘design_frontend’]);

        foreach ($themes_dirs_list as $theme) {
            $addon_files_list[] = $config_dirs['design_frontend'] . $theme . '/css/addons/' . $addon;
            $addon_files_list[] = $config_dirs['design_frontend'] . $theme . '/mail/templates/addons/' . $addon;
            $addon_files_list[] = $config_dirs['design_frontend'] . $theme . '/media/fonts/addons/' . $addon;
            $addon_files_list[] = $config_dirs['design_frontend'] . $theme . '/media/images/addons/' . $addon;
            $addon_files_list[] = $config_dirs['design_frontend'] . $theme . '/templates/addons/' . $addon;
        }

В итоге имеем следующее поведение - при установке модуля опасным способом все файлы модуля в папке design\themes удаляются и при последующей установке не восстанавливаются и ожидать корректной работы модуля после этого бессмысленно.
Ожидаемое поведение - никакие файлы модуля, как и раньше, не должны удалятся, должны заменятся те файлы которые есть в новой версии модуля и папка design\themes не должна быть затронута(предположительно fn_remove_addon_files вообще не должна вызываться при установке опасным способом).

Что за Опасный способ?

@ecomlabs
При установке модуля из архива и условии что этот модуль уже установлен теперь предлагается выбор:

Screenshot_2019-11-25
Screenshot_2019-11-25(1)
Screenshot_2019-11-25(2)

Спасибо, не видел

Поэкспериментировал нажав на кнопку “Использовать опасный способ” и сайт упал, как и обещали. :rofl:

1 лайк

Баг подтверждаю, но не тот, о котором написано в сообщении. Проблема тут в том, что описание у “опасного” способа устарело. Оно отражает проблему старого поведения: файлы перемешивались и получался нерабочий модуль. При реализации задачи возникло другое решение (на наш взгляд, более правильное).

Сейчас оба способа удаляют все старые файлы модуля (если они находятся в стандартных папках CS-Cart) и заменяют их на новые. В результате:

  • Если в модуле не менялась структура данных в БД, то “опасным” способом можно перейти со старой версии модуля на новую (с заменой всех файлов).

  • Если структура данных изменилась (или если есть вообще любые сомнения), то безопасный способ делает “чистую” установку модуля с потерей всех данных.

Я создал задачу, чтобы описание модуля в будущих версиях это отражало.

@ikoshkin
Мне кажется вы не поняли суть проблемы, при обоих способах сейчас очищаются старые файлы(в том числе и в design/themes), но при безопасном способе отрабатывает установка модуля и новые файлы копируются в папку design/themes, а при опасном способе установка не отрабатывает(так как модуль не удалялся, проверка на то установлен ли модуль прописана в методе установки и если установлен то метод просто завершает работу) и design/themes остаётся пустым(без каких либо файлов модуля), соответственно перейти на новую версию нельзя(фактически обновление опасным способом сломано)

Спасибо за пояснение. Благодаря ему удалось воспроизвести и эту проблему. Добавил её в описание задачи.