- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
- Класс: CIMDisk
- Вызов: CIMDisk::GetFolderModel
static function GetFolderModel($chatId, $createFolder = true)
{
if (!self::Enabled())
{
return false;
}
if ((int)$chatId <= 0)
{
return false;
}
$folderModel = false;
$result = IMModelChatTable::getById($chatId);
if (!$chat = $result->fetch())
{
return false;
}
if (in_array($chat['TYPE'], [IMV2Chat::IM_TYPE_COMMENT], true))
{
return false;
}
$folderId = (int)$chat['DISK_FOLDER_ID'];
if ($folderId > 0)
{
$folderModel = BitrixDiskFolder::getById($folderId);
if (
!$folderModel
|| !($folderModel instanceof BitrixDiskFolder)
|| ($folderModel->getStorageId() != self::GetStorageId())
)
{
$folderId = 0;
}
}
if (!$folderId && $createFolder === true)
{
$chatType = $chat['TYPE'];
$driver = BitrixDiskDriver::getInstance();
$storageModel = self::GetStorage();
if (!$storageModel)
{
return false;
}
$accessProvider = new BitrixImAccessChatAuthProvider;
$rightsManager = $driver->getRightsManager();
$accessCodes = [];
// allow for access code `CHATxxx`
$accessCodes[] = [
'ACCESS_CODE' => $accessProvider->generateAccessCode($chatId),
'TASK_ID' => $rightsManager->getTaskIdByName($rightsManager::TASK_EDIT)
];
if ($chatType === IMV2Chat::IM_TYPE_OPEN)
{
// allow reading for top department, access code `DRxxx`
$departmentCode = self::GetTopDepartmentCode();
if ($departmentCode)
{
$accessCodes[] = Array(
'ACCESS_CODE' => $departmentCode,
'TASK_ID' => $rightsManager->getTaskIdByName($rightsManager::TASK_READ)
);
}
}
$folderModel = $storageModel->addFolder(
[
'NAME' => 'chat'.$chatId,
'CREATED_BY' => self::GetUserId()
],
$accessCodes,
true
);
if ($folderModel)
{
IMModelChatTable::update($chatId, ['DISK_FOLDER_ID' => $folderModel->getId()]);
$accessProvider->updateChatCodesByRelations($chatId);
}
}
return $folderModel;
}