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