Файл admin.other.php в Cotonti CMF

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

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

Файл admin.other.php в Cotonti CMF отвечает за отображение и управление страницами администрирования, которые связаны с плагинами и модулями. Это раздел админки, который позволяет администратору просматривать и управлять установленными расширениями (модулями и плагинами). Он выполняет задачи, связанные с:

  1. Загрузкой и отображением информации о модулях и плагинах.
  2. Созданием навигации по административной панели для этих расширений.
  3. Управлением доступом к этим разделам, в зависимости от прав пользователя.

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

  • Проверка параметров: Если в URL задан параметр p, код обрабатывает запрос для конкретного расширения. В противном случае код выводит список всех доступных расширений (модулей и плагинов).

  • Авторизация: Для работы с плагинами или модулями выполняется проверка прав доступа с помощью функции cot_auth(). Права доступа для чтения и записи определяются в зависимости от типа расширения.

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

  • Обработка "legacyMode": Если в конфигурации включен режим совместимости (legacy mode), код отображает старые иконки и другие элементы интерфейса для обеспечения совместимости с предыдущими версиями Cotonti.

  • Сортировка расширений: Расширения сортируются по коду для более удобного отображения в админке.

  • Отображение в шаблоне: Все собранные данные передаются в шаблон с использованием библиотеки XTemplate для дальнейшего отображения на странице администрирования.

  • Подключение плагинов: В коде есть хуки, которые позволяют подключать дополнительные плагины для расширения функциональности страницы.

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

  1. cot_auth():

    • Эта функция проверяет права доступа для пользователя, определяя, какие операции (чтение, запись и т.д.) разрешены для текущего расширения.
    • Применяется для защиты от несанкционированного доступа.
  2. cot_get_extensionparams():

    • Получает параметры конкретного расширения, такие как его название, описание, иконка и другие данные.
    • Используется для извлечения информации о модулях и плагинах для отображения в админке.
  3. cot_getextplugins():

    • Возвращает список плагинов, подключенных к данному разделу.
    • Важно для расширяемости системы, поскольку позволяет подключать дополнительные плагины через хуки.
  4. cot_url():

    • Формирует URL-адрес для различных разделов админки, таких как страницы кэширования, структуры, логов и т.д.
    • Используется для построения ссылок в навигации и в интерфейсе администратора.
  5. usort():

    • Функция PHP для сортировки массива. В данном контексте она используется для сортировки расширений по коду, чтобы они отображались в правильном порядке.

Взаимодействие с классами и объектами:

  1. ExtensionsService:

    • Класс ExtensionsService используется для получения списка установленных расширений (модулей и плагинов), а также для генерации URL-адресов административных страниц для этих расширений.
    • Он взаимодействует с файлом через методы, такие как getModulesList(), getPluginsList(), и getAdminPageUrl(), которые возвращают соответствующие данные и URL-адреса.
  2. Router:

    • Класс Router используется для обработки маршрутов администрирования. Метод routeAdminOther() помогает маршрутизировать запросы к админке для различных расширений в зависимости от параметра p.
  3. XTemplate:

    • XTemplate — это шаблонизатор, используемый для генерации HTML-кода на основе переданных данных. Он используется для заполнения данных о расширениях в шаблон и отображения страницы админки.
    • Взаимодействие происходит через методы assign(), parse() и out(), которые позволяют передавать данные и рендерить шаблон.
  4. Legacy Mode:

    • Режим совместимости (legacy mode) управляется через глобальную переменную конфигурации Cot::$cfg['legacyMode']. В случае его активации, код использует старые элементы интерфейса для обеспечения совместимости с предыдущими версиями системы.

Стиль PHP:

  1. Использование ООП: В коде активно используются классы и объекты, такие как XTemplate, Router, ExtensionsService. Это характерно для современного подхода программирования в PHP, когда основное внимание уделяется организации кода в виде классов и методов.

  2. Использование глобальных переменных: Множество глобальных переменных используется для конфигурации и взаимодействия с системой, например, Cot::$usr для доступа к данным пользователя, Cot::$cfg для конфигурации системы, и т.д. Это типично для Cotonti и других фреймворков, использующих глобальные состояния.

  3. Проверки и фильтрация данных: Использование функций типа cot_import() для фильтрации и проверки входных данных также является важной частью стиля, обеспечивающей безопасность и надежность кода.

  4. Декларации хуков: Использование хуков, как например cot_getextplugins() и cot_block(), демонстрирует приверженность принципам расширяемости и модульности, позволяя легко добавлять или изменять функциональность системы.

  5. Обработка ошибок и прав доступа: Весь код защищен от несанкционированного доступа и ошибок с помощью проверок прав пользователя, использования функции cot_block() для блокировки доступа, если нет прав на выполнение определенных операций, и других механизмов безопасности.

