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

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

Файл admin.functions.php в системе Cotonti CMF (Content Management Framework) является библиотекой административных функций. Он предоставляет набор функций, используемых для работы с административной частью системы. Этот файл включает различные утилитарные методы, которые управляют конфигурацией, настройками и обработкой данных в панели управления, и играет важную роль в поддержке административных интерфейсов Cotonti.

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

Задачи и условия, выполняемые кодом

  1. Обработка админ-панели: Код предоставляет различные утилиты для работы с интерфейсами в админ-панели — например, создание выпадающих списков, загрузка и вывод иконок для плагинов, выбор групп пользователей, обработка информации о расширениях и т.д.

  2. Подключение необходимых файлов: Для работы с данными и расширениями подключаются различные вспомогательные файлы с помощью cot_incfile.

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

  4. Управление расширениями: Осуществляется получение информации о расширениях (плагинах и модулях), таких как их название, описание, иконка и примечания.

  5. Краткая информация о системе: Функция для генерации меток информации о базе данных и системе Cotonti, таких как количество строк, размер базы данных, количество плагинов и версия системы.

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

  1. cot_linkif:

    • Назначение: Возвращает ссылку в HTML-формате, если условие истинно, или просто текст в противном случае.
    • Параметры:
      • $url: URL-ссылка.
      • $text: Текст ссылки.
      • $cond: Условие для вывода ссылки или текста.
    • Что делает: Формирует HTML-ссылку или возвращает обычный текст в зависимости от условия.
  2. cot_selectbox_groups:

    • Назначение: Возвращает HTML-код выпадающего списка групп пользователей.
    • Параметры:
      • $chosen: Выбранное значение.
      • $name: Имя для поля формы.
      • $skip: Скрытые группы.
      • $add_empty: Разрешить пустой выбор.
      • $attrs: Дополнительные атрибуты.
      • $custom_rc: Пользовательская строка ресурса.
    • Что делает: Формирует выпадающий список групп пользователей с учетом заданных условий (например, исключение скрытых групп).
  3. cot_config_timezones:

    • Назначение: Возвращает список таймзон, доступных для настройки времени в системе.
    • Что делает: Формирует массив с таймзонами для использования в конфигурации системы.
  4. cot_stringinfile:

    • Назначение: Возвращает позицию подстроки в файле.
    • Параметры:
      • $file: Путь к файлу.
      • $str: Подстрока для поиска.
      • $maxsize: Максимальный размер файла для чтения.
    • Что делает: Ищет указанную подстроку в файле и возвращает, найдено ли оно.
  5. cot_get_extensionparams:

    • Назначение: Возвращает параметры расширения (плагина или модуля), такие как название, описание, примечания и иконка.
    • Параметры:
      • $code: Код расширения.
      • $is_module: Указывает, является ли расширение модулем.
    • Что делает: Собирает информацию о расширении, включая данные из языковых файлов и файлов иконок.
  6. cot_generate_infotags:

    • Назначение: Возвращает краткую информацию о системе Cotonti и базе данных, включая размер базы данных, количество плагинов, количество хуков и версию системы.
    • Параметры:
      • $tag_prefix: Префикс для тегов.
    • Что делает: Генерирует информацию о текущей базе данных и системе, чтобы использовать эти данные в интерфейсе админки.

Характеристика стиля PHP

  1. Использование глобальных переменных: В коде активно используются глобальные переменные, такие как $L, $Ls, $cfg, и другие. Эти переменные используются для работы с конфигурацией и языковыми файлами, а также для работы с объектами системы.

  2. Использование классов и объектов: В некоторых функциях используется объектно-ориентированный подход, например, в функциях с использованием экземпляров классов ExtensionsService и ExtensionsHelper. Это позволяет работать с расширениями более гибко.

  3. Использование SQL-запросов: В коде активно используются SQL-запросы через абстракцию работы с базой данных, что позволяет получать данные о базе, плагинах и других объектах системы.

  4. Микс процедурного и объектно-ориентированного стилей: Несмотря на использование классов для работы с расширениями, в коде присутствует также процедурный стиль с функциями, работающими с глобальными переменными и массивами.

  5. Минимальное использование именования классов с пространствами имён: Код использует стандартное именование классов и объектов без явного применения пространств имён, что характерно для более старых версий PHP. Однако есть элементы, использующие классы с пространствами имён, например, ExtensionsService::getInstance().

Заключение

Файл admin.functions.php служит основным инструментом для реализации административных функций и взаимодействия с внутренними компонентами системы Cotonti. Он выполняет задачи, связанные с работой с расширениями, плагинами, базой данных и настройками системы. Стиль кода сочетает процедурный подход с элементами объектно-ориентированного программирования и работает в рамках глобальной архитектуры Cotonti.

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

 

