Файл ExtensionsService.php в Cotonti

Основное назначение файла ExtensionsService.php и его место в системе:

Файл ExtensionsService.php является частью системы управления расширениями (модулями и плагинами) в движке Cotonti CMF. Этот файл содержит сервисный класс, который реализует функциональность для работы с расширениями, такими как проверка их состояния (установлены ли они, активированы ли они), получение URL-адресов для страниц администратора и пользователей, а также получение мета-данных для каждого расширения. Это основной компонент для работы с расширениями в системе Cotonti, и он взаимодействует с базой данных и файлами для выполнения различных операций с модулями и плагинами.

Суть содержания кода:

  1. Получение информации о расширениях: Включает методы для получения информации о модулях и плагинах, таких как их название, описание, версия и активность.
  2. Проверка состояния расширений: Методы для проверки, установлены ли расширения, активированы ли они, и если да, то какие именно действия могут быть выполнены с ними.
  3. URL-адреса для расширений: Методы, которые определяют URL для публичных и административных страниц расширений, если таковые существуют.
  4. Управление правами доступа: Получение URL для настроек прав доступа (ACL) для каждого расширения.

Условия, которые выполняет код:

  • Проверка типов расширений: Система проверяет, является ли расширение модулем или плагином.
  • Проверка активности: Система проверяет, активированы ли расширения (модули или плагины).
  • Получение URL: Система генерирует URL для публичных или административных страниц расширений.
  • Работа с хуками: Для получения URL или выполнения других операций используются хуки, которые могут быть определены плагинами или модулями.
  • Извлечение мета-данных: Получение информации, такой как название и описание расширений, из языковых файлов или из базы данных.

Классы в файле:

  • ExtensionsService: Единственный класс в файле, который предоставляет методы для управления и получения информации о расширениях.

Методы и функции в файле:

  1. getDefaultAction: Получает действие по умолчанию для расширения, если оно существует.
  2. getModulesList: Возвращает список установленных модулей.
  3. getPluginsList: Возвращает список установленных плагинов.
  4. getType: Определяет тип расширения (модуль или плагин) в зависимости от наличия в соответствующих директориях.
  5. getPublicPageUrl: Возвращает URL публичной страницы для расширения, если она существует.
  6. getAdminPageUrl: Возвращает URL административной страницы для расширения.
  7. getRightsUrl: Возвращает URL для настройки прав доступа (ACL) для расширения.
  8. isInstalled: Проверяет, установлено ли расширение.
  9. isActive: Проверяет, активно ли расширение (модуль или плагин).
  10. isModuleActive: Проверяет, активен ли модуль.
  11. isPluginActive: Проверяет, активен ли плагин.

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

 

 

находится по адресу: /system/extensions/ExtensionsService.php движка php-фреймворка.

<?php
/**
 * @package Extensions
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

declare(strict_types=1);  // Задаёт строгий режим типов данных для данного файла

namespace cot\extensions;  // Указывает, что этот код принадлежит пространству имен "cot\extensions"

defined('COT_CODE') or die('Wrong URL.');  // Проверка, что код был загружен через правильный URL, если нет — завершает выполнение с сообщением об ошибке

use Cot;  // Подключение глобального объекта Cot для доступа к системным функциям фреймворка
use cot\router\Router;  // Подключение класса Router для работы с маршрутизацией в системе
use cot\traits\GetInstanceTrait;  // Подключение трейта GetInstanceTrait, который предоставляет возможность использования паттерна Singleton

Примечания:

  1. declare(strict_types=1): Устанавливает строгую проверку типов в PHP. Это означает, что PHP будет требовать строгого соответствия типов данных при передаче значений между функциями и методами.
  2. defined('COT_CODE') or die('Wrong URL.'): Это защита от прямого доступа к файлам. Если файл был загружен напрямую, то выполнение скрипта остановится, и отобразится ошибка.
  3. use: Ключевое слово для подключения классов, функций или констант из других пространств имен, чтобы использовать их в текущем файле.

 

/**
 * Extensions Service
 * @package Extensions
 */
class ExtensionsService  // Объявление класса ExtensionsService, предназначенного для управления расширениями
{
    use GetInstanceTrait;  // Использование трейта GetInstanceTrait для реализации паттерна Singleton в этом классе

Примечания:

