- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
- Класс: CIMDisk
- Вызов: CIMDisk::SaveFromLocalDisk
static function SaveFromLocalDisk($chatId, $fileId, bool $symlink = false, ?int $userId = null)
{
if (!self::Enabled())
{
return false;
}
if ((int)$fileId <= 0 || (int)$chatId <= 0)
{
return false;
}
$fileModel = BitrixDiskFile::getById($fileId, array('STORAGE'));
if (!$fileModel)
{
return false;
}
if ($fileModel instanceof BitrixDiskFileLink)
{
$fileModel = $fileModel->getRealObject();
if (!$fileModel)
{
return false;
}
}
$storageModel = $fileModel->getStorage();
if (!$storageModel)
{
return false;
}
$securityContext = null;
if (is_null($userId))
{
$securityContext = $storageModel->getCurrentUserSecurityContext();
}
else if ($userId > 0)
{
$securityContext = $storageModel->getSecurityContext($userId);
}
if ($securityContext && !$fileModel->canRead($securityContext))
{
return false;
}
$folderModel = self::GetFolderModel($chatId);
if (!$folderModel)
{
return false;
}
if ($symlink)
{
$accessProvider = new BitrixImAccessChatAuthProvider;
$rightsManager = BitrixDiskDriver::getInstance()->getRightsManager();
$rightsManager->append(
$fileModel,
[[
// allow reading for access code `CHATxxx`
'ACCESS_CODE' => $accessProvider->generateAccessCode($chatId),
'TASK_ID' => $rightsManager->getTaskIdByName($rightsManager::TASK_READ)
]]
);
$newFileModel = $folderModel->addFileLink(
$fileModel,
[
'CREATED_BY' => (int)$userId,
'GLOBAL_CONTENT_VERSION' => 1
],
[],// link inherits access rights from parent folder
true
);
}
else
{
$newFileModel = $fileModel->copyTo($folderModel, (int)$userId, true);
}
if (!$newFileModel)
{
return false;
}
$newFileModel->increaseGlobalContentVersion();
return $newFileModel;
}