<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin.php');
/**
* Фабрика тестовых пользователей для Bitrix CMS
* Генерирует массив пользователей с рандомизированными характеристиками
*/
class UserFactory
{
// Конфигурация генерации
const DEFAULT_USER_COUNT = 10;
const DEFAULT_EMAIL_PREFIX = 'test_user_';
const DEFAULT_PASSWORD = 'securePass123!';
const DEFAULT_GROUPS = [2]; // Группа "Все пользователи"
/**
* Генерирует массив пользователей
*
* @param int $count - количество пользователей
* @return array - массив объектов CUser
*/
public static function generate(int $count = self::DEFAULT_USER_COUNT): array
{
$users = [];
// Демографические данные для рандомизации
$namePool = ['Иван', 'Алексей', 'Дмитрий', 'Сергей', 'Андрей', 'Михаил'];
$lastNamePool = ['Иванов', 'Петров', 'Сидоров', 'Смирнов', 'Кузнецов', 'Попов'];
$patronymicPool = ['Иванович', 'Алексеевич', 'Дмитриевич', 'Сергеевич', 'Андреевич', 'Михайлович'];
$eyeColorPool = ['карий', 'голубой', 'зеленый', 'серый'];
$hairColorPool = ['черный', 'русый', 'рыжий', 'белый', 'каштановый'];
for ($i = 1; $i <= $count; $i++) {
$user = new CUser;
$email = self::DEFAULT_EMAIL_PREFIX . $i . '@example.com';
$userData = [
"NAME" => $namePool[array_rand($namePool)],
"LAST_NAME" => $lastNamePool[array_rand($lastNamePool)],
"SECOND_NAME" => $patronymicPool[array_rand($patronymicPool)],
"EMAIL" => $email,
"LOGIN" => $email,
"PASSWORD" => self::DEFAULT_PASSWORD,
"CONFIRM_PASSWORD" => self::DEFAULT_PASSWORD,
"GROUP_ID" => self::DEFAULT_GROUPS,
"ACTIVE" => "Y",
"UF_DEPARTMENT" => [rand(1, 5)], // Подразделения
"UF_HEIGHT" => rand(155, 195), // Рост в см
"UF_WEIGHT" => rand(50, 100), // Вес в кг
"UF_EYES_COLOR" => $eyeColorPool[array_rand($eyeColorPool)],
"UF_HAIR_COLOR" => $hairColorPool[array_rand($hairColorPool)],
"UF_EMPLOYEE_ID" => "ID" . str_pad($i, 6, '0', STR_PAD_LEFT),
"WORK_COMPANY" => "Тестовая компания",
"LID" => SITE_ID
];
$users[] = [
'object' => $user,
'data' => $userData
];
}
return $users;
}
/**
* Создает пользователей в системе
*
* @param array $users - массив пользователей
* @return array - результаты операции
*/
public static function createUsers(array $users): array
{
$results = [
'success' => 0,
'errors' => [],
'user_ids' => []
];
foreach ($users as $user) {
$userId = $user['object']->Add($user['data']);
if ($userId) {
$results['success']++;
$results['user_ids'][] = $userId;
} else {
$results['errors'][] = [
'email' => $user['data']['EMAIL'],
'message' => $user['object']->LAST_ERROR
];
}
}
return $results;
}
}
// ===== ИСПОЛЬЗОВАНИЕ =====
try {
// Генерация 15 тестовых пользователей
$users = UserFactory::generate(15);
// Создание пользователей в БД
$creationResults = UserFactory::createUsers($users);
// Вывод результатов
echo "<h2>Результаты генерации:</h2>";
echo "<p>Успешно создано: {$creationResults['success']} пользователей</p>";
if (!empty($creationResults['errors'])) {
echo "<h3>Ошибки:</h3>";
foreach ($creationResults['errors'] as $error) {
echo "<p>Пользователь {$error['email']}: {$error['message']}</p>";
}
}
echo "<h3>Созданные ID:</h3>";
echo "<pre>" . print_r($creationResults['user_ids'], true) . "</pre>";
} catch (Exception $e) {
echo "<div class='alert alert-danger'>Ошибка: " . $e->getMessage() . "</div>";
}
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php');
Ключевые особенности реализации:
-
Объектно-ориентированный подход
- Инкапсуляция логики в класс
UserFactory - Разделение генерации данных и создания записей
- Инкапсуляция логики в класс
-
Конфигурируемые параметры
const DEFAULT_USER_COUNT = 10; const DEFAULT_EMAIL_PREFIX = 'test_user_'; const DEFAULT_GROUPS = [2]; // Группа "Все пользователи" -
Расширенные пользовательские поля (UF)
"UF_HEIGHT" => rand(155, 195), // Рост в см "UF_WEIGHT" => rand(50, 100), // Вес в кг "UF_EYES_COLOR" => $eyeColorPool[array_rand($eyeColorPool)], "UF_EMPLOYEE_ID" => "ID" . str_pad($i, 6, '0', STR_PAD_LEFT), -
Комплексная обработка ошибок
- Поэлементный учет ошибок создания
- Структурированный вывод проблемных записей
- Глобальная обработка исключений
-
Безопасность
- Использование защищенного пароля по умолчанию
- Привязка к текущему сайту (
LID=> SITE_ID) - Административный контекст выполнения
Рекомендации по использованию:
-
Настройка параметров
// Пример кастомизации $customUsers = UserFactory::generate(5); foreach ($customUsers as &$user) { $user['data']['GROUP_ID'] = [2, 5]; // Назначение доп. групп $user['data']['UF_DEPARTMENT'] = [10]; // Конкретное подразделение } -
Расширение функционала
// Добавление кастомных полей public static function generate(int $count): array { // ... $userData['UF_CUSTOM_FIELD'] = self::generateCustomValue(); // ... } -
Интеграция с D7
use Bitrix\Main\UserTable; // ... UserTable::add([ 'LOGIN' => $email, 'EMAIL' => $email, // ... ]); -
Безопасное выполнение
- Запуск только через административный раздел
- Ограничение прав доступа
- Удаление после использования
Важные замечания:
-
Тестовые данные
- Скрипт генерирует только тестовых пользователей
- Не использовать в production без модификации
- Рекомендуется удалять пользователей после тестирования
-
Производительность
- Для генерации >100 пользователей используйте пакетную обработку
- Рассмотрите использование
CUser::Register()
-
Кастомизация
- Реализация поддерживает добавление любых стандартных полей
- Может быть расширена для работы с кастомными UF-полями
Данная реализация предоставляет гибкий инструмент для генерации тестовых пользователей в Bitrix, что особенно полезно при:
- Разработке модулей
- Тестировании прав доступа
- Наполнении демо-сайтов
- Отладке интеграций