  1. ExtensionsService: Этот класс предоставляет функциональность для работы с расширениями (например, модулями или плагинами) в фреймворке Cotonti. Он будет управлять состоянием и данными расширений.
  2. use GetInstanceTrait: Трейт GetInstanceTrait предоставляет метод getInstance(), который помогает реализовать паттерн Singleton, что гарантирует создание и использование только одного экземпляра класса ExtensionsService.

 

 

/**
 * Получить действие по умолчанию для расширения, если оно существует
 * @return ?array{controller: class-string, action: string}
 */
public function getDefaultAction(  // Объявление метода getDefaultAction для получения действия по умолчанию для расширения
    string $extensionCode,  // Код расширения
    ?string $extensionType = null,  // Тип расширения, если не задано, будет определено автоматически
    bool $isAdminPart = false  // Флаг, указывающий, относится ли запрос к административной части
): ?array {  // Возвращает массив с контроллером и действием, или null, если они не найдены
    $router = Router::getInstance();  // Получение экземпляра роутера, который будет управлять маршрутизацией

    if ($extensionType === null) {  // Если тип расширения не был передан
        $extensionType = $this->getType($extensionCode);  // Получить тип расширения по его коду
    }

    $result = [  // Массив для хранения контроллера и действия
        'controller' => $router->getControllerClass(  // Получение класса контроллера по умолчанию для расширения
            ExtensionsDictionary::DEFAULT_CONTROLLER_ID,  // Идентификатор контроллера по умолчанию
            $extensionCode,  // Код расширения
            $extensionType,  // Тип расширения
            $isAdminPart  // Флаг, указывающий, что это административная часть
        ),
    ];

    if ($result['controller'] === null) {  // Если контроллер не найден
        return null;  // Вернуть null, так как действие не может быть найдено без контроллера
    }

    $result['action'] = $router->getActionName(null, $result['controller']);  // Получение имени действия для контроллера
    if ($result['action'] === null) {  // Если действие не найдено
        return null;  // Вернуть null, так как действие не найдено
    }

    return $result;  // Вернуть массив с найденным контроллером и действием
}

Пояснение к коду:

  1. Метод getDefaultAction: Этот метод используется для получения действия по умолчанию для конкретного расширения (модуля или плагина). Он возвращает информацию о контроллере и действии, которое будет выполнено при запросе этого расширения.
  2. Входные параметры:
    • $extensionCode: Код расширения, для которого ищется действие.
    • $extensionType: Тип расширения (модуль или плагин). Если не указан, он будет определен автоматически.
    • $isAdminPart: Флаг, указывающий, что это административная часть расширения.
  3. Процесс:
    • Метод получает экземпляр роутера через Router::getInstance().
    • Если тип расширения не задан, он определяется через метод getType.
    • Получается класс контроллера для расширения с помощью метода getControllerClass.
    • Если контроллер не найден, метод возвращает null.
    • Далее, для найденного контроллера определяется действие (метод) с помощью getActionName. Если действие не найдено, возвращается null.
    • В случае успеха возвращается массив с контроллером и действием.

Таким образом, метод позволяет получить информацию о контроллере и действии, которое будет выполнено для расширения по умолчанию.

 

/**
 * Получить список модулей
 * @return array<string, array{code: string, title: string, version: string}>
 */
public function getModulesList(): array  // Объявление метода getModulesList, который возвращает список модулей
{
    global $cot_modules;  // Доступ к глобальной переменной $cot_modules, которая хранит список модулей
    return $cot_modules;  // Возвращает глобальную переменную $cot_modules, которая является массивом всех модулей
}

Пояснение к коду:

  1. Метод getModulesList: Этот метод возвращает список модулей, доступных в системе.
  2. Глобальная переменная $cot_modules: Это глобальная переменная, которая хранит информацию о модулях системы. Массив имеет структуру, в которой для каждого модуля указаны его код (code), название (title) и версия (version).
  3. Возврат: Метод просто возвращает содержимое глобальной переменной $cot_modules.

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

 

 

/**
 * Получить список плагинов
 * @return array<string, array{code: string, title: string, version: string}>
 */
public function getPluginsList(): array  // Объявление метода getPluginsList, который возвращает список плагинов
{
    global $cot_plugins_enabled;  // Доступ к глобальной переменной $cot_plugins_enabled, которая хранит список активных плагинов
    return $cot_plugins_enabled;  // Возвращает глобальную переменную $cot_plugins_enabled, которая является массивом активных плагинов
}

Пояснение к коду:

