- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/update/workgroupdeptsync.php
- Класс: BitrixSocialnetworkUpdateWorkgroupDeptSync
- Вызов: WorkgroupDeptSync::getUsers
static function getUsers($workgroupId)
{
static $cache = [];
if (isset($cache[$workgroupId]))
{
return $cache[$workgroupId];
}
$result = [
'PLUS' => [],
'MINUS' => [],
'OLD_RELATIONS' => [],
];
if (
!Loader::includeModule('socialnetwork')
|| !Loader::includeModule('intranet')
)
{
return $result;
}
$newUserList = [];
$oldUserList = [];
$oldRelationList = [];
$groupItem = BitrixSocialnetworkItemWorkgroup::getById($workgroupId);
$groupFields = $groupItem->getFields();
if (
isset($groupFields['UF_SG_DEPT']['VALUE'])
&& !empty($groupFields['UF_SG_DEPT']['VALUE'])
)
{
$newDeptList = array_map('intval', $groupFields['UF_SG_DEPT']['VALUE']);
$res = CIntranetUtils::getDepartmentEmployees($newDeptList, true, false, 'Y', [ 'ID' ]);
while ($departmentMember = $res->fetch())
{
if ((int)$departmentMember['ID'] !== (int)$groupFields['OWNER_ID'])
{
$newUserList[] = (int)$departmentMember['ID'];
}
}
foreach ($newDeptList as $deptId)
{
$managerId = (int)CIntranetUtils::getDepartmentManagerId($deptId);
if ($managerId > 0)
{
$newUserList[] = $managerId;
}
}
}
$res = UserToGroupTable::getList([
'filter' => [
'=GROUP_ID' => (int) ($groupFields['ID'] ?? 0),
'@ROLE' => UserToGroupTable::getRolesMember(),
'=AUTO_MEMBER' => 'Y',
],
'select' => [ 'ID', 'USER_ID' ]
]);
while ($relation = $res->fetch())
{
$oldUserList[] = (int)$relation['USER_ID'];
$oldRelationList[$relation['USER_ID']] = $relation['ID'];
}
$membersList = [];
$res = UserToGroupTable::getList([
'filter' => [
'=GROUP_ID' => (int)$groupFields['ID'],
'@ROLE' => UserToGroupTable::getRolesMember(),
],
'select' => [ 'ID', 'USER_ID' ]
]);
while ($relation = $res->fetch())
{
$membersList[] = (int)$relation['USER_ID'];
}
$result = [
'PLUS' => array_diff($newUserList, $membersList),
'MINUS' => array_diff($oldUserList, $newUserList),
'OLD_RELATIONS' => $oldRelationList,
];
$cache[$workgroupId] = $result;
return $result;
}