[AVP] Бэкап настроек удаляемого модуля

Большле обновление модуля!

На странице модуля доступны следующие действия:

  • Управление сохраненными бэкапами настроек модулей. Бэкапы отсортированы по названиям модулей в алфавитном порядке, в каждом модуле - по дате;
  • Доступные действия: удалить, применить, просмотреть, изменить/добавить комментарий, скопировать бэкап в буфер обмена, скачать бэкап файлом;
  • Импортировать бэкап в файл и сохранить на компьютере;
  • Загрузить сохраненный бэкап из буфера обмена, или из сохраненного файла с компьютера;
  • На этой же странице вы можете сделать бэкап любого из установленных модулей;
  • Физически удалить с диска все файлы любого неустановленного или выключенного модуля. Здесь следует отметить, что если модуль недостаточно чистоплотен, возможны остатки данных в базе, в виде таблиц или колонок. После долгих попыток, было принято решение пока оставить этот вопрос на совести разработчиков таких модулей;

В превью сохраненных настроек модуля по кнопке Редактировать происходит переход к дополнительным возможностям управления бэкапом:

  • Основная таблица показывает настройки, сохраненные в бэкапе, и текущие настройки модуля (если он установлен);
  • Возможность переносить отдельные настройки в бэкап или из бэкапа.

После установки модуля доступны следующие настройки:

Набор предустановленных настроек предназначен для стандартного использования: Удаляете (на самом деле немного неверная терминология выбрана разработчиками: фактически удаления не происходит, а происходит деинсталляция модуля из системы, все файлы модуля остаются на своих местах) модуль - автоматом создается бэкап настроек. Устанавливаете модуль обратно - в модуль возвращаются настройки из последнего бэкапа и бэкап удаляется.