  1. Метод getPluginsList: Этот метод возвращает список плагинов, которые активированы в системе.
  2. Глобальная переменная $cot_plugins_enabled: Это глобальная переменная, которая содержит информацию о плагинах, которые активированы в системе. Массив имеет структуру, в которой для каждого плагина указаны его код (code), название (title) и версия (version).
  3. Возврат: Метод возвращает содержимое глобальной переменной $cot_plugins_enabled.

Этот метод предоставляет доступ к информации о всех активных плагинах, их кодах, названиях и версиях.

 

 

/**
 * Получить тип расширения: модуль или плагин
 * @return string ExtensionsDictionary::TYPE_MODULE или ExtensionsDictionary::TYPE_PLUGIN
 *   или NULL, если расширение не найдено или не установлено
 */
public function getType(string $extensionCode): ?string  // Метод для получения типа расширения (модуль или плагин)
{
    $moduleFound = false;  // Инициализация флага для поиска модуля
    $pluginFound = false;  // Инициализация флага для поиска плагина

    if (file_exists(Cot::$cfg['modules_dir'] . '/' . $extensionCode)) {  // Проверка наличия директории модуля
        $moduleFound = true;  // Если директория модуля существует, флаг модуля устанавливается в true
    }

    if (file_exists(Cot::$cfg['plugins_dir'] . '/' . $extensionCode)) {  // Проверка наличия директории плагина
        $pluginFound = true;  // Если директория плагина существует, флаг плагина устанавливается в true
    }

    if ($moduleFound && $pluginFound) {  // Если найдены и модуль, и плагин, то нужно дополнительно проверить их активность
        if ($this->isModuleActive($extensionCode)) {  // Проверка активности модуля
            return ExtensionsDictionary::TYPE_MODULE;  // Возвращаем тип "модуль", если модуль активен
        }

        if ($this->isPluginActive($extensionCode)) {  // Проверка активности плагина
            return ExtensionsDictionary::TYPE_PLUGIN;  // Возвращаем тип "плагин", если плагин активен
        }

        // Необходимо выполнить запрос к базе данных, чтобы выяснить, какой из них установлен
        $result = Cot::$db->query(  // Выполняем SQL-запрос к базе данных для получения информации о расширении
            'SELECT ct_plug FROM ' . Cot::$db->core . ' WHERE ct_code = ? LIMIT 1',  // Запрос на получение информации о типе расширения
            $extensionCode  // Параметр запроса: код расширения
        )->fetch();  // Получаем результат запроса

        if (!$result) {  // Если результат пустой, то ни модуль, ни плагин не найдены
            $moduleFound = $pluginFound = false;  // Оба флага устанавливаем в false
        } elseif ($result['ct_plug']) {  // Если результат указывает, что это плагин
            $moduleFound = false;  // Флаг модуля устанавливаем в false
        } else {  // Если результат указывает, что это модуль
            $pluginFound = false;  // Флаг плагина устанавливаем в false
        }
    }

    if ($moduleFound) {  // Если флаг модуля установлен в true
        return ExtensionsDictionary::TYPE_MODULE;  // Возвращаем тип "модуль"
    }

    if ($pluginFound) {  // Если флаг плагина установлен в true
        return ExtensionsDictionary::TYPE_PLUGIN;  // Возвращаем тип "плагин"
    }

    return null;  // Если не найдено ни модуль, ни плагин, возвращаем null
}

Пояснение к коду:

  1. Метод getType: Этот метод определяет тип расширения, которое может быть либо модулем, либо плагином, в зависимости от наличия соответствующих директорий и их активности в системе.

  2. Проверка наличия директории: Для начала проверяется, существует ли директория с кодом расширения в каталогах модулей и плагинов. Если хотя бы одна директория существует, флаг соответствующего типа расширения ($moduleFound или $pluginFound) устанавливается в true.

