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

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

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

Основные задачи и условия, которые выполняет код:

  1. Авторизация и права доступа:

    • Проверяется, что текущий пользователь имеет права на чтение логов.
    • Если пользователь не авторизован или не имеет соответствующих прав, доступ к странице будет заблокирован.
  2. Отображение логов:

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

    • Логи могут быть сгруппированы и отфильтрованы по определенным категориям (группам), таким как "Администрация", "Пользователи", "Форумы" и т.д.
  4. Очистка логов (удаление старых записей):

    • Администратор имеет возможность очистить логи с помощью опции "purge". Это удаляет все записи в журнале.
  5. Подключение внешних плагинов:

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

    • Система отображает кнопки для перехода на предыдущую и следующую страницы, а также общую навигацию по страницам логов.
  7. Отображение статистики:

    • На странице отображается общая информация о количестве записей в журнале, а также количество записей, отображаемых на текущей странице.

Функции и их назначение:

В файле нет явных функций, однако используется несколько встроенных механизмов, которые выполняют различные задачи:

  1. cot_auth():

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

    • Функция блокирует доступ к странице в случае, если у пользователя нет прав доступа (если не прошла проверка через cot_auth).
  3. cot_tplfile():

    • Эта функция загружает шаблон для административной панели. В данном случае загружается шаблон для вывода логов.
  4. cot_url():

    • Генерирует URL для ссылок, например, для навигации по логам и их фильтрации по группам.
  5. cot_import_pagenav():

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

    • Функция, которая получает список активных плагинов для определенного хука, позволяя подключать внешние плагины для дополнительной функциональности.
  7. cot_date():

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

    • Проверяет, активирован ли плагин с указанным именем (например, для поиска по IP через плагин ipsearch).
  9. cot_message():

    • Функция для вывода сообщений на экран, например, после успешной очистки логов или ошибки.
  10. cot_pagenav():

    • Генерирует элементы пагинации для перехода между страницами.
  11. cot_display_messages():

    • Эта функция отображает все сообщения, накопленные системой, например, сообщения об ошибках или успешных действиях.

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

  1. Использование ООП: В коде активно используется объектно-ориентированное программирование. Например, используется объект XTemplate для обработки шаблонов, что позволяет эффективно управлять выводом данных на странице.

  2. Безопасность и валидация: В коде используется защита от CSRF атак через функцию cot_check_xg(), а также проверки на права доступа. Это гарантирует, что только администраторы могут выполнять действия, такие как очистка логов.

  3. Использование хуков для расширяемости: Код активно использует хуки, такие как cot_getextplugins(), для подключения внешних плагинов, что делает систему расширяемой и гибкой.

  4. Простота и лаконичность: Код достаточно прямолинейный и легко читаемый, использует базовые PHP конструкции (условные операторы, циклы, функции) для реализации необходимого функционала.

  5. Международный подход: В коде используются локализованные строки (например, через 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'); // Очистка таблицы логов. Если запрос успешен, выводится сообщение об успешной очистке, в противном случае - ошибка.
}

Объяснение:

  1. Авторизация пользователя: Функции cot_auth и cot_block проверяют, есть ли у пользователя необходимые права для чтения логов.
  2. Шаблон страницы: Используется шаблон admin.log для отображения содержимого страницы с логами.
  3. Настройки навигации: В массиве $adminPath определяются пути для навигации в панели администратора.
  4. Группы логов: Логи разделяются на группы с помощью массива $log_groups, каждая группа имеет своё описание.
  5. Пагинация: Определяется количество строк на странице с логами, исходя из конфигурации.
  6. Плагины: Хуки позволяют подключать плагины для расширения функционала страницы (например, дополнительные действия при отображении логов или их очистке).
  7. Очистка логов: Если активирован параметр 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); // Запрос для получения логов только из выбранной группы.
}

Объяснение:

  1. Подсчет общего количества логов: Сначала определяется общее количество записей в таблице логов.
  2. Фильтрация по группам: Для каждой группы логов создается выпадающий список с ссылками на фильтрацию логов по группам.
  3. Настройка пагинации: В зависимости от текущей страницы и выбранной группы логов, формируется навигация для перехода между страницами с логами.
  4. Запросы к базе данных: Если фильтр не установлен на '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'); // Сохранение обработанного шаблона в переменную.

Объяснение:

  1. Цикл вывода логов: В этом участке кода для каждой строки из базы данных (логов) создается запись в шаблоне. Все необходимые данные, такие как ID лога, дата, IP, текст и т.д., передаются в шаблон и отображаются.
  2. Обработка плагинами: В процессе вывода логов подключаются внешние плагины для расширенной функциональности, такие как фильтрация по IP или другие дополнительные задачи.
  3. Пагинация: Для вывода большого количества логов используется система пагинации, с помощью которой администратор может переходить между страницами логов.
  4. Формирование данных для шаблона: После того как все строки лога обработаны, заполняются значения для общей информации о логах, навигации по страницам, и отображения сообщений.

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

 

 

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

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

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

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

Administrator

Оффлайн

Administrator

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

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

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

Файл 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