<?php
/**
 * Библиотека функций для администратора.
 *
 * @package API - Администрирование
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

use cot\extensions\ExtensionsDictionary; // Подключение класса для работы с расширениями
use cot\extensions\ExtensionsHelper; // Подключение вспомогательных функций для расширений
use cot\extensions\ExtensionsService; // Подключение сервиса для управления расширениями

defined('COT_CODE') or die('Неверный URL.'); // Проверка, чтобы код выполнялся только при правильном доступе

// Требования
require_once cot_incfile('extrafields'); // Подключение файла для работы с дополнительными полями
require_once cot_incfile('forms'); // Подключение файла для работы с формами
require_once cot_incfile('extensions'); // Подключение файла для работы с расширениями

/* ======== Инициализация переменных для админки ========= */
$adminTitle = $adminMain = $adminHelp = $pluginBody = ''; // Инициализация переменных для админ-интерфейса
$adminPath = []; // Инициализация пути администратора

Cot::$usr['admin_config'] = cot_auth('admin', 'a', 'A'); // Проверка прав доступа для настроек администратора
Cot::$usr['admin_structure'] = cot_auth('structure', 'a', 'A'); // Проверка прав доступа для структуры сайта
Cot::$usr['admin_users'] = cot_auth('users', 'a', 'A') // Проверка прав доступа для управления пользователями
    || in_array(COT_GROUP_SUPERADMINS, Cot::$usr['groups'], true); // Дополнительная проверка для супер-администраторов

/**
 * Возвращает $url как HTML-ссылку, если $cond истинно, или просто $text в другом случае
 * @param string $url URL ссылки
 * @param string $text Текст ссылки
 * @param bool $cond Условие
 * @return string
 */
function cot_linkif($url, $text, $cond) // Определение функции для создания ссылки, если условие выполнено
{
	if ($cond) // Если условие истинно
	{
		$res = '<a href="'.$url.'">'.$text.'</a>'; // Возвращаем ссылку с URL и текстом
	}
	else // Если условие ложно
	{
		$res = $text; // Возвращаем только текст без ссылки
	}

	return $res; // Возвращаем результат
}

 

/**
 * Возвращает код выпадающего списка для выбора группы
 *
 * @param string 	$chosen Выбранное значение
 * @param string 	$name Имя выпадающего списка
 * @param array 	$skip Скрытые группы
 * @param bool 		$add_empty Разрешить пустой выбор
 * @param mixed 	$attrs Дополнительные атрибуты в виде ассоциативного массива или строки
 * @param string 	$custom_rc Пользовательская строка ресурса
 * @return string
 */
function cot_selectbox_groups($chosen, $name, $skip = null, $add_empty = false, $attrs = '', $custom_rc = '')
{
	global $cot_groups;

	$opts = array();
	if(empty($skip)) $skip = array(); // Если $skip пустой, инициализировать как пустой массив
	if(!is_array($skip)) $skip = array($skip); // Если $skip не массив, преобразовать его в массив
	foreach($cot_groups as $k => $i) // Перебираем все группы
	{
		if (!$i['skiprights'] && !in_array($k, $skip)) // Если права не пропущены и группа не скрыта
		{
			$opts[$k] = $cot_groups[$k]['name']; // Добавляем группу в массив опций
		}
	}

	return cot_selectbox($chosen, $name, array_keys($opts), array_values($opts), $add_empty, $attrs, $custom_rc); 
	// Вызываем функцию cot_selectbox для генерации выпадающего списка с выбранными опциями
}

 

/**
* Возвращает список названий часовых поясов, используемых для настройки времени по умолчанию
*/
function cot_config_timezones()
{
	global $L;
	$timezonelist = cot_timezone_list(true, false); // Получаем список часовых поясов с помощью функции cot_timezone_list
	foreach($timezonelist as $timezone) // Перебираем все часовые пояса
	{
		$names[] = $timezone['identifier']; // Добавляем идентификатор часового пояса в массив $names
		$titles[] = $timezone['description']; // Добавляем описание часового пояса в массив $titles
	}
	$L['cfg_defaulttimezone_params'] = $titles; // Сохраняем описания часовых поясов в массив $L
	return $names; // Возвращаем список идентификаторов часовых поясов
}

 

/**
 * Возвращает позицию подстроки в файле
 *
 * @param string $file Путь к файлу
 * @param string $str Искомая подстрока
 * @param int $maxsize Лимит поиска
 * @return int
 */
