• Модуль: 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;
}