Заключение:

Файл admin.other.php играет важную роль в администрировании расширений (модулей и плагинов) в Cotonti. Он взаимодействует с несколькими сервисами и классами для получения данных о расширениях, их сортировки и отображения в административной панели. Код написан с использованием современных PHP-технологий, таких как объектно-ориентированное программирование и хуки для расширяемости, а также учитывает обратную совместимость для старых версий системы.

 

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

 

<?php
/**
 * Administration panel - Other Admin parts listing
 *
 * @package Cotonti
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

use cot\extensions\ExtensionsDictionary; // Подключение класса ExtensionsDictionary для работы с расширениями
use cot\extensions\ExtensionsService;   // Подключение класса ExtensionsService для управления расширениями
use cot\router\Router;                  // Подключение класса Router для маршрутизации запросов

(defined('COT_CODE') && defined('COT_ADMIN')) or die('Wrong URL.'); // Проверка, чтобы файл был вызван внутри системы, иначе завершение выполнения

$t = new XTemplate(cot_tplfile('admin.other', 'core')); // Создание объекта XTemplate для работы с шаблоном админ-страницы "other"

$p = cot_import('p', 'G', 'ALP'); // Импорт параметра 'p' из GET-запроса, значение которого будет использоваться для фильтрации или другой логики

/* === Hook === */
foreach (cot_getextplugins('admin.other.first') as $extension) { // Загружаются плагины, подключенные к хуку 'admin.other.first'
	include $extension; // Включение каждого плагина
}
/* ===== */

Объяснение кода:

  1. Использование классов:

    • Подключаются классы для работы с расширениями (ExtensionsDictionary и ExtensionsService), а также для маршрутизации запросов (Router).
  2. Проверка безопасности:

    • Проверяется, чтобы файл был загружен в контексте системы Cotonti с административными правами (COT_ADMIN). Если это не так, выполнение прерывается.
  3. Работа с шаблоном:

    • Создается объект шаблона XTemplate с помощью функции cot_tplfile, которая загружает шаблон для админки (файл admin.other).
  4. Получение параметра из запроса:

    • Из запроса GET извлекается параметр p, который может быть использован для дальнейшей фильтрации или управления контентом страницы.
  5. Использование хуков:

    • Прокачка хука admin.other.first для подключения сторонних плагинов, которые могут расширить функциональность на этом этапе.

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

 