function cot_stringinfile($file, $str, $maxsize=32768)
{
	if ($fp = @fopen($file, 'r')) // Пытаемся открыть файл для чтения
	{
		$data = fread($fp, $maxsize); // Читаем данные из файла до лимита $maxsize
		$pos = mb_strpos($data, $str); // Находим позицию искомой подстроки в данных
		$result = !($pos === FALSE); // Если подстрока найдена, результат = true
	}
	else
	{
		$result = FALSE; // Если файл не открыт, результат = false
	}
	@fclose($fp); // Закрываем файл
	return $result; // Возвращаем результат поиска
}

 

/**
 * Возвращает параметры расширения
 *
 * @param $code Код расширения
 * @param $is_module Признак, является ли расширение модулем
 * @return array{name: string, desc: string, notes: string, icon: string}
 */
function cot_get_extensionparams($code, $is_module = false)
{
	global $L, $Ls, $cfg, $R; // Подключаем файлы языков, поэтому они должны быть глобальными
    global $cot_modules, $cot_plugins_enabled;

	$dir = $is_module ? Cot::$cfg['modules_dir'] : Cot::$cfg['plugins_dir']; // Определяем каталог (модуль или плагин)

    $notes = ''; // Инициализация переменной для заметок

    $typeKey = $is_module ? 'module' : 'plug'; // Определяем тип расширения (модуль или плагин)

    if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) {
        /** @deprecated Для обратной совместимости. Будет удалено в будущих релизах */
        $legacyIcon = ''; // Для режима устаревших расширений
    }

    $icon = ''; // Инициализация переменной для иконки
	$key = 'icon_' . $typeKey . '_' . $code; // Формируем ключ для иконки
	if (!empty(Cot::$R[$key])) { // Если иконка найдена в ресурсах
		$icon = Cot::$R[$key]; // Устанавливаем иконку из ресурсов
	} elseif (!empty(Cot::$R['admin_icon_extension_default'])) { // Если нет, используем иконку по умолчанию
		$icon = Cot::$R['admin_icon_extension_default'];
	} else { // Если иконка не найдена
		$fileNames = [
			Cot::$cfg['icons_dir'] . '/' . Cot::$cfg['defaulticons'] . '/' . $typeKey . '_' . $code . '.png',
			$dir . '/' . $code . '/' . $code . '.png'
		];
		foreach ($fileNames as $fileName) { // Проверяем наличие файлов иконок
			if (file_exists($fileName)) {
                $icon = cot_rc('img_none', ['src' => $fileName]); // Если файл существует, используем его
                if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) {
                    $legacyIcon = $fileName; // Для режима устаревших расширений
                }
			}
		}
    }

    if (empty($icon) && !empty($R['admin_icon_extension'])) { // Если иконка не установлена, используем стандартную
        $icon = $R['admin_icon_extension'];
    }

    if (empty($icon)) { // Если иконка всё ещё не найдена
        $fileNames = [
            Cot::$cfg['icons_dir'] . '/' . Cot::$cfg['defaulticons'] . '/default.png',
            Cot::$cfg['icons_dir'] . '/default/default.png',
        ];
        foreach ($fileNames as $fileName) { // Проверяем наличие файлов иконки по умолчанию
            if (file_exists($fileName)) {
                $icon = cot_rc('img_none', ['src' => $fileName]); // Используем стандартную иконку
                if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) {
                    $legacyIcon = $fileName; // Для устаревших расширений
                }
            }
        }
    }

    $extensionService = ExtensionsService::getInstance(); // Создаем объект для работы с расширениями
    $extensionHelper = ExtensionsHelper::getInstance(); // Создаем объект помощника для расширений

    $langFile = cot_langfile(
        $code, $is_module ? ExtensionsDictionary::TYPE_MODULE : ExtensionsDictionary::TYPE_PLUGIN
    ); // Получаем файл языковых строк для расширения
    if (!empty($langFile) && file_exists($langFile)) { // Если файл языков существует
        $L['info_notes'] = ''; // Инициализируем заметки
        include $langFile; // Подключаем файл языков
        // Мы подключили файл языков, поэтому должны использовать $L, а не Cot::$L
        if (!empty($L['info_notes'])) { // Если заметки есть, сохраняем их
            $notes = $L['info_notes'];
        }
    }

	$result = [
        'name' => $extensionHelper->getTitle(
            $code,
            $is_module ? ExtensionsDictionary::TYPE_MODULE : ExtensionsDictionary::TYPE_PLUGIN
        ), // Получаем название расширения
		'desc' => $extensionHelper->getDescription(
            $code,
            $is_module ? ExtensionsDictionary::TYPE_MODULE : ExtensionsDictionary::TYPE_PLUGIN
        ), // Получаем описание расширения
        'notes' => $notes, // Добавляем заметки
		'icon' => $icon, // Добавляем иконку
	];

    if (isset(Cot::$cfg['legacyMode']) && Cot::$cfg['legacyMode']) {
        $result['legacyIcon'] = $legacyIcon; // Добавляем иконку для устаревших расширений
    }

    return $result; // Возвращаем массив с параметрами расширения
}

 