  3. Проверка активности: Если оба типа (модуль и плагин) существуют, то сначала проверяется, какой из них активен с помощью соответствующих методов isModuleActive и isPluginActive.

  4. Запрос в базу данных: Если оба типа расширения найдены, но ни один из них не активен, выполняется запрос к базе данных для проверки столбца ct_plug, чтобы определить, какой тип расширения фактически установлен.

  5. Возврат типа: В конце метода возвращается тип расширения: либо TYPE_MODULE для модуля, либо TYPE_PLUGIN для плагина. Если ни один тип не найден, возвращается null.

Этот метод помогает идентифицировать тип расширения (модуль или плагин) по его коду и устанавливает, активен ли он в системе.

 

/**
 * Получить URL публичной страницы расширения, если он существует
 */
public function getPublicPageUrl(string $extensionCode, ?string $extensionType = null): ?string  // Метод для получения URL публичной страницы расширения
{
    if ($extensionType === null) {  // Если тип расширения не передан
        $extensionType = $this->getType($extensionCode);  // Получаем тип расширения с помощью метода getType
    }

    // Обработчик хуков может установить значение в NULL или STRING
    $result = '__default__';  // Инициализация переменной с значением по умолчанию

    /* === Хук === */
    foreach (cot_getextplugins('extensionService.getPublicPageUrl') as $pl) {  // Запускаем все плагины, связанные с хуком 'extensionService.getPublicPageUrl'
        include $pl;  // Включаем файл плагина
    }
    /* ===== */

    if ($result !== '__default__') {  // Если значение результата было изменено хук-кодом
        if ($result === false) {  // Если результат равен false
            return null;  // Возвращаем null, если хук не разрешает публичную страницу
        }
        return $result;  // Возвращаем значение результата, установленное хук-кодом
    }

    if (!$this->isActive($extensionCode, $extensionType)) {  // Если расширение не активно
        return null;  // Возвращаем null, так как публичная страница недоступна для неактивных расширений
    }

    $hook = $extensionType === ExtensionsDictionary::TYPE_MODULE ? 'module' : 'standalone';  // Определяем тип хука в зависимости от типа расширения

    if (!empty(cot_getextplugins($hook, true, $extensionCode))) {  // Если существуют активные плагины для этого расширения
        return cot_url($extensionCode);  // Возвращаем URL для этого расширения
    }

    if ($this->getDefaultAction($extensionCode, $extensionType) !== null) {  // Если существует действие по умолчанию для расширения
        return cot_url($extensionCode);  // Возвращаем URL для действия по умолчанию
    }

    return null;  // Если публичная страница не найдена, возвращаем null
}

Пояснение к коду:

  1. Метод getPublicPageUrl: Этот метод получает URL публичной страницы расширения, если такая страница существует. Он учитывает активность расширения, настройки хуков и наличие соответствующих плагинов.

  2. Тип расширения: Если тип расширения ($extensionType) не передан в метод, то он определяется с помощью метода getType.

  3. Хуки: Код включает возможность для сторонних плагинов изменить URL публичной страницы. Это делается через хуки, обрабатываемые в блоке cot_getextplugins('extensionService.getPublicPageUrl'). Если хук меняет результат, возвращается полученное значение. Если хук установил false, то возвращается null.

  4. Проверка активности: Если расширение не активно, то возвращается null, указывая, что публичная страница недоступна.

  5. Поиск хука: В зависимости от типа расширения (модуль или standalone) проверяется наличие активных плагинов, ассоциированных с этим расширением. Если такие плагины существуют, возвращается URL для этого расширения.

  6. Действие по умолчанию: Если у расширения есть действие по умолчанию (например, контроллер и действие для публичной страницы), то генерируется URL для этого действия.

