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

Comments (0)

No comments yet
Only registered users can post new comments

Article multicategories

Additional categories where this article is shown as similar.

Content author

Administrator

Offline

Administrator

Last logged: 2026-09-13 14:50

  • Page published: 2025-01-28 18:17
  • Last update: 2025-01-28 18:17

Similar pages

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