/**
 * Возвращает краткую информацию о ядре Cotonti
 *
 * @param string $tag_prefix Префикс для тегов
 *
 * @return array
 */
function cot_generate_infotags($tag_prefix = '')
{
	global $db_plugins, $db_updates;

	$sql = Cot::$db->query("SHOW TABLES"); // Выполняем запрос для получения списка таблиц в базе данных
	foreach ($sql->fetchAll(PDO::FETCH_NUM) as $row) { // Проходим по всем таблицам базы данных
		$table_name = $row[0]; // Извлекаем имя таблицы
		$status = Cot::$db->query("SHOW TABLE STATUS LIKE '$table_name'"); // Получаем информацию о статусе таблицы
		$status1 = $status->fetch(); // Извлекаем данные о таблице
		$status->closeCursor(); // Закрываем курсор
		$tables[] = $status1; // Добавляем данные о таблице в массив
	}

	$total_length = 0; // Инициализируем переменную для общей длины данных
	$total_rows = 0; // Инициализируем переменную для общего числа строк
	$total_index_length = 0; // Инициализируем переменную для общей длины индексов
	$total_data_length = 0; // Инициализируем переменную для общей длины данных
	foreach ($tables as $dat) { // Проходим по каждой таблице
		$table_length = $dat['Index_length'] + $dat['Data_length']; // Вычисляем длину таблицы (индексы + данные)
		$total_length += $table_length; // Добавляем длину таблицы к общей длине
		$total_rows += $dat['Rows']; // Добавляем количество строк к общему числу строк
		$total_index_length += $dat['Index_length']; // Добавляем длину индексов к общей длине индексов
		$total_data_length += $dat['Data_length']; // Добавляем длину данных к общей длине данных
	}

	$totalplugins = Cot::$db->query("SELECT DISTINCT(pl_code) FROM $db_plugins WHERE 1 GROUP BY pl_code")->rowCount(); // Подсчитываем количество уникальных плагинов
	$totalhooks = Cot::$db->query("SELECT COUNT(*) FROM $db_plugins")->fetchColumn(); // Подсчитываем общее количество хуков

	$temp_array = array( // Создаем массив с различной информацией
		'DB_TOTAL_ROWS' => $total_rows, // Общее количество строк в базе данных
		'DB_INDEXSIZE' => number_format(($total_index_length / 1024), 1, '.', ' '), // Размер индексов в КБ
		'DB_DATASSIZE' => number_format(($total_data_length / 1024), 1, '.', ' '), // Размер данных в КБ
		'DB_TOTALSIZE' => number_format(($total_length / 1024), 1, '.', ' '), // Общий размер базы данных в КБ
		'TOTALPLUGINS' => $totalplugins, // Количество плагинов
		'TOTALHOOKS' => $totalhooks, // Количество хуков
		'VERSION' => Cot::$cfg['version'], // Версия Cotonti
		'DB_VERSION' => htmlspecialchars(Cot::$db->query("SELECT upd_value FROM $db_updates WHERE upd_param = 'revision'")->fetchColumn()) // Версия базы данных
	);

	$returnArray = []; // Инициализируем массив для возвращаемых значений
	foreach ($temp_array as $key => $val) { // Проходим по массиву temp_array
        $returnArray[$tag_prefix . $key] = $val; // Добавляем ключ с префиксом и значение в возвращаемый массив
	}

	return $returnArray; // Возвращаем массив с данными
}

 

 

 

 

 

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

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

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

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

Administrator

Оффлайн

Administrator

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

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

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

Файл functions.custom.php в Cotonti
1 В файл functions.custom.php в Cotonti обычно добавляют дополнительные пользовательские функции, которые не входят в
Руководство по пользовательским функциям functions.custom.php в Cotonti
2 Руководство по пользовательским функциям CotontiЭто руководство содержит подробное описание четырех функций,
Файл admin.cache.disk.php в Cotonti CMF
3 Файл admin.cache.disk.php в движке Cotonti CMF является частью административной панели, предназначенной для управления
Файл admin.config.php в Cotonti CMF
4 Основное назначение файла и его место в системе Файл admin.config.php является частью административной панели системы
Файл admin.extensions.php в Cotonti CMF
5 Файл "admin.extensions.php" в движке Cotonti CMF является важным компонентом административной части системы,