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