Следующая настройка - результат очередного ограничения заданной логикой ядра, но я больше думаю, что скорее всего это результат недопродуманности логики. Дело в том, что при деинсталляции модуля (я буду использовать этот термин) ВСЕГДА выполняются инструкции из файла addon.xml удаления из БД таблиц и добавленных колонок.
Хуков для того, чтобы модулем при желании отменить удаление данных при деинсталляции модуля - нет. Какие-то разработчики просто не ставят инструкции для удаления данных из БД при деинсталляции/удаления. Я же во всех своих модулях использую такой вариант:
Настройка в модуле:
ru
Код в addon.xml только для установки:

    <functions>
        <item for="install">fn_avp_backup_settings_addons_install</item>
        <item for="uninstall">fn_avp_backup_settings_addons_uninstall</item>
    </functions>

    <queries>        
        <item for="install">
            CREATE TABLE `?:avp_backup_settings_addons` (
              `addon` varchar(48) NOT NULL,
              `addon_name` varchar(128) NOT NULL,
              `settings` longtext NOT NULL,
              `sql` longtext NOT NULL,
              `timestamp` int(11) unsigned NOT NULL DEFAULT '0',
              `applied` int(1) NOT NULL DEFAULT '0',
              `comment` text NOT NULL,
              UNIQUE KEY `addon_timestamp` (`addon`,`timestamp`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
        </item>
        <item for="install">ALTER TABLE `?:avp_backup_settings_addons` ADD `addon_name` varchar(128) NOT NULL ;</item>
        <item for="install">ALTER TABLE `?:avp_backup_settings_addons` ADD `timestamp` int(11) unsigned NOT NULL DEFAULT '0' ;</item>
        <item for="install">ALTER TABLE `?:avp_backup_settings_addons` ADD `applied` int(1) NOT NULL DEFAULT '0' ;</item>
        <item for="install">ALTER TABLE `?:avp_backup_settings_addons` ADD `comment` text NOT NULL ;</item>
        <item for="install">ALTER TABLE `?:avp_backup_settings_addons` ADD `sql` LONGTEXT NOT NULL ;</item>
    </queries>

и код из func.php:

function fn_avp_backup_settings_addons_install() {

    }

function fn_avp_backup_settings_addons_uninstall() {
    
    if (Registry::get('addons.avp_backup_settings_addons.delete_all_data') === 'Y') {        
        db_query("DROP TABLE IF EXISTS ?:avp_backup_settings_addons");
    } else {
        fn_set_notification('W', __('warning'), __('avp_addon_data_not_delete'));
    }
    
}

Последняя настройка модуля - касается физического удаления модуля с диска. Об этом чуть позже.
Первая вкладка настроек модуля содержит приведенное выше описание возможностей модуля, и кнопку для перехода к странице контроллера модуля. Действия эти не повседневные, не каждому администратору/редактору/контентщику требуемые, а потому, чем нетривиальнее путь к странице, тем меньше вероятность что кто-то не тот сделает что-то не то :slight_smile:

Переходим к странице управления бэкапами, которая включает и дополнительные возможности

И разберем ее по каждому блоку.
Певый блок - список сохраненных бэкапов


Колонки:

  • знак состояния модуля. Галочка - модуль установлен (зеленый цвет - активный, серый - выключен), красный крестик - модуль удален (деинсталлирован).
  • Название модуля
  • дата и время создания бэкапа
  • кнопки доступных действий над бэкапом
  • Комментарий к бэкапу

Действия:
Удалить можно любой бэкап.
Применить бэкап можно только к установленному модулю. Если модуль деинсталлирован - кнопка неактивна.
Просмотр бэкапа: показаны сохраненные настройки: название настройки, код настройки, значение (если значение выбирается из селекта - в качестве значения показывается не код значения, а его языковое представление, что гораздо удобнее для понимания)

При автосозданнии бэкапа, добавлении бэкапа через буфер обмена или загрузку файла к комментарию добавляются метки [AUTO_BACKUP] [INSERT_BACKUP] [UPLOAD_BACKUP] соответственно. По кнопке комментария можно отредактировать/дополнить комментарий:

Кнопка копировать - позволяет скопировать содержание бэкапа в буфер обмена. Например вы тестировали какой-либо модуль с большим количеством настроек на тестовой системе, всё настроили, и теперь огромное количество настроек надо перенести в рабочую систему. Тогда вы создаете снимок настроек установленного модуля (создаете бэкап настроек установленного модуля - блок описан ниже), копируете их в буфер обмена на тестовой установке, затем на рабочем магазине вставляете бэкап из буфера обмена в поле (блок описан ниже) и сохраняете бэкап. После чего применяете полученный бэкап. 15 секунд, и все настройки перенесены из тестовой системы в рабочую.

Последняя кнопка - сохраняет бэкап настроек в файл. Со стандартными разрешениями не всё так просто в ядре, поэтому чтобы не мудрствовать и заставлять вас править htaccess - я просто стал сохранять текст бэкапа в файл с расширением csv - т.е. читай - просто в текстовый файл. Именуется файл - код модуля - дата/время создания бэкапа.

Следующий блок - ручное создание бэкапа. Например, вы настроили модуль рассылок на работу через smtp яндекса, сохранили настройки, настроили на smtp гугла - тоже сохранили настройки… В дальнейшем, можно переключиться с одного подключения на другое или обратно - просто применив тот или другой бэкап настроек.


Выбираете любой установленный (активный или выключенный) модуль, пишете свой комментарий, и нажимаете “Сохранить настройки”.

Следующий блок - Загрузить бэкап.


Если вы получили его файлом - загружаете через выбор файла и жмете Выполнить.
Если из буфера обмена - вставляете в соответствующее поле и жмете Добавить.
В списке бэкапов появится загруженный бэкап.

Далее идете такая интересная функция, как скачать полный архив модуля.


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

Впоследствии этот архив вы можете установить обратно через стандартный функционал установки на странице модулей.

И еще один блок на этом скриншоте - позволяет ФИЗИЧЕСКИ удалить ненужный и не используемый модуль из файловой системы. Например у меня еще со старых времен висят модули фиксов, никогда больше не будут обновляться модули старой админпанели и старый модуль обмена с 1С. Таким образом можно такие модули смело удалять, чтобы не мозолили глаза.
Другой сценарий использования.
На новую систему обновлений перешли разве что RetailFactiry да AB, с остальными модулями надо проделывать ту самую процедуру, которую раз за разом внушали свим пользователям AB - так как состав файлов модуля постоянно меняется, поэтому сначала надо удалить старые файлы, а потом уже только - накатить файлы нового модуля. Потому что если в папке хаблоном модуля например останется какой-то хук которого больше нет в модуле - он останется и будет портить вам жизнь, а вы так и не поймете, почему после обновления что-то стало работать неправильно. С AB этого делать больше не надо, но с другими разработчиками - очень даже. А сам сценарий таков. Делаете ручной бэкап настроек модуля (вообще, возьмите себе за правило - при любых операциях - делать бэкапы, и вам сразу спокойнее станет жить), делаете бэкап файлов модуля (сохраняете его у себя на компьютере. Выключаете модуль (не удаляете на странице работы с модулями, а просто выключаете) - после чего выбираете этот модуль в блоке “Физически удалить неустановленный модуль” и удаляете все файлы модуля из системы. В итоге в вашей установке настройки модуля и данные модуля остаются в БД. Далее вы можете либо накатить файлы из установочного архива на ваш магазин, или установить новую версию модуля через стандартный интерфейс админки, а затем применить сохраненный бэкап настроек.
Что это дает? Например, если новая версия модуля вас совершенно не устроили - вы можете точно также удалить из файловой системы новую версию модуля и вернуть старую из сохраненного архива с файлами и настройками.

Ну и последний элемент работы с настройками: из просмотра настроек бэкапа вы можете попасть на страницу работы с настройками конкретного модуля по кнопки внизу всплывающего окна:

По этой кнопке вы попадете на следующую страницу:


Колонки: название настройки, код настройки, значение в бэкапа, признак соответствия, текущее значение в установленном модуле.
Если значения соответствуют - строка отмечена зеленой галочкой, действия не требуются.
Если значения в бэкапе и в текущей установке различны - такая строка подсвечена цветом и доступно меню выбора действия:

← Скопировать текущую настройку в бэкап
→ Сделать настройку из бэкапа - текущей

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

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

Если вас заинтересовал данный модуль - пишите, предложения, пожелания - тоже.

PS установочный пакет этого модуля собран самим этим модулем :wink:

PPS Если вы устанавливали старую версию - можете удалять ее вместе с данными - формат хранения бэкапа изменился. Вы можете и не удалять данные, все установится нормально, но старые бэкапы все равно не будут работать, вам просто надо будет удалить их вручную.

И как всегда планы на будущее:
пока в раздумьях, надо ли давать возможность менять настройки на странице редактирования бэкапа, или оставить только возможность переносить имеющиеся настройки.
В формате хранения данных к этому всё готово, но пока думаю над организацией вывода: если бэкап от другой версии модуля - возможно, что настройки разнятся, и тогда будут выведены сообщения, что такой-то настройки нет в установленном модуле или в бэкапе.
Всё также думаю над бэкапом данных модуля из БД, но тут точно универсального метода не получится, так как кто-то не только удаление, но и создание таблиц переносит из инструкций addon.xml в функцию, запускаемую при установке модуля.

PPS если вы удаляете модуль ядра, и впоследствии разработчики из сs-cart решат его обновить - они не посмотрят на то, что этого модуля у вас нет и обновление поставит к вам файлы от этого модуля, которые будут включены в обновление. Вот такая вот монополия :slight_smile: Поэтому также планирую ввести запись удаленных модулей, и добавить кнопку чистки, или через команду cron - проверка вновь появившихся файлов и папок от удаленных таким образом модулей.

11 лайков

Обновил архив
Исправлена ошибка с неправильным удалением восстановленного бэкапа.

Обновил модуль. Теперь абсолютно все настройки удаляемого модуля правильно сохраняются в бэкапе и впоследствии восстанавливаются, как бы они ни были заданы.

Существует ли опция выбора использовать бэкап модуль при удалении или удалить не сохраняя настроек?
К примеру, если нет намерения повторной установки модуля.

Будет страница со списком сохранённых настроек и возможностью удалить ненужные.

Сделал большое обновление модуля

4 лайка

Что-то не пойму - а где скачать модуль?

1 лайк

А где можно посмотреть на работу модуля или где можно скачать?

Поделитесь пожалуйста модулем:)