• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/rest.php
  • Класс: CSocNetLogRestService
  • Вызов: CSocNetLogRestService::addGroupUsers
static function addGroupUsers($arFields): array
{
	$groupId = $arFields['GROUP_ID'] ?? null;
	$userIdList = $arFields['USER_ID'] ?? null;

	if ((int)$groupId <= 0)
	{
		throw new ArgumentException('Wrong group ID');
	}

	if (!self::isCurrentUserAdmin())
	{
		throw new AccessDeniedException('No permissions to add users');
	}

	if (
		(!is_array($userIdList) && (int)$userIdList <= 0)
		|| (is_array($userIdList) && count($userIdList) <= 0)
	)
	{
		throw new ArgumentException('Wrong user IDs');
	}

	if (!is_array($userIdList))
	{
		$userIdList = [ $userIdList ];
	}

	$res = CSocNetGroup::getList(array(), array(
		"ID" => $groupId
	));
	$groupFields = $res->fetch();
	if (!is_array($groupFields))
	{
		throw new ObjectNotFoundException('Socialnetwork group not found');
	}

	if (
		!empty($userIdList)
		&& Loader::includeModule('intranet')
	)
	{
		$extranetSiteId = self::getExtranetSiteId();

		$res = BitrixIntranetUserTable::getList([
			'filter' => [
				'@ID' => $userIdList
			],
			'select' => [ 'ID', 'USER_TYPE' ]
		]);
		$userIdList = [];
		while ($userFields = $res->fetch())
		{
			if (!in_array($userFields['USER_TYPE'], [ 'employee', 'extranet' ]))
			{
				continue;
			}
			$userIdList[] = $userFields['ID'];

			if (
				$userFields['USER_TYPE'] === 'extranet'
				&& $extranetSiteId
			)
			{
				$groupSiteList = [];
				$resSite = BitrixSocialnetworkWorkgroupSiteTable::getList([
					'filter' => [
						'=GROUP_ID' => $groupId
					],
					'select' => [ 'SITE_ID' ]
				]);
				while ($groupSite = $resSite->fetch())
				{
					$groupSiteList[] = $groupSite['SITE_ID'];
				}
				if (!in_array($extranetSiteId, $groupSiteList, true))
				{
					$groupSiteList[] = $extranetSiteId;
					CSocNetGroup::update($groupId, [
						'SITE_ID' => $groupSiteList
					]);
				}
			}
		}
	}

	$successUserId = [];

	foreach ($userIdList as $userId)
	{
		$user2groupRelation = CSocNetUserToGroup::getUserRole($userId, $groupId);
		if ($user2groupRelation)
		{
			continue;
		}

		if (CSocNetUserToGroup::add([
			"USER_ID" => $userId,
			"GROUP_ID" => $groupId,
			"ROLE" => UserToGroupTable::ROLE_USER,
			"=DATE_CREATE" => CDatabase::currentTimeFunction(),
			"=DATE_UPDATE" => CDatabase::currentTimeFunction(),
			"MESSAGE" => '',
			"INITIATED_BY_TYPE" => UserToGroupTable::INITIATED_BY_GROUP,
			"INITIATED_BY_USER_ID" => $groupFields['OWNER_ID']
		]))
		{
			$successUserId[] = $userId;

			UserToGroup::addInfoToChat([
				'group_id' => $groupId,
				'user_id' => $userId,
				'action' => UserToGroup::CHAT_ACTION_IN,
				'role' => UserToGroupTable::ROLE_USER
			]);
		}
	}

	return $successUserId;
}