UserTable, GroupTable, UserGroupTable - uniqcle/Bitrix GitHub Wiki
-
\Bitrix\Main\UserTable
- класс для работы с пользователями. -
\Bitrix\Main\UserFieldTable
работа с пользовательскими полями -
\Bitrix\Main\GroupTable
работа с группами пользователей -
\Bitrix\Main\UserGroupTable
работа с привязкой группа - пользователь.
CSite::InGroup( array(4,5) ) //Проверяем состоит ли пользователь в группах
Вытаскиваем поля пользователя
$dbUser = \Bitrix\Main\UserTable::getList(array(
'select' => array('ID', 'NAME', 'PERSONAL_PHOTO', 'PERSONAL_WWW'),
'filter' => array('ID' => $USER->GetID())
));
if ($arUser = $dbUser->fetch()){
var_dump($arUser);
}
Получаем пользователя по ID
$dbUser = \Bitrix\Main\UserTable::getList(array(
'select' => array('ID', 'NAME', 'PERSONAL_PHOTO', 'PERSONAL_WWW'),
'filter' => array('ID' => $USER->GetID())
));
if ($arUser = $dbUser->fetch()){
print_r($arUser);
}
Получаем ID пользователя по EMAIL
use Bitrix\Main\UserTable;
$user = UserTable::getList([
'select' => array('ID'),
'filter' => array('EMAIL' => 'user@mail')
])->fetch();
echo $user['ID'];
//old
$cUser = $USER::GetList(
$by="ID",
$order="desc",
array(
'EMAIL' => 'user@mail'
),
array(
'SELECT' => array('ID')
)
)->fetch();
echo $cUser['ID'];
Выборка трех последних авторизовавшихся пользователей
$result = \Bitrix\Main\UserTable::getList(array(
'select' => array('ID','SHORT_NAME'), // выберем идентификатор и генерируемое (expression) поле SHORT_NAME
'order' => array('LAST_LOGIN'=>'DESC'), // все группы, кроме основной группы администраторов,
'limit' => 3
));
while ($arUser = $result->fetch()) {
print_r($arUser);
}
// Результаты могут включать "UF_" поля, но по умолчанию они не возвращаются, их надо специально указывать
$user = \Bitrix\Main\UserTable::getList(array(
'filter' => array('=ID' => $userId, ),
'limit'=>1,
'select'=>array('*','UF_TYPE'),
))->fetch();
// Выборка количества активных пользователей на сайте
echo \Bitrix\Main\UserTable::getActiveUsersCount();
//Получение массива идентификаторов активных групп пользователя
print_r(\Bitrix\Main\UserTable::getUserGroupIds($GLOBALS['USER']->GetID()));
Вытащить поля пользователя
$dbUser = \Bitrix\Main\UserTable::getList(array(
'select' => array('ID', 'NAME', 'PERSONAL_PHOTO', 'PERSONAL_WWW'),
'filter' => array('ID' => $USER->GetID())
));
if ($arUser = $dbUser->fetch()){
var_dump($arUser);
}
Аналогично вытаскиваем поля
// Получение всех полей
// Результаты могут включать "UF_" поля, но по умолчанию они не возвращаются, их надо специально указывать
$user = \Bitrix\Main\UserTable::getList(array(
'filter' => array('=ID' => 1, ),
'limit'=>1,
'select'=>array('ID', 'EMAIL', 'NAME', 'UF_DEBT'),
))->fetch();
debug($user);
Методы add и delete есть у всех классов кроме UserTable. Здесь используем методы класса CUser:
CUser::add(
'ID_Пользователя',
массив Полей
);
CUser::update(
'ID_Пользователя',
массив Полей
);
CUser::Delete(
'ID_Пользователя'
);
//Обновление полей
$user = new CUser;
$fields = Array(
"UF_DEBT" => "111",
);
$user->Update(1, $fields);
Пользовательские поля
$dbUserFields = \Bitrix\Main\UserFieldTable::getList(array(
'filter' => array('ENTITY_ID' => 'IBLOCK_'.$iblockId.'_SECTION')
));
while ($arUserField = $dbUserFields->fetch()) {
if ($arUserField["USER_TYPE_ID"] == 'enumeration') {
$dbEnums = CUserFieldEnum::GetList(
array(),
array('USER_FIELD_ID' => $arUserField['ID'])
);
while ($arEnum = $dbEnums->GetNext()) {
$arUserField['ENUMS'][$arEnum['XML_ID']] = $arEnum;
}
}
$arResult['USER_FIELDS'][$arUserField["FIELD_NAME"]] = $arUserField;
}
Выборка групп пользователей по фильтру с сортировкой.
$result = \Bitrix\Main\GroupTable::getList(array(
'order' => array('C_SORT'), // сортируем по параметру C_SORT (Сортировка)
'select' => array('NAME','ID','STRING_ID','C_SORT'), // выберем название, идентификатор, символьный код, сортировку
'filter' => array('!ID'=>'1') // все группы, кроме основной группы администраторов
));
while ($arGroup = $result->fetch()) {
print_r($arGroup);
}
Выбираем все активные группы текущего пользователя:
$result = \Bitrix\Main\UserGroupTable::getList(array(
'filter' => array('USER_ID'=>$GLOBALS["USER"]->GetID(),'GROUP.ACTIVE'=>'Y'),
'select' => array('GROUP_ID','GROUP_CODE'=>'GROUP.STRING_ID'), // выбираем идентификатор группы и символьный код группы
'order' => array('GROUP.C_SORT'=>'ASC'), // сортируем в соответствии с сортировкой групп
));
while ($arGroup = $result->fetch()) {
print_r($arGroup);
}
Выбираем всех активных пользователей группы:
$result = \Bitrix\Main\UserGroupTable::getList(array(
'filter' => array('GROUP_ID'=>12,'USER.ACTIVE'=>'Y'),
'select' => array('USER_ID','NAME'=>'USER.NAME','LAST_NAME'=>'USER.LAST_NAME'), // выбираем идентификатор п-ля, имя и фамилию
'order' => array('USER.ID'=>'DESC'), // сортируем по идентификатору пользователя
));
while ($arGroup = $result->fetch()) {
print_r($arGroup);
}
// Получение массива идентификаторов активных групп текущего пользователя
print_r(\Bitrix\Main\UserTable::getUserGroupIds($GLOBALS['USER']->GetID()));
// Выборка количества активных пользователей на сайте:
echo \Bitrix\Main\UserTable::getActiveUsersCount();
еще
Выборка групп пользователей по фильтру
$result = \Bitrix\Main\GroupTable::GetList( array(
'select' => array('NAME'),
'filter' => array('ID' => 1)
));
while($row = $result->fetch() ){
pre($row);
}
Проверить принадлежность пользователя к группе
Одним методом $USER->GetUserGroupArray()
получаем группы пользователя, а с помощью \Bitrix\Main\GroupTable::getList()
достаем ID группы по её символьному коду
global $USER;
$dbGroup = \Bitrix\Main\GroupTable::getList(array(
'filter' => array("STRING_ID" => 'LE_GROUP')
));
if ($arGroup = $dbGroup->Fetch()) {
if (in_array($arGroup['ID'], $USER->GetUserGroupArray())) {
// Пользователь в группе LE_GROUP
}
}
// Получение групп пользователя
$dbGroup = \Bitrix\Main\UserGroupTable::getList(array(
'filter' => array("USER_ID" => 90)
));
$arGroup = $dbGroup->FetchAll();
Добавление пользователя в группу средствами класса "\Bitrix\Main\UserGroupTable".
// Добавить пользователя в группу
\Bitrix\Main\UserGroupTable::add(array(
"USER_ID" => $order['USER_ID'],
"GROUP_ID" => 10,
));
Добавить пользователя с идентификатором 279 в группу с идентификатором 25 (при этом, если пользователь уже привязан к этой группе, то будет сгенерирована ошибка)
\Bitrix\Main\UserGroupTable::add(array(
'USER_ID' => 279,
'GROUP_ID' => 25,
));
Добавить пользователя с идентификатором 279 в группу с идентификатором 26 с учетом периода пребывания в группе (при этом, если пользователь уже привязан к этой группе, то будет сгенерирована ошибка):
\Bitrix\Main\UserGroupTable::add(array(
'USER_ID' => 279,
'GROUP_ID' => 26,
'DATE_ACTIVE_FROM' => new \Bitrix\Main\Type\DateTime("2018-05-20 12:00:00", "Y-m-d H:i:s"),
'DATE_ACTIVE_TO' => new \Bitrix\Main\Type\DateTime("2018-06-20 12:00:00", "Y-m-d H:i:s"),
));
есть ли у юзера $uid уже группа $targetGroup. И если есть, то продляем ее значение на $month месяцев. Если такой группы нет вообще, добавляем.
//апдейт группы по времени, или добавление новой привязки
$res = \Bitrix\Main\UserGroupTable::getList(array('filter' => array('USER_ID' => $uid, 'GROUP_ID' => $targetGroup)));
if ($row = $res->fetch()) {
if ($row['DATE_ACTIVE_TO'] == '') {
$row['DATE_ACTIVE_TO'] = new \Bitrix\Main\Type\DateTime;
}
\Bitrix\Main\UserGroupTable::update(array('GROUP_ID' => $targetGroup, 'USER_ID' => $uid),
array('DATE_ACTIVE_TO' => $row['DATE_ACTIVE_TO']->add('+'.$month.' month')));
} else {
$date = new \Bitrix\Main\Type\DateTime;
\Bitrix\Main\UserGroupTable::add(array(
'USER_ID' => $uid,
'GROUP_ID' => $targetGroup,
'DATE_ACTIVE_TO' => $date->add('+'.$month.' month')
));
}
// Удалить пользователя из группы
\Bitrix\Main\UserGroupTable::delete(array(
"USER_ID" => $order['USER_ID'],
"GROUP_ID" => 10,
) );
https://estrin.pw/bitrix-d7-snippets/users/
https://g-rain-design.ru/blog/posts/d7-orm-user-group/
https://dev.1c-bitrix.ru/community/webdev/user/55997/blog/12985/
https://blog.budagov.ru/yadro-d7-primery-dokumentatsiya/
https://blog.d-it.ru/dev/work-with-user-groups-on-d7-bitrix/
CUser - класс для работы с пользователями.
Add()
, Update
, Delete
...
Deprecated Methods
// ВАЖНО! Данные текущего пользователя
global $USER;
// Получим массив групп пользователя ID=12
$arGroups = CUser::GetUserGroup(12);
pre($arGroups);
// Получим массив групп текущего пользователя
$arGroups = $USER->GetUserGroupArray();
pre($arGroups);
// Все дополнительные поля
// нет специального метода для получения таких полей как личная информация и рабочая информация, поэтому все через GetList:
$by = "ID";
$order = "ASC";
$rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("ID"=>$USER->GetID()),array("SELECT"=>array("UF_*"));
if ($arUser = $rsUser->Fetch())
pre($arUser);
// Обновление данных пользователя
$user = new CUser;
$fields = Array(
"NAME" => "Сергей",
"LAST_NAME" => "Иванов",
"EMAIL" => "[email protected]";,"> [email protected]",
"LOGIN" => "ivan",
"LID" => "ru",
"ACTIVE" => "Y",
"GROUP_ID" => array(1,2),
"PASSWORD" => "123456",
"CONFIRM_PASSWORD" => "123456",
"UF_SHOP" => array(11,12,13),
);
$user->Update($ID, $fields);
$strError .= $user->LAST_ERROR;
// Фото пользователя
CFile::GetPath($arUser['PERSONAL_PHOTO'])
// Авторизован ли пользователь
if ($USER->IsAuthorized()) echo "Вы авторизованы!";
// Принудительно авторизуемся под админом:
$USER->Authorize(1);
// Если пользователь админ
if ($USER->IsAdmin()){
// действие
}
// Принудительно разлогинемся
$USER->Logout();
$USER->ChangePassword("admin", "WRD45GT", "123456", "123456"); //логин, контрольная строка, новый пароль, подтверждение
// Восстановление пароля
<?$APPLICATION->IncludeComponent( "bitrix:system.auth.forgotpasswd",
".default",
Array()
);?>