Файл admin.log.php в Cotonti CMF
Основное назначение файла:
Файл admin.log.php в движке Cotonti CMF является частью административной панели системы, предназначенной для управления логами (журналами) действий, происходящих в системе. Он выполняет функции отображения логов с возможностью их фильтрации по группам, пагинации (переход между страницами) и очистки логов (удаление старых записей). Это важный элемент для мониторинга событий на сайте и обеспечения безопасности.
Основные задачи и условия, которые выполняет код:
-
Авторизация и права доступа:
- Проверяется, что текущий пользователь имеет права на чтение логов.
- Если пользователь не авторизован или не имеет соответствующих прав, доступ к странице будет заблокирован.
-
Отображение логов:
- Извлекаются и отображаются записи из таблицы логов, причем логи могут быть отфильтрованы по различным группам (например, админские действия, форумы, безопасность и т.д.).
- Реализована пагинация, позволяющая отображать логи порционно, настраиваемое количество записей на одной странице.
-
Фильтрация логов:
- Логи могут быть сгруппированы и отфильтрованы по определенным категориям (группам), таким как "Администрация", "Пользователи", "Форумы" и т.д.
-
Очистка логов (удаление старых записей):
- Администратор имеет возможность очистить логи с помощью опции "purge". Это удаляет все записи в журнале.
-
Подключение внешних плагинов:
- Код поддерживает возможность подключения плагинов для обработки или изменения данных логов через хуки, как до, так и после вывода логов.
-
Отображение информации о пагинации:
- Система отображает кнопки для перехода на предыдущую и следующую страницы, а также общую навигацию по страницам логов.
-
Отображение статистики:
- На странице отображается общая информация о количестве записей в журнале, а также количество записей, отображаемых на текущей странице.
Функции и их назначение:
В файле нет явных функций, однако используется несколько встроенных механизмов, которые выполняют различные задачи:
-
cot_auth():- Эта функция проверяет права доступа пользователя на основе его роли и предоставляет доступ к указанным разделам админки. В данном случае используется для проверки прав на чтение и запись логов.
-
cot_block():- Функция блокирует доступ к странице в случае, если у пользователя нет прав доступа (если не прошла проверка через
cot_auth).
- Функция блокирует доступ к странице в случае, если у пользователя нет прав доступа (если не прошла проверка через
-
cot_tplfile():- Эта функция загружает шаблон для административной панели. В данном случае загружается шаблон для вывода логов.
-
cot_url():- Генерирует URL для ссылок, например, для навигации по логам и их фильтрации по группам.
-
cot_import_pagenav():- Импортирует параметры пагинации и возвращает данные, которые необходимы для управления количеством отображаемых записей на странице.
-
cot_getextplugins():- Функция, которая получает список активных плагинов для определенного хука, позволяя подключать внешние плагины для дополнительной функциональности.
-
cot_date():- Преобразует метку времени в читаемый формат. Используется для отображения даты и времени лога.
-
cot_plugin_active():- Проверяет, активирован ли плагин с указанным именем (например, для поиска по IP через плагин
ipsearch).
- Проверяет, активирован ли плагин с указанным именем (например, для поиска по IP через плагин
-
cot_message():- Функция для вывода сообщений на экран, например, после успешной очистки логов или ошибки.
-
cot_pagenav():- Генерирует элементы пагинации для перехода между страницами.
-
cot_display_messages():- Эта функция отображает все сообщения, накопленные системой, например, сообщения об ошибках или успешных действиях.
Характеристика стиля PHP:
-
Использование ООП: В коде активно используется объектно-ориентированное программирование. Например, используется объект
XTemplateдля обработки шаблонов, что позволяет эффективно управлять выводом данных на странице. -
Безопасность и валидация: В коде используется защита от CSRF атак через функцию
cot_check_xg(), а также проверки на права доступа. Это гарантирует, что только администраторы могут выполнять действия, такие как очистка логов. -
Использование хуков для расширяемости: Код активно использует хуки, такие как
cot_getextplugins(), для подключения внешних плагинов, что делает систему расширяемой и гибкой. -
Простота и лаконичность: Код достаточно прямолинейный и легко читаемый, использует базовые PHP конструкции (условные операторы, циклы, функции) для реализации необходимого функционала.
-
Международный подход: В коде используются локализованные строки (например, через
Cot::$L), что позволяет легко адаптировать систему под разные языки.
Вывод:
Файл admin.log.php отвечает за управление и отображение логов в административной панели Cotonti. Код включает фильтрацию логов по категориям, пагинацию, возможность очистки логов и подключение плагинов для расширения функционала. Он написан в стиле объектно-ориентированного программирования с активным использованием хуков для обеспечения гибкости и расширяемости системы.
находится по адресу: /system/admin/admin.log.php движка php-фреймворка Cotonti.
<?php
/**
* Панель управления - Менеджер логов
*
* @package Cotonti
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
(defined('COT_CODE') && defined('COT_ADMIN')) or die('Неверный URL.'); // Проверка на допустимость вызова файла. Прерывание выполнения, если условие не выполнено.
list(Cot::$usr['auth_read'], Cot::$usr['auth_write'], Cot::$usr['isadmin']) = cot_auth('admin', 'a'); // Получение прав доступа для текущего пользователя (чтение, запись, администратор).
cot_block(Cot::$usr['auth_read']); // Проверка, есть ли у пользователя право на чтение, если нет - прекращаем выполнение.
$t = new XTemplate(cot_tplfile('admin.log', 'core')); // Инициализация шаблона для страницы логов, загрузка шаблона admin.log.
$adminPath[] = array(cot_url('admin', 'm=other'), Cot::$L['Other']); // Добавление пути в навигацию панели администратора (раздел "Other").
$adminPath[] = array(cot_url('admin', 'm=log'), Cot::$L['Log']); // Добавление пути в навигацию панели администратора (раздел "Log").
$adminHelp = Cot::$L['adm_log_desc']; // Установка текста помощи для страницы логов.
$adminTitle = Cot::$L['Log']; // Установка заголовка страницы.
$log_groups = array( // Массив групп для логов, каждой группе присвоено имя и описание.
'all' => Cot::$L['All'], // Все логи.
'def' => Cot::$L['Default'], // Логи по умолчанию.
'adm' => Cot::$L['Administration'], // Логи администрирования.
'for' => Cot::$L['Forums'], // Логи форумов.
'sec' => Cot::$L['Security'], // Логи безопасности.
'usr' => Cot::$L['Users'], // Логи пользователей.
'plg' => Cot::$L['Plugins'] // Логи плагинов.
);
$maxrowsperpage = (is_int(Cot::$cfg['maxrowsperpage']) && Cot::$cfg['maxrowsperpage'] > 0 || ctype_digit(Cot::$cfg['maxrowsperpage'])) ? // Проверка конфигурации на количество строк на странице (целое число и больше нуля).
Cot::$cfg['maxrowsperpage'] : 15; // Если условие выполнено, то берем это значение, иначе - 15.
list($pg, $d, $durl) = cot_import_pagenav('d', $maxrowsperpage); // Получение параметров для пагинации (страница, данные и URL).
/* === Hook === */
foreach (cot_getextplugins('admin.log.first') as $pl) { // Включение всех плагинов, связанных с хуком 'admin.log.first'.
include $pl; // Включение каждого плагина.
}
/* ===== */
if($a == 'purge' && $usr['isadmin']) // Если параметр $a равен 'purge' и пользователь является администратором.
{
cot_check_xg(); // Проверка на валидность CSRF токена.
/* === Hook === */
foreach (cot_getextplugins('admin.log.purge') as $pl) { // Включение всех плагинов, связанных с хуком 'admin.log.purge'.
include $pl; // Включение каждого плагина.
}
/* ===== */
$db->query("TRUNCATE $db_logger") ? cot_message('adm_ref_prune') : cot_message('Error'); // Очистка таблицы логов. Если запрос успешен, выводится сообщение об успешной очистке, в противном случае - ошибка.
}
Объяснение:
- Авторизация пользователя: Функции
cot_authиcot_blockпроверяют, есть ли у пользователя необходимые права для чтения логов. - Шаблон страницы: Используется шаблон
admin.logдля отображения содержимого страницы с логами. - Настройки навигации: В массиве
$adminPathопределяются пути для навигации в панели администратора. - Группы логов: Логи разделяются на группы с помощью массива
$log_groups, каждая группа имеет своё описание. - Пагинация: Определяется количество строк на странице с логами, исходя из конфигурации.
- Плагины: Хуки позволяют подключать плагины для расширения функционала страницы (например, дополнительные действия при отображении логов или их очистке).
- Очистка логов: Если активирован параметр
purgeи пользователь имеет права администратора, выполняется очистка таблицы логов в базе данных.
$totaldblog = $db->countRows($db_logger); // Подсчитывается общее количество строк в таблице логов.
$n = (empty($n)) ? 'all' : $n; // Если переменная $n пуста, то присваивается значение 'all', иначе остается текущее значение $n.
foreach($log_groups as $grp_code => $grp_name) // Перебираются все группы логов.
{
$selected = ($grp_code == $n) ? " selected=\"selected\"" : ""; // Проверка, соответствует ли текущий код группы выбранному (для отображения "выбрано").
$t->assign(array( // Присваиваются значения шаблонам для каждой группы логов.
'ADMIN_LOG_OPTION_VALUE_URL' => cot_url('admin', 'm=log&n='.$grp_code), // URL для фильтрации по группе.
'ADMIN_LOG_OPTION_GRP_NAME' => $grp_name, // Имя группы логов.
'ADMIN_LOG_OPTION_SELECTED' => $selected // Флаг выбранности группы.
));
$t->parse('MAIN.GROUP_SELECT_OPTION'); // Разбирается и добавляется опция группы логов в шаблон.
}
$is_adminwarnings = isset($adminwarnings); // Проверяется, определена ли переменная $adminwarnings. Это может быть связано с предупреждениями для администраторов.
$totalitems = ($n == 'all') ? $totaldblog : $db->query("SELECT COUNT(*) FROM $db_logger WHERE log_group='$n'")->fetchColumn(); // Если фильтр выбран как 'all', то общее количество логов берется из переменной $totaldblog, иначе считается количество логов для выбранной группы.
$pagenav = cot_pagenav('admin', 'm=log&n='.$n, $d, $totalitems, $maxrowsperpage, 'd', '', $cfg['jquery'] && $cfg['turnajax']); // Создается навигация по страницам для логов, с учетом выбранной группы, текущей страницы и общего количества элементов.
if($n == 'all') // Если выбран фильтр 'all' для всех логов.
{
$sql = $db->query("SELECT * FROM $db_logger WHERE 1 ORDER by log_id DESC LIMIT $d, ".$maxrowsperpage); // Запрос для получения всех логов, отсортированных по ID в убывающем порядке.
}
else
{
$sql = $db->query("SELECT * FROM $db_logger WHERE log_group='$n' ORDER by log_id DESC LIMIT $d, ".$maxrowsperpage); // Запрос для получения логов только из выбранной группы.
}
Объяснение:
- Подсчет общего количества логов: Сначала определяется общее количество записей в таблице логов.
- Фильтрация по группам: Для каждой группы логов создается выпадающий список с ссылками на фильтрацию логов по группам.
- Настройка пагинации: В зависимости от текущей страницы и выбранной группы логов, формируется навигация для перехода между страницами с логами.
- Запросы к базе данных: Если фильтр не установлен на 'all', выполняется запрос для получения логов только из определенной группы. Если 'all', то запрашиваются все логи.
Этот код отвечает за отображение логов в административной панели с возможностью фильтрации по группам и пагинации.
$ii = 0; // Инициализация счетчика для подсчета количества строк, выводимых на странице.
$extp = cot_getextplugins('admin.log.loop'); // Получение списка плагинов, которые могут быть подключены к циклу вывода логов.
foreach ($sql->fetchAll() as $row) { // Перебор всех строк данных логов, полученных из базы данных.
$t->assign([ // Присваивание значений переменным шаблона для каждой строки лога.
'ADMIN_LOG_ROW_LOG_ID' => $row['log_id'], // Присваивание ID лога.
'ADMIN_LOG_ROW_DATE' => cot_date('datetime_medium', $row['log_date']), // Преобразование даты в нужный формат и присваивание.
'ADMIN_LOG_ROW_DATE_STAMP' => $row['log_date'], // Присваивание временной метки лога.
'ADMIN_LOG_ROW_URL_IP_SEARCH' => cot_plugin_active('ipsearch') ? // Если плагин 'ipsearch' активирован, генерируем ссылку на поиск по IP.
cot_url('admin', 'm=other&p=ipsearch&a=search&id=' . $row['log_ip'] . '&' . cot_xg()) : '', // Формирование URL для поиска по IP.
'ADMIN_LOG_ROW_LOG_IP' => $row['log_ip'], // Присваивание IP-адреса.
'ADMIN_LOG_ROW_LOG_NAME' => $row['log_name'], // Присваивание имени логируемого действия.
'ADMIN_LOG_ROW_URL_LOG_GROUP' => cot_url('admin', 'm=log&n=' . $row['log_group']), // Генерация URL для фильтрации по группе логов.
'ADMIN_LOG_ROW_LOG_GROUP' => isset($log_groups[$row['log_group']]) ? // Присваивание названия группы логов, если она существует.
$log_groups[$row['log_group']] : $row['log_group'], // Если группа не существует, то отображаем код группы.
'ADMIN_LOG_ROW_LOG_TEXT' => htmlspecialchars($row['log_text']) // Преобразование текста лога в безопасный для HTML формат.
]);
foreach ($extp as $pl) { // Перебор плагинов для дополнительной обработки каждого лога.
include $pl; // Включение плагина.
}
$t->parse('MAIN.LOG_ROW'); // Обработка шаблона для строки лога.
$ii++; // Увеличение счетчика строк.
}
$t->assign([ // Присваивание значений для пагинации и других параметров.
'ADMIN_LOG_URL_PRUNE' => cot_url('admin', 'm=log&a=purge&' . cot_xg()), // Генерация URL для очистки логов.
'ADMIN_LOG_TOTALDBLOG' => $totaldblog, // Общее количество логов.
'ADMIN_LOG_PAGINATION_PREV' => $pagenav['prev'], // Ссылка на предыдущую страницу.
'ADMIN_LOG_PAGNAV' => $pagenav['main'], // Основная навигация по страницам.
'ADMIN_LOG_PAGINATION_NEXT' => $pagenav['next'], // Ссылка на следующую страницу.
'ADMIN_LOG_TOTALITEMS' => $totalitems, // Общее количество отображаемых элементов.
'ADMIN_LOG_ON_PAGE' => $ii // Количество отображенных строк на текущей странице.
]);
cot_display_messages($t); // Вывод сообщений, если таковые имеются.
foreach (cot_getextplugins('admin.log.tags') as $pl) { // Перебор плагинов для дополнительной обработки тэгов.
include $pl; // Включение плагина.
}
$t->parse('MAIN'); // Обработка основного шаблона.
$adminMain = $t->text('MAIN'); // Сохранение обработанного шаблона в переменную.
Объяснение:
- Цикл вывода логов: В этом участке кода для каждой строки из базы данных (логов) создается запись в шаблоне. Все необходимые данные, такие как ID лога, дата, IP, текст и т.д., передаются в шаблон и отображаются.
- Обработка плагинами: В процессе вывода логов подключаются внешние плагины для расширенной функциональности, такие как фильтрация по IP или другие дополнительные задачи.
- Пагинация: Для вывода большого количества логов используется система пагинации, с помощью которой администратор может переходить между страницами логов.
- Формирование данных для шаблона: После того как все строки лога обработаны, заполняются значения для общей информации о логах, навигации по страницам, и отображения сообщений.
Этот код отвечает за вывод и обработку логов в административной панели с возможностью фильтрации, пагинации и использования плагинов для дополнительной функциональности.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 28.01.2025 18:17
- Последнее обновление: 28.01.2025 18:17