  7. Возврат null: Если ни одно из условий не сработало, возвращается null, что означает отсутствие публичной страницы для данного расширения.

Этот метод помогает динамически определить, есть ли публичная страница для расширения, и в случае её наличия, возвращает соответствующий URL.

 

 

/**
 * Получить URL страницы администратора для расширения, если она существует
 */
public function getAdminPageUrl(string $extensionCode, ?string $extensionType = null): ?string  // Метод для получения URL страницы администратора расширения
{
    if ($extensionType === null) {  // Если тип расширения не передан
        $extensionType = $this->getType($extensionCode);  // Получаем тип расширения с помощью метода getType
    }

    // Обработчик хуков может установить его в NULL или STRING
    $result = '__default__';  // Инициализация переменной с значением по умолчанию

    /* === Хук === */
    foreach (cot_getextplugins('extensionService.hasPublicPage') as $pl) {  // Запускаем все плагины, связанные с хуком 'extensionService.hasPublicPage'
        include $pl;  // Включаем файл плагина
    }
    /* ===== */

    if ($result !== '__default__') {  // Если значение результата было изменено хук-кодом
        if ($result === false) {  // Если результат равен false
            return null;  // Возвращаем null, если хук не разрешает страницу администратора
        }
        return $result;  // Возвращаем значение результата, установленное хук-кодом
    }

    if (!$this->isActive($extensionCode, $extensionType)) {  // Если расширение не активно
        return null;  // Возвращаем null, так как страница администратора недоступна для неактивных расширений
    }

    $hooks = ['admin'];  // Стандартный хук для страницы администратора
    if ($extensionType === ExtensionsDictionary::TYPE_PLUGIN) {  // Если расширение является плагином
        $hooks[] = 'tools';  // Добавляем хук для инструмента плагина
    }

    foreach ($hooks as $hook) {  // Перебираем все хуки
        if (!empty(cot_getextplugins($hook, true, $extensionCode))) {  // Если существуют активные плагины для этого хука
            return $hook === 'tools'  // Если хук 'tools'
                ? cot_url('admin', ['m' => 'other', 'p' => $extensionCode])  // Генерируем URL для инструментов плагина
                : cot_url('admin', ['m' => $extensionCode]);  // Генерируем URL для админ-страницы расширения
        }
    }

    if ($this->getDefaultAction($extensionCode, $extensionType, true) !== null) {  // Если существует действие по умолчанию для расширения в админке
        return cot_url('admin', ['m' => $extensionCode]);  // Генерируем URL для действия по умолчанию в админке
    }

    return null;  // Если страница администратора не найдена, возвращаем null
}

Пояснение к коду:

  1. Метод getAdminPageUrl: Этот метод получает URL страницы администратора для расширения, если такая страница существует. Он проверяет активность расширения, наличие хуков, а также действие по умолчанию.

  2. Тип расширения: Если тип расширения ($extensionType) не передан в метод, то он определяется с помощью метода getType.

  3. Хуки: Код поддерживает обработку хуков, которые могут быть использованы для изменения URL страницы администратора. Все хуки для страницы администратора проверяются через cot_getextplugins('extensionService.hasPublicPage'). Если хук изменяет результат, возвращается измененное значение. Если хук установил false, метод возвращает null.

  4. Проверка активности: Если расширение не активно, то возвращается null, что означает, что страница администратора недоступна для неактивных расширений.

  5. Перебор хуков: В зависимости от типа расширения (модуль или плагин) проверяются соответствующие хуки (admin и tools). Если они активны, то генерируется URL для страницы администратора. Для плагинов используется хук tools, а для модулей — хук admin.

  6. Действие по умолчанию: Если у расширения есть действие по умолчанию для админки, то генерируется URL для этого действия.

  7. Возврат null: Если не найдено активных плагинов или действия по умолчанию, возвращается null, что указывает на отсутствие страницы администратора для данного расширения.

Этот метод помогает динамически определить, есть ли страница администратора для расширения, и если такая страница есть, возвращает соответствующий URL.

 

/**
 * Получить URL настроек прав (ACL) для расширения
 */
public function getRightsUrl(string $extensionCode, ?string $extensionType = null): ?string  // Метод для получения URL настроек прав доступа для расширения
{
    if (!$this->isActive($extensionCode, $extensionType)) {  // Если расширение не активно
        return null;  // Возвращаем null, так как настройки прав недоступны для неактивных расширений
    }

    if ($extensionType === ExtensionsDictionary::TYPE_MODULE) {  // Если тип расширения - модуль
        return cot_url('admin', ['m' => 'rightsbyitem', 'ic' => $extensionCode, 'io' => 'a']);  // Генерируем URL для настроек прав доступа для модуля
    }

    return cot_url(  // Если тип расширения - плагин
        'admin',  // Генерируем URL для настроек прав доступа для плагина
        ['m' => 'rightsbyitem', 'ic' => ExtensionsDictionary::TYPE_PLUGIN, 'io' => $extensionCode]
    );
}

Пояснение к коду:

