• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
  • Класс: CIMDisk
  • Вызов: CIMDisk::ChangeFolderMembers
static function ChangeFolderMembers($chatId, $userId, $append = true)
{
	$chatId = (int)$chatId;
	if (!is_array($userId))
	{
		$userIds = Array($userId);
	}
	else
	{
		$userIds = $userId;
	}
	if ($chatId <= 0 || empty($userIds))
	{
		return false;
	}

	$folderModel = self::getFolderModel($chatId, false);
	if (!$folderModel)
	{
		return false;
	}

	$resChat = IMModelChatTable::getById($chatId);
	if (!$chat = $resChat->fetch())
	{
		return false;
	}

	$accessProvider = new BitrixImAccessChatAuthProvider;

	if ($append)
	{
		$accessProvider->addChatCodes($chatId, $userIds);
		$result = true;
	}
	else
	{
		$accessProvider->deleteChatCodes($chatId, $userIds);

		// keep removing disk access codes `Uxxx` for previous access scheme
		$accessCodes = Array();
		if ($chat['TYPE'] == IM_MESSAGE_OPEN)
		{
			$users = CIMContactList::GetUserData(array(
				'ID' => array_values($userIds),
				'DEPARTMENT' => 'N',
				'SHOW_ONLINE' => 'N',
			));
			foreach ($users['users'] as $userData)
			{
				if ($userData['extranet'])
				{
					$accessCodes[] = 'U'.$userData['id'];
				}
			}
		}
		else
		{
			foreach ($userIds as $uid)
			{
				$uid = (int)$uid;
				if ($uid <= 0)
				{
					continue;
				}

				$accessCodes[] = 'U'.$uid;
			}
		}
		$driver = BitrixDiskDriver::getInstance();
		$rightsManager = $driver->getRightsManager();
		$result = $rightsManager->revokeByAccessCodes($folderModel, $accessCodes);
	}

	return $result;
}