if (!empty($p)) {  // Проверка, не пуст ли параметр 'p', который был передан через GET-запрос
    $route = Router::getInstance()->routeAdminOther($p); // Получение маршрута для администрирования плагина, если параметр 'p' задан

    list(Cot::$usr['auth_read'], Cot::$usr['auth_write'], Cot::$usr['isadmin']) = cot_auth('plug', $p); // Получение прав доступа для плагина, указанных в параметре 'p'
    cot_block(Cot::$usr['isadmin']); // Блокировка доступа, если у пользователя нет административных прав

    if (file_exists(cot_langfile($p, ExtensionsDictionary::TYPE_PLUGIN))) {  // Проверка, существует ли файл языковой локализации плагина
        require_once cot_langfile($p, ExtensionsDictionary::TYPE_PLUGIN); // Подключение файла локализации плагина, если он существует
    }

    $extInfo = cot_get_extensionparams($p, false);  // Получение параметров плагина с кодом $p
    $adminTitle = $extInfo['name'];  // Название плагина из параметров

    $adminPath = [  // Формирование пути навигации для админки
        [cot_url('admin', ['m' => 'extensions']), Cot::$L['Extensions']],  // Ссылка на раздел расширений
        [cot_url('admin', ['m' => 'extensions', 'a' => 'details', 'pl' => $p]), $adminTitle], // Ссылка на подробности плагина
        [cot_url('admin', ['m' => 'other', 'p' => $p]), Cot::$L['Administration']], // Ссылка на текущую страницу администрирования плагина
    ];

    $adminMain = '';  // Инициализация переменной для основного контента страницы

    $legacyMode = isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode'];  // Проверка на включение режима совместимости (legacy mode)

    if (!empty($route->includeFiles)) {  // Если маршрутом предусмотрено подключение дополнительных файлов
        foreach ($route->includeFiles as $includeFile) {  // Для каждого включаемого файла
            if ($legacyMode) {  // Если включен режим совместимости
                /** @deprecated in 0.9.25 */
                $plugin_body = '';  // Объявление переменной для старого контента плагина (deprecated)
            }

            $pluginBody = '';  // Инициализация переменной для содержимого плагина

            include_once $includeFile;  // Включение файла плагина

            $adminMain .= $pluginBody;  // Добавление содержимого плагина в основной контент страницы

            if ($legacyMode) {  // Если включен режим совместимости
                // @deprecated in 0.9.25
                $adminMain .= $plugin_body;  // Добавление старого контента плагина (deprecated)
            }
        }
    } elseif ($route->controller !== null && $route->action !== null) {  // Если у маршрута есть контроллер и действие
        $adminMain = $route->controller->runAction($route->action);  // Выполнение действия контроллера и получение результата
    }
    unset($route);  // Очистка переменной маршрута
} else {  // Если параметр 'p' пустой

Объяснение кода:

  1. Работа с плагинами:

    • Проверяется, задан ли параметр p, который идентифицирует плагин.
    • Получается маршрут для работы с плагином с помощью Router::getInstance()->routeAdminOther($p).
  2. Проверка прав доступа:

    • В зависимости от параметра p осуществляется проверка прав пользователя с помощью cot_auth и блокировка доступа для пользователей, не имеющих прав администратора.
  3. Работа с языковыми файлами:

    • Если для плагина существует файл локализации, он подключается с помощью cot_langfile.
  4. Маршруты и навигация:

    • Формируется путь навигации в админке с помощью массива $adminPath, включая ссылки на разделы расширений и подробности плагина.
  5. Работа с включаемыми файлами:

    • Если маршрут плагина предусматривает подключение файлов, они подключаются в цикле, и содержимое каждого плагина добавляется в основной контент страницы.
  6. Режим совместимости (legacy mode):

    • Есть проверка на наличие режима совместимости, и если он активирован, включается поддержка старых механизмов работы с плагинами.

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

 

} else {  // Если параметр 'p' пустой, то продолжаем выполнение
    $adminPath[] = [cot_url('admin', ['m' => 'other']), Cot::$L['Other']];  // Добавляем пункт навигации "Other" в путь
    $adminTitle = Cot::$L['Other'];  // Название страницы администрирования
    list(Cot::$usr['auth_read'], Cot::$usr['auth_write'], Cot::$usr['isadmin']) = cot_auth('admin', 'a');  // Проверка прав доступа для администрирования
    cot_block(Cot::$usr['auth_read']);  // Блокировка доступа, если нет прав на чтение

    $target = [];  // Инициализация пустого массива для целевого контента

    $extensionsService = ExtensionsService::getInstance();  // Получение экземпляра службы расширений

    foreach ([ExtensionsDictionary::TYPE_MODULE, ExtensionsDictionary::TYPE_PLUGIN] as $type) {  // Перебор типов расширений: модули и плагины
        if ($type === ExtensionsDictionary::TYPE_MODULE) {  // Если тип - модуль
            $list = $extensionsService->getModulesList();  // Получение списка модулей
            $title = Cot::$L['Modules'];  // Название раздела - "Modules"
        } else {  // Если тип - плагин
            $list = $extensionsService->getPluginsList();  // Получение списка плагинов
            $title = Cot::$L['Plugins'];  // Название раздела - "Plugins"
        }

        if (!empty($list) && is_array($list)) {  // Если список расширений не пустой и является массивом
            usort(
                $list,
                function (array $a, array $b): int {  // Сортировка списка расширений по коду
                    if ($a['code'] === $b['code']) {  // Если коды одинаковые
                        return 0;
                    }
                    return ($a['code'] < $b['code']) ? -1 : 1;  // Сравнение кодов
                }
            );
            foreach ($list as $extension) {  // Перебор каждого расширения
                $adminPartUrl = $extensionsService->getAdminPageUrl($extension['code'], $type);  // Получение URL для страницы администрирования плагина или модуля
                if (empty($adminPartUrl)) {  // Если URL пустой, пропустить
                    continue;
                }
                $extensionInfo = cot_get_extensionparams(
                    $extension['code'], $type === ExtensionsDictionary::TYPE_MODULE
                );  // Получение информации о расширении

                $t->assign([
                    'ADMIN_OTHER_EXT_URL' => $adminPartUrl,  // Ссылка на админ-страницу расширения
                    'ADMIN_OTHER_EXT_ICON' => $extensionInfo['icon'],  // Иконка расширения
                    'ADMIN_OTHER_EXT_NAME' => $extensionInfo['name'],  // Название расширения
                    'ADMIN_OTHER_EXT_DESC' => $extensionInfo['desc'],  // Описание расширения
                ]);
                if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) {  // Если включен режим совместимости
                    $t->assign([
                        // @deprecated Для обратной совместимости. Будет удалено в будущих версиях
                        'ADMIN_OTHER_EXT_ICO' => $extensionInfo['legacyIcon'],  // Используется старая иконка
                    ]);
                }

                $t->parse('MAIN.SECTION.ROW');  // Парсинг строки для расширения
            }
        } else {  // Если список пуст, парсим пустую строку
            $t->parse('MAIN.SECTION.EMPTY');
        }
        $t->assign('ADMIN_OTHER_SECTION', $title);  // Присваиваем название раздела (Модули или Плагины)
        $t->parse('MAIN.SECTION');  // Парсинг секции
    }

    $t->assign([  // Присваиваем URL для других разделов админки
        'ADMIN_OTHER_URL_CACHE' => cot_url('admin', 'm=cache'),
        'ADMIN_OTHER_URL_DISKCACHE' => cot_url('admin', 'm=cache&s=disk'),
        'ADMIN_OTHER_URL_EXFLDS' => cot_url('admin', 'm=extrafields'),
        'ADMIN_OTHER_URL_STRUCTURE' => cot_url('admin', 'm=structure'),
        'ADMIN_OTHER_URL_LOG' => cot_url('admin', 'm=log'),
        'ADMIN_OTHER_URL_INFOS' => cot_url('admin', 'm=infos'),
        'ADMIN_OTHER_URL_PHPINFO' => cot_url('admin', 'm=phpinfo'),
    ]);

    /* === Hook === */
    foreach (cot_getextplugins('admin.other.tags') as $extension) {  // Включаем дополнительные теги из плагинов
        include $extension;
    }
    /* ===== */

    $t->parse('MAIN');  // Парсинг главного шаблона
    $adminMain = $t->text('MAIN');  // Получение содержимого главного шаблона
}