  1. Метод getRightsUrl: Этот метод генерирует URL для страницы настроек прав доступа (ACL) для расширения, в зависимости от того, является ли оно модулем или плагином.

  2. Проверка активности: Если расширение не активно (с помощью метода isActive), то возвращается null, что означает, что настройки прав для неактивных расширений недоступны.

  3. Тип расширения:

    • Если расширение — это модуль ($extensionType === ExtensionsDictionary::TYPE_MODULE), генерируется URL для страницы настроек прав доступа для модуля. URL создается с использованием cot_url, передавая параметры: тип модуля (rightsbyitem), код расширения (ic), и параметр прав доступа (io).
    • Если расширение — это плагин, то для него генерируется аналогичный URL, но с типом плагина.
  4. Возвращаемый результат: Если расширение активно, возвращается соответствующий URL для страницы настроек прав доступа для модуля или плагина. Если расширение не активно, возвращается null.

Этот метод позволяет генерировать URL для страницы, на которой администратор может управлять правами доступа для расширений в системе.

 

/**
 * Проверяет, установлено ли расширение в данный момент
 * @todo перенести в ExtensionsControlService
 */
public function isInstalled(string $extensionCode): bool  // Метод для проверки, установлено ли расширение
{
    $cnt = cot::$db->query(  // Выполняем SQL-запрос к базе данных
        'SELECT COUNT(*) FROM ' . Cot::$db->core . ' WHERE ct_code = :code',  // SQL-запрос для подсчета количества записей в таблице, где код расширения совпадает с заданным
        ['code' => $extensionCode]  // Передаем параметр: код расширения
    )->fetchColumn();  // Получаем единственное значение — количество записей

    return $cnt > 0;  // Если количество записей больше 0, то расширение установлено, возвращаем true, иначе false
}

Пояснение к коду:

  1. Метод isInstalled: Этот метод проверяет, установлено ли расширение в системе, используя код расширения ($extensionCode).

  2. SQL-запрос:

    • Запрос выполняет подсчет записей в базе данных, где в поле ct_code таблицы (предположительно таблицы расширений) содержится указанный код расширения.
    • Используется метод fetchColumn(), который возвращает единственное значение из результата запроса, в данном случае — количество строк, соответствующих запросу.
  3. Возвращаемое значение:

    • Если количество строк (расширений с данным кодом) больше 0, значит, расширение установлено, и метод возвращает true.
    • Если расширение не установлено, метод возвращает false.
  4. TODO комментарий: Указано, что данный метод следует перенести в другой сервис, ExtensionsControlService, возможно, для лучшей организации кода.

Этот метод используется для проверки наличия расширения в базе данных, что полезно для проверки, установлено ли оно в системе.

 

/**
 * Проверяет, установлено ли расширение и активно ли оно
 */
public function isActive(string $extensionCode, ?string $extensionType = null, $refreshData = false): bool  // Метод для проверки активности расширения
{
    global $cot_modules, $cot_plugins_enabled;  // Доступ к глобальным переменным с модулями и активными плагинами

    if ($refreshData) {  // Если требуется обновить данные
        $data = ExtensionsRepository::getInstance()->getByCode($extensionCode, $extensionType, true);  // Получаем данные о расширении из репозитория
        $active = !empty($data);  // Если данные не пустые, считаем, что расширение активно

        if (!$active) {  // Если расширение не активно
            unset($cot_modules[$extensionCode], $cot_plugins_enabled[$extensionCode]);  // Удаляем расширение из глобальных массивов активных модулей и плагинов
        } elseif ($data['ct_plug']) {  // Если это плагин
            $cot_plugins_enabled[$data['ct_code']] = [  // Добавляем плагин в список активных плагинов
                'code' => $data['ct_code'],  // Код плагина
                'title' => $data['ct_title'],  // Заголовок плагина
                'version' => $data['ct_version'],  // Версия плагина
            ];
        } else {  // Если это модуль
            $cot_modules[$data['ct_code']] = [  // Добавляем модуль в список активных модулей
                'code' => $data['ct_code'],  // Код модуля
                'title' => $data['ct_title'],  // Заголовок модуля
                'version' => $data['ct_version'],  // Версия модуля
            ];
        }

        return $active;  // Возвращаем результат активности расширения
    }

    if ($extensionType === null) {  // Если тип расширения не задан
        $extensionType = $this->getType($extensionCode);  // Определяем тип расширения
    }

    if ($extensionType === null) {  // Если тип расширения не определен
        return false;  // Возвращаем false, так как расширение не найдено
    }

    if ($extensionType === ExtensionsDictionary::TYPE_MODULE) {  // Если это модуль
        return isset($cot_modules[$extensionCode]);  // Проверяем, существует ли модуль в списке активных модулей
    }

    return isset($cot_plugins_enabled[$extensionCode]);  // Проверяем, существует ли плагин в списке активных плагинов
}

Пояснение к коду:

