В этой статье я покажу на примерах, как работать, т.е. получать информацию по группами пользователей, пользователям, привязкам пользователей к группам, используя d7 и ORM.
Выборка групп пользователей
$result = \Bitrix\Main\GroupTable::getList(array(
'select' => array('NAME','ID','STRING_ID','C_SORT'), // выберем название, идентификатор, символьный код, сортировку
'filter' => array('!ID'=>'1') // все группы, кроме основной группы администраторов
));
while ($arGroup = $result->fetch()) {
print_r($arGroup);
}
|
Выборка принадлежностей пользователей к группам
Класс \Bitrix\Main\UserGroupTable можно использовать как для выборки всех групп пользователя, так и для выборки всех пользователей группы. Т.к. ORM позволяет выбрать любые поля как пользователя, так и группы, то дополнительных запросов не потребуется.
Выбираем все активные группы текущего пользователя:
$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);
}
|
Также можно выбирать активные группы пользователя и с помощью \Bitrix\Main\GroupTable (этот вариант навеян исходным кодом функции UserTable::getUserGroupIds, кстати, интересный пример использования возможностей ORM). Этот код учитывает временные рамки нахождения пользователя в группе.
$nowTimeExpression = new \Bitrix\Main\DB\SqlExpression(
\Bitrix\Main\UserTable::getEntity()->getConnection()->getSqlHelper()->getCurrentDateTimeFunction()
);
$result = \Bitrix\Main\GroupTable::getList(array(
'select' => array('ID','STRING_ID'),
'filter' => array(
'=UserGroup:GROUP.USER_ID' => $GLOBALS["USER"]->GetID(),
'=ACTIVE' => 'Y',
array(
'LOGIC' => 'OR',
'=UserGroup:GROUP.DATE_ACTIVE_FROM' => null,
'<=UserGroup:GROUP.DATE_ACTIVE_FROM' => $nowTimeExpression,
),
array(
'LOGIC' => 'OR',
'=UserGroup:GROUP.DATE_ACTIVE_TO' => null,
'>=UserGroup:GROUP.DATE_ACTIVE_TO' => $nowTimeExpression,
),
array(
'LOGIC' => 'OR',
'!=ANONYMOUS' => 'Y',
'=ANONYMOUS' => null
)
)
));
while($arGroup=$result->fetch())
{
print_r($arGroup);
}
|
Выборка пользователей и информации о них
Выборка трех последних авторизовавшихся пользователей
$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);
}
|
Выборка количества активных пользователей на сайте
echo \Bitrix\Main\UserTable::getActiveUsersCount();
|
Получение массива идентификаторов активных групп пользователя
print_r(\Bitrix\Main\UserTable::getUserGroupIds($GLOBALS['USER']->GetID()));
|
14.09.201701:1514.09.2017 01:15:29