Объяснение кода:

  1. Работа с типами расширений:

    • Если параметр p не задан, код переходит к отображению других разделов админки, таких как модули и плагины.
    • Для каждого типа расширения (module и plugin) происходит получение соответствующего списка с помощью getModulesList и getPluginsList.
  2. Обработка расширений:

    • Для каждого расширения (модуль или плагин) проверяется наличие страницы администрирования, а также собирается информация о расширении, такая как иконка, название и описание.
    • Эти данные передаются в шаблон для дальнейшего отображения в админке.
  3. Режим совместимости (legacy mode):

    • В случае включения режима совместимости добавляется поддержка старых иконок для расширений.
  4. Навигация и ссылки:

    • В коде формируется навигация для разных разделов админки и присваиваются ссылки на страницы кэширования, структуры, логов и другие административные инструменты.
  5. Подключение плагинов:

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

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

 

 

 

 

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

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

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

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

Administrator

Оффлайн

Administrator

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

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

Похожие страницы

Файл admin.cache.disk.php в Cotonti CMF
1 Файл admin.cache.disk.php в движке Cotonti CMF является частью административной панели, предназначенной для управления
Файл admin.config.php в Cotonti CMF
2 Основное назначение файла и его место в системе Файл admin.config.php является частью административной панели системы
Файл admin.extensions.php в Cotonti CMF
3 Файл "admin.extensions.php" в движке Cotonti CMF является важным компонентом административной части системы,
Файл admin.extrafields.php в Cotonti CMF
4 Файл admin.extrafields.php в движке Cotonti CMF предназначен для управления дополнительными полями (extra fields) в
Файл admin.functions.php в Cotonti CMF
5 Основное назначение файла admin.functions.php и его место в системе Файл admin.functions.php в системе Cotonti CMF