  1. Метод isActive: Этот метод проверяет, установлено ли расширение и активно ли оно, в зависимости от типа расширения (модуль или плагин).

  2. Параметры метода:

    • $extensionCode: Код расширения (модуля или плагина).
    • $extensionType: Тип расширения (может быть null).
    • $refreshData: Если true, метод обновляет данные о расширении, получая их из репозитория.
  3. Обновление данных ($refreshData = true):

    • В случае необходимости обновления данных, метод запрашивает информацию о расширении через репозиторий.
    • В зависимости от типа расширения (модуль или плагин), оно добавляется в соответствующие глобальные массивы: $cot_modules или $cot_plugins_enabled.
    • Метод возвращает статус активности расширения (true, если данные о расширении существуют, и оно активно).
  4. Без обновления данных ($refreshData = false):

    • Если тип расширения не задан, определяется его тип с помощью метода getType().
    • Если тип расширения так и не определен, метод возвращает false.
    • В зависимости от типа расширения (модуль или плагин), метод проверяет, содержится ли оно в соответствующих глобальных массивах активных модулей или плагинов, и возвращает результат (true или false).

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

 

/**
 * Проверяет, установлен ли и активен ли модуль
 * @see ExtensionsService::isActive()
 */
public function isModuleActive(string $extensionCode): bool  // Метод для проверки активности модуля
{
    return $this->isActive($extensionCode, ExtensionsDictionary::TYPE_MODULE);  // Вызывает метод isActive для проверки активности модуля, передавая тип "модуль"
}

Пояснение к коду:

  1. Метод isModuleActive: Этот метод предназначен для проверки того, установлен ли и активен ли конкретный модуль. Он использует метод isActive из того же класса для выполнения этой проверки, передавая тип расширения как ExtensionsDictionary::TYPE_MODULE.

  2. Основное действие:

    • Метод вызывает isActive, передавая код расширения и тип "модуль" для получения информации о статусе активности модуля.
    • Если модуль существует и активен, метод вернет true; если нет — false.

 

/**
 * Проверяет, установлен ли и активен ли плагин
 * @see ExtensionsService::isActive()
 */
public function isPluginActive(string $extensionCode): bool  // Метод для проверки активности плагина
{
    return $this->isActive($extensionCode, ExtensionsDictionary::TYPE_PLUGIN);  // Вызывает метод isActive для проверки активности плагина, передавая тип "плагин"
}

Пояснение к коду:

  1. Метод isPluginActive: Этот метод используется для проверки активности конкретного плагина. Он вызывает метод isActive, передавая тип расширения как ExtensionsDictionary::TYPE_PLUGIN.

  2. Основное действие:

    • Метод вызывает isActive, передавая код расширения и тип "плагин" для выполнения проверки активности плагина.
    • Если плагин существует и активен, метод возвращает true; если нет — false.

 

 

 

 

 

 

 

19 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 28.01.2025 01:13
  • Последнее обновление: 28.01.2025 01:27