- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
- Класс: CIMDisk
- Вызов: CIMDisk::RecordShare
static function RecordShare(int $chatId, int $fileId, ?int $userId = null): bool
{
if (!self::Enabled())
{
return false;
}
if ($chatId <= 0 || $fileId <= 0)
{
return false;
}
$chat = BitrixImModelChatTable::getByPrimary($chatId, [
'select' => ['TITLE', 'ENTITY_TYPE', 'ENTITY_ID']
])->fetch();
if (!$chat)
{
return false;
}
if (!CIMChat::GetRelationById($chatId, $userId, true, false))
{
return false;
}
$fileModel = BitrixDiskFile::getById($fileId, array('STORAGE'));
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;
}
self::UploadFileFromDisk($chatId, ['disk'.$fileId], '', ['SYMLINK' => true]);
if (!empty($chat['ENTITY_TYPE']) && !empty($chat['ENTITY_ID']))
{
$event = new BitrixMainEvent('im', 'onDiskRecordShare', [
'DISK_ID' => $fileId,
'CHAT' => [
'ID' => $chatId,
'TITLE' => $chat['TITLE'],
'ENTITY_TYPE' => $chat['ENTITY_TYPE'],
'ENTITY_ID' => $chat['ENTITY_ID']
],
'USER_ID' => $userId,
]);
$event->send();
}
return true;
}