UserTable, GroupTable, UserGroupTable - uniqcle/Bitrix GitHub Wiki

\Bitrix\Main\UserTable

CSite::InGroup( array(4,5) ) //Проверяем состоит ли пользователь в группах

getList()

Вытаскиваем поля пользователя

$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);

\Bitrix\Main\UserFieldTable

Пользовательские поля

$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;
}

\Bitrix\Main\GroupTable

Выборка групп пользователей по фильтру с сортировкой.

$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
	}
}

\Bitrix\Main\UserGroupTable

getList();

// Получение групп пользователя 
$dbGroup = \Bitrix\Main\UserGroupTable::getList(array(
	'filter' => array("USER_ID" => 90)
));
$arGroup = $dbGroup->FetchAll();    

add()

Добавление пользователя в группу средствами класса "\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"),
));

update

есть ли у юзера $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')
   ));
}

delete()

// Удалить пользователя из группы  
\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/

Deprecated

CUser - класс для работы с пользователями.

User Events

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()
);?>
⚠️ **GitHub.com Fallback** ⚠️