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