Загрузчик модулей
Загрузчик модулей отвечает за автоматическое обнаружение, регистрацию и инициализацию всех модулей, расположенных в каталоге plugins. Он синхронизирует состояние файловой системы и базы данных, гарантируя, что система всегда знает, какие модули существуют, какие активны и какие отсутствуют.
При запуске загрузчик получает список модулей, которые уже существуют в базе данных. Затем он сканирует файловую систему и ищет каталоги модулей. Каждый модуль должен содержать файл module.php, который возвращает конфигурационный массив. Если обязательные параметры отсутствуют, модуль пропускается.
После загрузки конфигурации модуль проходит проверку корректности расположения. Тип модуля определяет каталог, в котором он должен находиться. Если модуль лежит не в той директории, он игнорируется. Это исключает ошибки, связанные с неправильной структурой файлов.
Если модуль найден на диске, но отсутствует в базе данных, создаётся новая запись. При этом может быть вызвана функция install, если она определена в конфигурации. Если модуль уже существует в базе данных, его статус missing сбрасывается, а версия сравнивается с версией в файле. Если версии отличаются, install вызывается повторно как миграция, после чего версия обновляется.
Загрузчик всегда загружает конфигурацию модуля в память, независимо от его статуса. Если модуль активен и не помечен как отсутствующий, выполняется функция init, если она определена. Для некоторых типов модулей действует правило эксклюзивности. Это означает, что активным может быть только один модуль определённого типа. Если активируется новый модуль эксклюзивного типа, предыдущий автоматически отключается.
После завершения обработки всех модулей загрузчик проверяет, какие модули присутствуют в базе данных, но отсутствуют на диске. Такие модули помечаются как missing. Это позволяет системе корректно реагировать на удаление модулей с файловой системы.
Загрузчик модулей обеспечивает согласованность между файловой системой и базой данных, автоматическую установку и обновление модулей, а также корректную инициализацию активных компонентов системы.