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

является частью панели администратора системы Cotonti CMF и используется для управления пользователями и группами пользователей

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

Файл admin.users.php является частью панели администратора системы Cotonti CMF и используется для управления пользователями и группами пользователей. Он представляет собой административную страницу для выполнения различных операций с группами пользователей, таких как добавление, редактирование и удаление групп. Также он предоставляет доступ к настройкам прав доступа, а также возможность просмотра и управления пользователями внутри каждой группы.

Место в системе:

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

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

  1. Проверка прав доступа: Вначале код проверяет, имеет ли текущий пользователь необходимые права (чтение, запись и администраторские права для работы с пользователями и группами).

  2. Добавление, редактирование и удаление групп:

    • Если происходит добавление группы (условие $n == 'add'), то обрабатываются данные формы, происходит валидация и вставка новой группы в базу данных.
    • Если редактирование (условие $n == 'edit'), то данные существующей группы обновляются.
    • Если удаление группы (условие $a == 'delete'), то выполняется удаление группы и очистка связанных данных.
  3. Формирование интерфейса: Вся логика вывода данных и формирования формы редактирования или добавления групп происходит с помощью библиотеки XTemplate. Она позволяет удобно разделять логику и представление данных.

  4. Работа с правами доступа: В процессе добавления или редактирования группы, код взаимодействует с системой прав доступа, добавляя или удаляя права для групп.

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

  6. Обновление и кэширование данных: После выполнения операций с базой данных, происходит обновление кэша (если он используется) для группы пользователей, что позволяет избежать устаревших данных.

Список функций, используемых в коде:

  1. cot_auth()

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

    • Назначение: Проверка, имеет ли текущий пользователь необходимые права.
    • Что делает: Если права не разрешены, происходит остановка выполнения кода.
  3. cot_incfile()

    • Назначение: Подключение необходимых файлов.
    • Что делает: Используется для подключения дополнительных файлов для работы с аутентификацией или загрузками.
  4. cot_import()

    • Назначение: Получение данных из запроса.
    • Что делает: Функция обрабатывает и очищает данные, полученные из POST или GET-запросов.
  5. cot_check()

    • Назначение: Проверка на ошибки.
    • Что делает: Проверяет, не пусты ли обязательные поля формы (например, название группы) и вызывает ошибку, если это необходимо.
  6. cot_url()

    • Назначение: Генерация URL.
    • Что делает: Используется для формирования URL-адресов для редиректов или ссылок на страницы.
  7. cot_message()

    • Назначение: Отображение сообщений об успехе или ошибке.
    • Что делает: Показывает сообщение пользователю после выполнения определенной операции (например, добавление группы).
  8. cot_redirect()

    • Назначение: Редирект на другую страницу.
    • Что делает: Перенаправляет пользователя на указанную страницу после выполнения операции.
  9. cot_selectbox()

    • Назначение: Формирование выпадающего списка.
    • Что делает: Отображает выпадающий список с данными для выбора пользователем (например, для уровня прав).
  10. cot_inputbox()

  • Назначение: Формирование текстовых полей формы.
  • Что делает: Создает текстовые поля для ввода данных пользователем (например, для названия группы).
  1. cot_radiobox()
  • Назначение: Формирование радиокнопок.
  • Что делает: Отображает радиокнопки для выбора одного из вариантов (например, активность группы).
  1. cot_getextplugins()
  • Назначение: Получение списка подключаемых плагинов.
  • Что делает: Возвращает список внешних плагинов, которые можно включить для расширения функционала на различных этапах обработки.

Список методов:

  1. Метод объекта XTemplate parse()

    • Назначение: Обработка и вывод шаблона.
    • Что делает: Метод отвечает за обработку данных и присвоение значений переменным в шаблоне. Вызывается для разных блоков шаблона.
  2. Метод объекта XTemplate assign()

    • Назначение: Присваивание значений переменным.
    • Что делает: Используется для передачи данных из PHP в шаблон для отображения на веб-странице.
  3. Метод объекта 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

Подробности:

  1. $t->assign:

    • Присваивает переменным значения URL, которые ведут к странице редактирования настроек модуля пользователей и дополнительных полей пользователей в административной панели.
  2. cot_display_messages($t);:

    • Эта функция отображает все сообщения, которые могут быть сохранены в сессии, такие как сообщения об успехе или ошибках. Эти сообщения добавляются в шаблон $t.
  3. Хук admin.users.tags:

    • Код включает в себя возможность для плагинов расширять функционал на этом этапе. Каждый плагин, зарегистрированный для хука admin.users.tags, будет подключён и исполнен.
  4. $t->parse('MAIN'):

    • Парсинг шаблона, что означает, что все ассоциированные переменные будут подставлены в шаблон и результат будет готов для вывода.
  5. $adminMain = $t->text('MAIN');:

    • Сохраняет готовый результат парсинга в переменную $adminMain, которая может быть использована позже для отображения на странице.

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

 

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

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

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

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

Administrator

Оффлайн

Administrator

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

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

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

Модуль "Users", - users.admin.home.php в Cotonti CMF
1 Основное назначение файла "users.admin.home.php" в системе Cotonti — это обработка административной панели
Модуль "Users", - users.admin.home.tpl в Cotonti CMF
2 Файл шаблона users.admin.home.tpl в Cotonti CMF отображается на главной странице административной панели и содержит
Модуль "Users", - users.setup.php в Cotonti CMF
3 Файл users.setup.php в Cotonti CMF является конфигурационным файлом для модуля Users, который управляет регистрацией
Модуль "Users", - users.php в Cotonti CMF
4 Основное назначение файла и его место в системе Cotonti: Файл "users.php" в системе Cotonti является важным
Модуль "Users", - users.extrafields.php в Cotonti CMF
5 Основное назначение файла Файл users.extrafields.php в Cotonti CMF представляет собой часть модуля для управления