• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
  • Класс: CIMDisk
  • Вызов: CIMDisk::UploadFileRegister
static function UploadFileRegister($chatId, $files, $text = '', $linesSilentMode = false)
{
	if ((int)$chatId <= 0 || empty($files))
	{
		return false;
	}

	$chatRelation = CIMChat::GetRelationById($chatId, false, true, false);
	if (!$chatRelation[self::GetUserId()])
	{
		return false;
	}

	$folderModel = self::GetFolderModel($chatId);
	if (!$folderModel)
	{
		return false;
	}

	$result = [];
	$result['FILE_ID'] = [];
	$messageFileId = [];
	$filesModels = [];
	foreach ($files as $fileId => $fileData)
	{
		if (!$fileData['mimeType'])
		{
			$fileData['mimeType'] = "binary";
		}
		if (!$fileData['name'])
		{
			continue;
		}
		$newFile = $folderModel->addBlankFile(Array(
			'NAME' => $fileData['name'],
			'SIZE' => $fileData['size'],
			'CREATED_BY' => self::GetUserId(),
			'MIME_TYPE' => $fileData['mimeType'],
		), Array(), true);
		if ($newFile)
		{
			$result['FILE_ID'][$fileId]['TMP_ID'] = $fileId;
			$result['FILE_ID'][$fileId]['FILE_ID'] = $newFile->getId();
			$result['FILE_ID'][$fileId]['FILE_NAME'] = $newFile->getName();
			$filesModels[] = $newFile;

			$messageFileId[] = $newFile->getId();
		}
		else
		{
			$result['FILE_ID'][$fileId]['TMP_ID'] = $fileId;
			$result['FILE_ID'][$fileId]['FILE_ID'] = 0;
		}
	}
	if (empty($messageFileId))
	{
		return false;
	}

	$result['MESSAGE_ID'] = 0;
	$arChat = CIMChat::GetChatData(Array('ID' => $chatId));
	$ar = Array(
		"TO_CHAT_ID" => $chatId,
		"FROM_USER_ID" => self::GetUserId(),
		"MESSAGE_TYPE" => $arChat['chat'][$chatId]['message_type'],
		"SILENT_CONNECTOR" => $linesSilentMode?'Y':'N',
		"PARAMS" => Array(
			'FILE_ID' => $messageFileId
		)
	);

	$text = trim($text);
	if ($text)
	{
		$ar['MESSAGE'] = $text;
	}
	$messageId = CIMMessage::Add($ar);
	if ($messageId)
	{
		$message = new BitrixImV2Message([
			'ID' => $messageId,
			'CHAT_ID' => $chatId,
			'AUTHOR_ID' => self::GetUserId()
		]);
		$message->setParams($ar['PARAMS'] ?? []);
		(new IMV2LinkFileFileService())->saveFilesFromMessage($filesModels, $message);
		$result['MESSAGE_ID'] = $messageId;
	}
	else
	{
		if ($e = $GLOBALS["APPLICATION"]->GetException())
		{
			$result['MESSAGE_ERROR'] = $e->GetString();
		}
	}

	return $result;
}