партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Простой адаптивный форум - модуль для битрикс
В этой статье я покажу на примерах, как работать, т.е. получать информацию по группами пользователей, пользователям, привязкам пользователей к группам, используя 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()));

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью: