• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
  • Класс: CIMDisk
  • Вызов: CIMDisk::UploadFile
static function UploadFile($hash, &$file, &$package, &$upload, &$error)
{
	$post = BitrixMainContext::getCurrent()->getRequest()->getPostList()->toArray();
	$post['PARAMS'] = CUtil::JsObjectToPhp($post['REG_PARAMS']);
	$post['PARAMS'] = BitrixMainTextEncoding::convertEncoding($post['PARAMS'], 'UTF-8', LANG_CHARSET);
	$post['MESSAGE_HIDDEN'] = $post['REG_MESSAGE_HIDDEN'] == 'Y'? 'Y': 'N';
	$post['PARAMS']['TEXT'] = $post['PARAMS']['TEXT']? trim($post['PARAMS']['TEXT']): '';

	$chatId = (int)$post['CHAT_ID'];
	if ($chatId <= 0)
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E100)';
		return false;
	}

	$chat = BitrixImChat::getById($chatId, ['CHECK_ACCESS' => 'Y']);
	if (!$chat)
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E101)';
		return false;
	}

	$chatRelation = CIMChat::GetRelationById($chatId, false, true, false);
	if (!$chatRelation[self::GetUserId()])
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E102)';
		return false;
	}

	if ($chat['ENTITY_TYPE'] === 'ANNOUNCEMENT' && $chatRelation[self::GetUserId()]['MANAGER'] !== 'Y')
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E103)';
		return false;
	}

	$folderModel = self::GetFolderModel($chatId);
	if (!$folderModel)
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E104)';
		return false;
	}

	if (!$file["files"]["default"])
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E106)';
		return false;
	}

	$fileModel = $folderModel->uploadFile(
		$file['files']['default'],
		[
			'NAME' => $file['name'],
			'CREATED_BY' => self::GetUserId()
		],
		[],
		true
	);

	if (!$fileModel || !$fileModel->getId())
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E107)';
		return false;
	}

	$fileTmpId = $file["id"];
	$messageTmpId = $file["regTmpMessageId"];
	$isMessageHidden = $file["regHiddenMessageId"] === 'Y';

	if (!$fileTmpId || !$messageTmpId)
	{
		$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E108)';
		return false;
	}
	$uploadRealResult = self::UploadFileFromDisk(
		$chatId,
		['upload'.$fileModel->getId()],
		$post['PARAMS']['TEXT'],
		[
			'LINES_SILENT_MODE' => $isMessageHidden,
			'TEMPLATE_ID' => $messageTmpId,
			'FILE_TEMPLATE_ID' => $fileTmpId
		]
	);

	if (!$uploadRealResult)
	{
		$error = '';
		if ($e = $GLOBALS["APPLICATION"]->GetException())
		{
			$error = $e->GetString();
		}
		if ($error == '')
		{
			$error = Loc::getMessage('IM_DISK_ERR_UPLOAD').' (E109)';
		}

		return false;
	}

	$fileModel = $folderModel->getChild(['ID' => $fileModel->getId()]);

	$file['fileParams'] = self::GetFileParams($chatId, $fileModel);
	$file['fileParams']['date'] = date('c', $file['fileParams']['date']->getTimestamp());

	foreach(GetModuleEvents("im", "OnAfterFileUpload", true) as $arEvent)
	{
		ExecuteModuleEventEx($arEvent, [[
			'CHAT_ID' => $chatId,
			'FILE_ID' => $fileModel->getId(),
			'MESSAGE_ID' => $uploadRealResult['MESSAGE_ID'],
			'MESSAGE_OUT' => $post['PARAMS']['TEXT'],
			'MESSAGE_HIDDEN' => $isMessageHidden,
			'FILE' => $file['fileParams'],
		]]);
	}

	return true;
}