Skip to content

Собственная система удаления компонента #33

@biz87

Description

@biz87

Проблема: Неконтролируемое удаление компонента через Package Manager

Текущая ситуация

При удалении MiniShop3 через стандартный Package Manager MODX возникает несколько проблем:

  1. Неправильный порядок операций

    • MODX сначала удаляет файлы компонента
    • Потом пытается выполнить resolvers, которые используют эти файлы
    • Результат: PHP deprecated ошибки и невозможность корректно очистить данные
  2. Отсутствие контроля

    • Нет возможности выбрать, что удалять (только файлы, или данные тоже)
    • Нет опции отката миграций БД
    • Пользователь не может контролировать процесс удаления
  3. Данные остаются в БД

    • Таблицы с заказами, товарами остаются после удаления
    • Это правильно по умолчанию (безопасность данных)
    • Но нет удобного способа удалить всё полностью, если нужно

Предлагаемое решение

Создать собственную страницу удаления компонента в разделе Utilities:

MiniShop3 → Utilities → Uninstall Component

На этой странице пользователь сможет:

  • Выбрать, что именно удалять (чекбоксы):
    • ☐ Откатить миграции БД (удалить таблицы)
    • ☐ Очистить данные (заказы, товары)
    • ☐ Удалить медиа-файлы
  • Ввести подтверждение (защита от случайного удаления)
  • Выполнить контролируемое удаление в правильном порядке

Преимущества:

  • Полный контроль над процессом удаления
  • Правильная последовательность операций (откат миграций → очистка данных → удаление файлов)
  • Не ломает стандартный workflow (кто хочет удалить через Package Manager — пусть удаляет как обычно)
  • Профессиональный подход (как у коммерческих компонентов MODX)

Не меняется:

  • Стандартное удаление через Package Manager продолжает работать (данные сохраняются)
  • Мы добавляем возможности, а не убираем существующие

Технические детали

Страница удаления будет:

  1. Выполнять операции в правильном порядке (пока файлы ещё существуют)
  2. Удалять запись о пакете из таблицы modx_transport_packages
  3. Очищать кэш
  4. Перенаправлять пользователя на главную страницу админки

Приоритет

  • Low - можно сделать в будущих версиях
  • Medium - желательно добавить для удобства пользователей
  • High - критично для стабильности

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumСредний приоритет

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions