Файл admin.users.php в Cotonti CMF
является частью панели администратора системы Cotonti CMF и используется для управления пользователями и группами пользователей
Основное назначение файла и его место в системе:
Файл admin.users.php является частью панели администратора системы Cotonti CMF и используется для управления пользователями и группами пользователей. Он представляет собой административную страницу для выполнения различных операций с группами пользователей, таких как добавление, редактирование и удаление групп. Также он предоставляет доступ к настройкам прав доступа, а также возможность просмотра и управления пользователями внутри каждой группы.
Место в системе:
- Он является частью административной панели, доступной только пользователям с правами администратора (и суперадмина).
- Файл активно взаимодействует с базой данных, предоставляя интерфейс для выполнения операций с данными пользователей и групп.
- Взаимодействует с другими модулями системы через хуки, что позволяет расширять функциональность.
Основные задачи и условия, которые выполняет код:
-
Проверка прав доступа: Вначале код проверяет, имеет ли текущий пользователь необходимые права (чтение, запись и администраторские права для работы с пользователями и группами).
-
Добавление, редактирование и удаление групп:
- Если происходит добавление группы (условие
$n == 'add'), то обрабатываются данные формы, происходит валидация и вставка новой группы в базу данных. - Если редактирование (условие
$n == 'edit'), то данные существующей группы обновляются. - Если удаление группы (условие
$a == 'delete'), то выполняется удаление группы и очистка связанных данных.
- Если происходит добавление группы (условие
-
Формирование интерфейса: Вся логика вывода данных и формирования формы редактирования или добавления групп происходит с помощью библиотеки XTemplate. Она позволяет удобно разделять логику и представление данных.
-
Работа с правами доступа: В процессе добавления или редактирования группы, код взаимодействует с системой прав доступа, добавляя или удаляя права для групп.
-
Хуки для расширений: Код поддерживает хуки, которые позволяют подключать дополнительные плагины для расширения функционала (например, до и после добавления, редактирования, удаления).
-
Обновление и кэширование данных: После выполнения операций с базой данных, происходит обновление кэша (если он используется) для группы пользователей, что позволяет избежать устаревших данных.
Список функций, используемых в коде:
-
cot_auth()- Назначение: Проверка прав доступа для текущего пользователя.
- Что делает: Эта функция используется для получения и проверки прав пользователя по конкретному ресурсу (в данном случае - пользователи и группы).
-
cot_block()- Назначение: Проверка, имеет ли текущий пользователь необходимые права.
- Что делает: Если права не разрешены, происходит остановка выполнения кода.
-
cot_incfile()- Назначение: Подключение необходимых файлов.
- Что делает: Используется для подключения дополнительных файлов для работы с аутентификацией или загрузками.
-
cot_import()- Назначение: Получение данных из запроса.
- Что делает: Функция обрабатывает и очищает данные, полученные из POST или GET-запросов.
-
cot_check()- Назначение: Проверка на ошибки.
- Что делает: Проверяет, не пусты ли обязательные поля формы (например, название группы) и вызывает ошибку, если это необходимо.
-
cot_url()- Назначение: Генерация URL.
- Что делает: Используется для формирования URL-адресов для редиректов или ссылок на страницы.
-
cot_message()- Назначение: Отображение сообщений об успехе или ошибке.
- Что делает: Показывает сообщение пользователю после выполнения определенной операции (например, добавление группы).
-
cot_redirect()- Назначение: Редирект на другую страницу.
- Что делает: Перенаправляет пользователя на указанную страницу после выполнения операции.
-
cot_selectbox()- Назначение: Формирование выпадающего списка.
- Что делает: Отображает выпадающий список с данными для выбора пользователем (например, для уровня прав).
-
cot_inputbox()
- Назначение: Формирование текстовых полей формы.
- Что делает: Создает текстовые поля для ввода данных пользователем (например, для названия группы).
cot_radiobox()
- Назначение: Формирование радиокнопок.
- Что делает: Отображает радиокнопки для выбора одного из вариантов (например, активность группы).
cot_getextplugins()
- Назначение: Получение списка подключаемых плагинов.
- Что делает: Возвращает список внешних плагинов, которые можно включить для расширения функционала на различных этапах обработки.
Список методов:
-
Метод объекта XTemplate
parse()- Назначение: Обработка и вывод шаблона.
- Что делает: Метод отвечает за обработку данных и присвоение значений переменным в шаблоне. Вызывается для разных блоков шаблона.
-
Метод объекта XTemplate
assign()- Назначение: Присваивание значений переменным.
- Что делает: Используется для передачи данных из PHP в шаблон для отображения на веб-странице.
-
Метод объекта DB (например,
$db->insert()или$db->update())- Назначение: Работа с базой данных.
- Что делает: Выполняет операции вставки, обновления или удаления данных из базы данных.
Взаимодействие с классами и объектами:
-
Класс XTemplate:
- Взаимодействует с шаблонами и переменными, которые отображаются на веб-странице. Это основной класс для генерации интерфейса.
-
Объект базы данных
$db:- Взаимодействует с таблицами базы данных для выполнения SQL-запросов (например, для вставки, обновления, удаления данных о группах пользователей).
-
Объект кэша
$cache:- Если используется, этот объект обновляет кэш после изменения данных.
Характеристика стиля PHP:
-
Процедурный стиль с элементами ООП:
- Основной код написан в процедурном стиле (например, использование функций для работы с данными).
- Используются объекты для работы с шаблонами и базой данных (XTemplate, DB).
- Стиль кода не является строго объектно-ориентированным, но элементы ООП присутствуют, что позволяет облегчить работу с базой данных и шаблонами.
-
Явное разделение логики и представления:
- Использование XTemplate позволяет разделить логику обработки данных и их отображение.
-
Использование хуков для расширяемости:
- Хуки позволяют подключать внешние плагины, что делает систему расширяемой и гибкой.
В целом, код ориентирован на администрирование пользователей и групп в системе Cotonti, с возможностью расширения и настройки через плагины и хуки.
находится по адресу: /system/admin/admin.users.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('Wrong URL.'); // Проверка, что код запущен с правильного URL и что это админская часть.
list($usr['auth_read'], $usr['auth_write'], $usr['isadmin']) = cot_auth('users', 'a'); // Получение прав доступа пользователя для модуля 'users' в админке.
if ($usr['maingrp'] == COT_GROUP_SUPERADMINS) // Если пользователь является супер-администратором.
{
$usr['auth_read'] = true; // Установка права на чтение для супер-администратора.
$usr['auth_write'] = true; // Установка права на запись для супер-администратора.
$usr['isadmin'] = true; // Установка флага, что пользователь является администратором.
}
cot_block($usr['isadmin']); // Проверка, является ли пользователь администратором, если нет - остановка выполнения.
require_once cot_incfile('auth'); // Подключение файла аутентификации.
require_once cot_incfile('uploads'); // Подключение файла для работы с загрузками.
$t = new XTemplate(cot_tplfile('admin.users', 'core')); // Инициализация шаблонизатора с шаблоном для админской панели пользователей.
$adminPath[] = array(cot_url('admin', 'm=users'), $L['Users']); // Добавление пункта "Пользователи" в путь навигации.
$adminTitle = $L['Users']; // Установка заголовка страницы на "Пользователи".
$g = cot_import('g', 'G', 'INT'); // Получение и обработка параметра 'g' из URL, который может быть числовым значением.
$lincif_extfld = cot_auth('admin', 'a', 'A'); // Получение прав доступа для администрирования расширенных полей.
/* === Hook === */
foreach (cot_getextplugins('admin.users.first') as $pl) // Цикл по плагинам, подключаемым в 'admin.users.first'.
{
include $pl; // Включение каждого плагина из списка.
}
/* ===== */
if($n == 'add') // Если переменная $n равна 'add', выполняется добавление группы.
{
$rgroups['grp_name'] = cot_import('rname', 'P', 'TXT'); // Импорт значения 'rname' из POST-запроса и присваивание его переменной 'grp_name'.
$rgroups['grp_title'] = cot_import('rtitle', 'P', 'TXT'); // Импорт значения 'rtitle' из POST-запроса и присваивание его переменной 'grp_title'.
$rgroups['grp_desc'] = cot_import('rdesc', 'P', 'TXT'); // Импорт значения 'rdesc' из POST-запроса и присваивание его переменной 'grp_desc'.
$rgroups['grp_icon'] = cot_import('ricon', 'P', 'TXT'); // Импорт значения 'ricon' из POST-запроса и присваивание его переменной 'grp_icon'.
$rgroups['grp_alias'] = cot_import('ralias', 'P', 'TXT'); // Импорт значения 'ralias' из POST-запроса и присваивание его переменной 'grp_alias'.
$rgroups['grp_level'] = (int)cot_import('rlevel', 'P', 'INT'); // Импорт значения 'rlevel' как целое число и присваивание его переменной 'grp_level'.
$rgroups['grp_disabled'] = cot_import('rdisabled', 'P', 'BOL') ? 1 : 0; // Импорт значения 'rdisabled' как булевого значения и присваивание его переменной 'grp_disabled'.
$rgroups['grp_maintenance'] = cot_import('rmtmode', 'P', 'BOL') ? 1 : 0; // Импорт значения 'rmtmode' как булевого значения и присваивание его переменной 'grp_maintenance'.
$rgroups['grp_skiprights'] = cot_import('rskiprights', 'P', 'BOL') ? 1 : 0; // Импорт значения 'rskiprights' как булевого значения и присваивание его переменной 'grp_skiprights'.
$rgroups['grp_ownerid'] = (int)$usr['id']; // Присваивание ID текущего пользователя как владельца группы.
$rcopyrightsfrom = cot_import('rcopyrightsfrom', 'P', 'INT'); // Импорт значения 'rcopyrightsfrom' как целое число.
/* === Hook === */
foreach (cot_getextplugins('admin.users.add.first') as $pl) // Цикл по плагинам, подключаемым в 'admin.users.add.first'.
{
include $pl; // Включение каждого плагина из списка.
}
/* ===== */
cot_check(empty($rgroups['grp_name']), 'adm_groups_name_empty', 'rname'); // Проверка, что имя группы не пустое, иначе вывод ошибки.
cot_check(empty($rgroups['grp_title']), 'adm_groups_title_empty', 'rtitle'); // Проверка, что заголовок группы не пустой, иначе вывод ошибки.
if (!cot_error_found()) // Если ошибок нет.
{
$db->insert($db_groups, $rgroups); // Вставка новой группы в таблицу групп базы данных.
$grp_id = $db->lastInsertId(); // Получение ID только что вставленной группы.
/* === Hook === */
foreach (cot_getextplugins('admin.users.add') as $pl) // Цикл по плагинам, подключаемым в 'admin.users.add'.
{
include $pl; // Включение каждого плагина из списка.
}
/* ===== */
if (!$rgroups['grp_skiprights']) // Если не установлена опция пропуска прав.
{
cot_auth_add_group($grp_id, $rcopyrightsfrom); // Добавление прав для новой группы.
}
$cache && $cache->db->remove('cot_groups', 'system'); // Если кеширование включено, удаляем кеш для таблицы групп.
cot_message('Added'); // Вывод сообщения об успешном добавлении группы.
}
cot_redirect(cot_url('admin', 'm=users', '', true)); // Перенаправление на страницу с пользователями.
}
elseif($n == 'edit') // Если переменная $n равна 'edit', выполняется редактирование группы.
{
if($a == 'update') // Если переменная $a равна 'update', выполняется обновление данных группы.
{
$rgroups['grp_name'] = cot_import('rname', 'P', 'TXT'); // Импорт значения 'rname' из POST-запроса и присваивание его переменной 'grp_name'.
$rgroups['grp_title'] = cot_import('rtitle', 'P', 'TXT'); // Импорт значения 'rtitle' из POST-запроса и присваивание его переменной 'grp_title'.
$rgroups['grp_desc'] = cot_import('rdesc', 'P', 'TXT'); // Импорт значения 'rdesc' из POST-запроса и присваивание его переменной 'grp_desc'.
$rgroups['grp_icon'] = cot_import('ricon', 'P', 'TXT'); // Импорт значения 'ricon' из POST-запроса и присваивание его переменной 'grp_icon'.
$rgroups['grp_alias'] = cot_import('ralias', 'P', 'TXT'); // Импорт значения 'ralias' из POST-запроса и присваивание его переменной 'grp_alias'.
$rgroups['grp_level'] = (int)cot_import('rlevel', 'P', 'INT'); // Импорт значения 'rlevel' как целое число и присваивание его переменной 'grp_level'.
$rgroups['grp_disabled'] = cot_import('rdisabled', 'P', 'BOL') ? 1 : 0; // Импорт значения 'rdisabled' как булевого значения и присваивание его переменной 'grp_disabled'.
$rgroups['grp_maintenance'] = cot_import('rmtmode', 'P', 'BOL') ? 1 : 0; // Импорт значения 'rmtmode' как булевого значения и присваивание его переменной 'grp_maintenance'.
$rgroups['grp_skiprights'] = cot_import('rskiprights', 'P', 'BOL') ? 1 : 0; // Импорт значения 'rskiprights' как булевого значения и присваивание его переменной 'grp_skiprights'.
/* === Hook === */
foreach (cot_getextplugins('admin.users.update') as $pl) // Цикл по плагинам, подключаемым в 'admin.users.update'.
{
include $pl; // Включение каждого плагина из списка.
}
/* ===== */
cot_check(empty($rgroups['grp_name']), 'adm_groups_name_empty', 'rname'); // Проверка, что имя группы не пустое, иначе вывод ошибки.
cot_check(empty($rgroups['grp_title']), 'adm_groups_title_empty', 'rtitle'); // Проверка, что заголовок группы не пустой, иначе вывод ошибки.
if (!cot_error_found()) // Если ошибок нет.
{
$db->update($db_groups, $rgroups, "grp_id=$g"); // Обновление данных группы в базе данных по ID группы.
$was_rightless = $db->query("SELECT grp_skiprights FROM $db_groups WHERE grp_id = $g")->fetchColumn(); // Получение текущего значения флага 'grp_skiprights' для группы.
if ($was_rightless && !$rgroups['grp_skiprights']) // Если раньше права были пропущены, а теперь они не пропускаются.
{
// Добавление прав, унаследованных от группы по умолчанию
cot_auth_add_group($grp_id, COT_GROUP_MEMBERS); // Добавление прав для группы.
}
elseif (!$was_rightless && $rgroups['grp_skiprights']) // Если раньше права не пропускались, а теперь они пропускаются.
{
// Удаление прав
cot_auth_remove_group($g); // Удаление прав для группы.
}
$cache && $cache->db->remove('cot_groups', 'system'); // Если кеширование включено, удаляем кеш для таблицы групп.
cot_message('Updated'); // Вывод сообщения об успешном обновлении группы.
}
cot_redirect(cot_url('admin', array('m' => 'users', 'n'=>'edit', 'g'=>$g), '', true)); // Перенаправление на страницу редактирования группы.
}
elseif( // Начало другой ветви условий, продолжение кода не отправлено.
elseif($a == 'delete' && $g > 5) // Если переменная $a равна 'delete' и ID группы больше 5, выполняется удаление.
{
$sql = $db->delete($db_groups, "grp_id='$g'"); // Удаление группы из таблицы групп по ID.
$sql = $db->delete($db_groups_users, "gru_groupid='$g'"); // Удаление всех пользователей из удаляемой группы.
cot_auth_remove_group($g); // Удаление прав, связанных с удаляемой группой.
/* === Hook === */
foreach (cot_getextplugins('admin.users.delete') as $pl) // Цикл по плагинам, подключаемым в 'admin.users.delete'.
{
include $pl; // Включение каждого плагина из списка.
}
/* ===== */
cot_auth_clear('all'); // Очистка всех авторизационных данных.
$cache && $cache->db->remove('cot_groups', 'system'); // Если кеширование включено, удаляем кеш для таблицы групп.
cot_message('Deleted'); // Вывод сообщения об успешном удалении.
cot_redirect(cot_url('admin', 'm=users', '', true)); // Перенаправление на страницу с пользователями.
}
else // В противном случае выполняется редактирование.
{
$showdefault = false; // Установка флага, чтобы не показывать стандартный шаблон.
$sql = $db->query("SELECT * FROM $db_groups WHERE grp_id='$g'"); // Получение данных о группе по ID.
cot_die($sql->rowCount() == 0); // Если группа не найдена, завершаем выполнение.
$row = $sql->fetch(); // Извлечение данных о группе.
$sql1 = $db->query("SELECT COUNT(*) FROM $db_groups_users WHERE gru_groupid='$g'"); // Подсчет количества пользователей в группе.
$row['grp_memberscount'] = $sql1->fetchColumn(); // Присваивание количества пользователей переменной 'grp_memberscount'.
$row['grp_name'] = htmlspecialchars($row['grp_name']); // Экранирование символов в имени группы.
$row['grp_title'] = htmlspecialchars($row['grp_title']); // Экранирование символов в заголовке группы.
$adminPath[] = array(cot_url('admin', 'm=users&n=edit&g='.$g), $row['grp_name']); // Добавление пути на страницу редактирования группы в навигацию.
$t->assign(array( // Присваиваем значения переменным для использования в шаблоне.
'ADMIN_USERS_GRP_NAME' => $row['grp_name'], // Имя группы.
'ADMIN_USERS_GRP_TITLE' => $row['grp_title'], // Заголовок группы.
'ADMIN_USERS_EDITFORM_URL' => cot_url('admin', 'm=users&n=edit&a=update&g='.$g), // URL для формы обновления группы.
'ADMIN_USERS_EDITFORM_GRP_NAME' => cot_inputbox('text', 'rname', $row['grp_name'], 'size="40" maxlength="64"'), // Поле ввода для имени группы.
'ADMIN_USERS_EDITFORM_GRP_TITLE' => cot_inputbox('text', 'rtitle', $row['grp_title'], 'size="40" maxlength="64"'), // Поле ввода для заголовка группы.
'ADMIN_USERS_EDITFORM_GRP_DESC' => cot_inputbox('text', 'rdesc', htmlspecialchars($row['grp_desc']), 'size="40" maxlength="64"'), // Поле ввода для описания группы.
'ADMIN_USERS_EDITFORM_GRP_ICON' => cot_inputbox('text', 'ricon', htmlspecialchars($row['grp_icon']), 'size="40" maxlength="128"'), // Поле ввода для иконки группы.
'ADMIN_USERS_EDITFORM_GRP_ALIAS' => cot_inputbox('text', 'ralias', htmlspecialchars($row['grp_alias']), 'size="40" maxlength="24"'), // Поле ввода для псевдонима группы.
'ADMIN_USERS_EDITFORM_GRP_DISABLED' => ($g <= 5) ? $L['No'] : cot_radiobox($row['grp_disabled'], 'rdisabled', array(1, 0), array($L['Yes'], $L['No'])), // Радио-кнопка для включения/отключения группы (для групп с ID <= 5 - только "Нет").
'ADMIN_USERS_EDITFORM_GRP_MAINTENANCE' => cot_radiobox($row['grp_maintenance'], 'rmtmode', array(1, 0), array($L['Yes'], $L['No'])), // Радио-кнопка для режима обслуживания.
'ADMIN_USERS_EDITFORM_GRP_SKIPRIGHTS' => cot_radiobox($row['grp_skiprights'], 'rskiprights', array(1, 0), array($L['Yes'], $L['No'])), // Радио-кнопка для пропуска прав доступа.
'ADMIN_USERS_EDITFORM_GRP_RLEVEL' => cot_selectbox($row['grp_level'], 'rlevel', range(0, 99), range(0, 99), false), // Выпадающий список для уровня группы.
'ADMIN_USERS_EDITFORM_GRP_MEMBERSCOUNT' => $row['grp_memberscount'], // Количество участников группы.
'ADMIN_USERS_EDITFORM_GRP_MEMBERSCOUNT_URL' => cot_url('users', 'g='.$g), // URL для отображения списка участников группы.
'ADMIN_USERS_EDITFORM_SKIPRIGHTS' => $row['grp_skiprights'], // Значение пропуска прав.
'ADMIN_USERS_EDITFORM_RIGHT_URL' => cot_url('admin', 'm=rights&g='.$g), // URL для прав доступа.
'ADMIN_USERS_EDITFORM_DEL_URL' => cot_url('admin', 'm=users&n=edit&a=delete&g='.$g.'&'.cot_xg()), // URL для удаления группы.
'ADMIN_USERS_EDITFORM_DEL_CONFIRM_URL' => cot_confirm_url( // URL для подтверждения удаления группы.
cot_url('admin', 'm=users&n=edit&a=delete&g='.$g.'&'.cot_xg()),
'admin'
),
));
/* === Hook === */
foreach (cot_getextplugins('admin.users.edit.tags') as $pl) { // Цикл по плагинам, подключаемым в 'admin.users.edit.tags'.
include $pl; // Включение каждого плагина из списка.
}
/* ===== */
$t->parse('MAIN.ADMIN_USERS_EDIT'); // Разбор шаблона для редактирования группы.
}
/* === Hook === */
foreach (cot_getextplugins('admin.users.edit.tags') as $pl) { // Для всех плагинов, зарегистрированных для хука 'admin.users.edit.tags'
include $pl; // Подключаем каждый плагин.
}
/* ===== */
$t->parse('MAIN.ADMIN_USERS_EDIT'); // Парсим шаблон с тегом 'ADMIN_USERS_EDIT' для отображения в основной части страницы.
}
}
if (!isset($showdefault) || $showdefault == true) { // Проверка, если переменная $showdefault не установлена или её значение равно true
$sql = $db->query("SELECT DISTINCT(gru_groupid), COUNT(*) FROM $db_groups_users WHERE 1 GROUP BY gru_groupid"); // Запрос для получения количества пользователей в каждой группе
while($row = $sql->fetch()) { // Для каждой строки в результате запроса
$members[$row['gru_groupid']] = $row['COUNT(*)']; // Сохраняем количество пользователей в массив
}
$sql->closeCursor(); // Закрываем курсор запроса
$sql = $db->query("SELECT * FROM $db_groups WHERE 1 ORDER BY grp_level DESC, grp_id DESC"); // Запрос для получения всех групп, отсортированных по уровню и ID
if($sql->rowCount() > 0) { // Если группы найдены
/* === Hook - Part1 : Set === */
$extp = cot_getextplugins('admin.users.row.tags'); // Получаем плагины, связанные с отображением строк для пользователей
/* ===== */
foreach ($sql->fetchAll() as $row) { // Для каждой группы
$members[$row['grp_id']] = (empty($members[$row['grp_id']])) ? '0' : $members[$row['grp_id']]; // Если количество пользователей в группе пустое, ставим 0
$grp_title = isset($L['users_grp_' . $row['grp_id'] . '_title']) ? $L['users_grp_' . $row['grp_id'] . '_title'] : htmlspecialchars($row['grp_title']); // Получаем заголовок группы, если он есть, иначе берем из базы
$grp_desc = isset($L['users_grp_' . $row['grp_id'] . '_desc']) ? $L['users_grp_' . $row['grp_id'] . '_desc'] : htmlspecialchars($row['grp_desc']); // Получаем описание группы, если оно есть, иначе берем из базы
$t->assign(array( // Присваиваем данные для шаблона
'ADMIN_USERS_ROW_GRP_TITLE_URL' => cot_url('admin', 'm=users&n=edit&g='.$row['grp_id']), // URL для редактирования группы
'ADMIN_USERS_ROW_GRP_NAME' => htmlspecialchars($row['grp_name']), // Имя группы
'ADMIN_USERS_ROW_GRP_TITLE' => $grp_title, // Заголовок группы
'ADMIN_USERS_ROW_GRP_DESC' => $grp_desc, // Описание группы
'ADMIN_USERS_ROW_GRP_ID' => $row['grp_id'], // ID группы
'ADMIN_USERS_ROW_GRP_COUNT_MEMBERS' => $members[$row['grp_id']], // Количество пользователей в группе
'ADMIN_USERS_ROW_GRP_DISABLED' => $cot_yesno[!$row['grp_disabled']], // Статус группы (включена/выключена)
'ADMIN_USERS_ROW_GRP_SKIPRIGHTS' => $row['grp_skiprights'], // Флаг пропуска прав
'ADMIN_USERS_ROW_GRP_RIGHTS_URL' => cot_url('admin', 'm=rights&g='.$row['grp_id']), // URL для управления правами
'ADMIN_USERS_ROW_GRP_JUMPTO_URL' => cot_url('users', 'g='.$row['grp_id']) // URL для перехода к группе пользователей
));
/* === Hook - Part2 : Include === */
foreach ($extp as $pl) { // Для каждого плагина, подключенного для данного хука
include $pl; // Подключаем плагин
}
/* ===== */
$t->parse('MAIN.ADMIN_USERS_DEFAULT.USERS_ROW'); // Парсим шаблон для отображения строки с данными группы
}
}
$t->assign(array( // Присваиваем данные для формы добавления новой группы
'ADMIN_USERS_FORM_URL' => cot_url('admin', 'm=users&n=add'), // URL формы добавления
'ADMIN_USERS_NGRP_NAME' => cot_inputbox('text', 'rname', '', 'size="40" maxlength="64"'), // Поле для имени группы
'ADMIN_USERS_NGRP_TITLE' => cot_inputbox('text', 'rtitle', '', 'size="40" maxlength="64"'), // Поле для заголовка группы
'ADMIN_USERS_NGRP_DESC' => cot_inputbox('text', 'rdesc', '', 'size="40" maxlength="64"'), // Поле для описания группы
'ADMIN_USERS_NGRP_ICON' => cot_inputbox('text', 'ricon', '', 'size="40" maxlength="128"'), // Поле для иконки группы
'ADMIN_USERS_NGRP_ALIAS' => cot_inputbox('text', 'ralias', '', 'size="40" maxlength="24"'), // Поле для алиаса группы
'ADMIN_USERS_NGRP_DISABLED' => cot_radiobox(0, 'rdisabled', array(1, 0), array($L['Yes'], $L['No'])), // Форма для выбора статуса группы
'ADMIN_USERS_NGRP_MAINTENANCE' => cot_radiobox(0, 'rmtmode', array(1, 0), array($L['Yes'], $L['No'])), // Форма для выбора режима обслуживания
'ADMIN_USERS_NGRP_SKIPRIGHTS' => cot_radiobox(0, 'rskiprights', array(1, 0), array($L['Yes'], $L['No'])), // Форма для выбора пропуска прав
'ADMIN_USERS_NGRP_RLEVEL' => cot_selectbox(50, 'rlevel', range(0, 99), range(0, 99), false), // Селектор уровня группы
'ADMIN_USERS_FORM_SELECTBOX_GROUPS' => cot_selectbox_groups(4, 'rcopyrightsfrom', array('5')) // Селектор групп для прав
));
/* === Hook === */
foreach (cot_getextplugins('admin.users.add.tags') as $pl) { // Для каждого плагина, подключенного для хука 'admin.users.add.tags'
include $pl; // Подключаем плагин
}
/* ===== */
$t->parse('MAIN.ADMIN_USERS_DEFAULT'); // Парсим шаблон для отображения формы добавления новой группы
}
$t->assign(array(
'ADMIN_USERS_URL' => cot_url('admin', 'm=config&n=edit&o=module&p=users'), // Ссылка на настройки модуля пользователей
'ADMIN_USERS_EXTRAFIELDS_URL' => cot_url('admin', 'm=extrafields&n='.$db_users) // Ссылка на настройки дополнительных полей для пользователей
));
cot_display_messages($t); // Отображаем сообщения (например, об успешных действиях)
/* === Hook === */
foreach (cot_getextplugins('admin.users.tags') as $pl) { // Для каждого плагина, подключенного для хука 'admin.users.tags'
include $pl; // Подключаем плагин
}
/* ===== */
$t->parse('MAIN'); // Парсим основной шаблон
$adminMain = $t->text('MAIN'); // Сохраняем результат шаблона в переменную $adminMain
Подробности:
-
$t->assign:- Присваивает переменным значения URL, которые ведут к странице редактирования настроек модуля пользователей и дополнительных полей пользователей в административной панели.
-
cot_display_messages($t);:- Эта функция отображает все сообщения, которые могут быть сохранены в сессии, такие как сообщения об успехе или ошибках. Эти сообщения добавляются в шаблон
$t.
- Эта функция отображает все сообщения, которые могут быть сохранены в сессии, такие как сообщения об успехе или ошибках. Эти сообщения добавляются в шаблон
-
Хук
admin.users.tags:- Код включает в себя возможность для плагинов расширять функционал на этом этапе. Каждый плагин, зарегистрированный для хука
admin.users.tags, будет подключён и исполнен.
- Код включает в себя возможность для плагинов расширять функционал на этом этапе. Каждый плагин, зарегистрированный для хука
-
$t->parse('MAIN'):- Парсинг шаблона, что означает, что все ассоциированные переменные будут подставлены в шаблон и результат будет готов для вывода.
-
$adminMain = $t->text('MAIN');:- Сохраняет готовый результат парсинга в переменную
$adminMain, которая может быть использована позже для отображения на странице.
- Сохраняет готовый результат парсинга в переменную
Этот фрагмент отвечает за обработку и отображение основного административного интерфейса для работы с пользователями.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 28.01.2025 20:22
- Последнее обновление: 28.01.2025 20:32