- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
- Класс: CIMDisk
- Вызов: CIMDisk::UploadAvatar
static function UploadAvatar($hash, &$file, &$package, &$upload, &$error)
{
$post = BitrixMainContext::getCurrent()->getRequest()->getPostList()->toArray();
$chatId = (int)$post['CHAT_ID'];
if ($chatId <= 0)
{
return false;
}
$chat = IMModelChatTable::getById($chatId)->fetch();
if (!$chat)
{
return false;
}
$relationError = true;
$chatRelation = CIMChat::GetRelationById($chatId, false, true, false);
foreach ($chatRelation as $relation)
{
if ($relation["EXTERNAL_AUTH_ID"] == 'imconnector')
{
unset($chatRelation[$relation["USER_ID"]]);
continue;
}
if ($relation['USER_ID'] == self::GetUserId())
{
$relationError = false;
}
}
if ($relationError)
{
$error = Loc::getMessage('IM_DISK_ERR_AVATAR_1');
return false;
}
if ($chat['ENTITY_TYPE'] === 'ANNOUNCEMENT' && $chatRelation[self::GetUserId()]['MANAGER'] !== 'Y')
{
return false;
}
$file["files"]["default"]["MODULE_ID"] = "im";
$checkResponse = CFile::CheckImageFile($file["files"]["default"], (10*1024*1024), 5000, 5000);
if ($checkResponse !== null)
{
return false;
}
$fileId = CFile::saveFile($file["files"]["default"], self::MODULE_ID);
if ($fileId > 0)
{
if ($chat['AVATAR'] > 0)
{
CFile::DeLete($chat['AVATAR']);
}
IMModelChatTable::update($chatId, Array('AVATAR' => $fileId));
$file['chatId'] = $chatId;
$file['chatAvatar'] = CIMChat::GetAvatarImage($fileId);
if ($chat["ENTITY_TYPE"] != 'CALL')
{
CIMChat::AddSystemMessage(Array(
'CHAT_ID' => $chatId,
'USER_ID' => self::GetUserId(),
'MESSAGE_CODE' => 'IM_DISK_AVATAR_CHANGE_'
));
}
if (BitrixMainLoader::includeModule('pull'))
{
$pullMessage = Array(
'module_id' => 'im',
'command' => 'chatAvatar',
'params' => Array(
'chatId' => $chatId,
'avatar' => $file['chatAvatar'],
),
'extra' => BitrixImCommon::getPullExtra()
);
BitrixPullEvent::add(array_keys($chatRelation), $pullMessage);
if ($chat['TYPE'] == IM_MESSAGE_OPEN || $chat['TYPE'] == IM_MESSAGE_OPEN_LINE)
{
CPullWatch::AddToStack('IM_PUBLIC_'.$chat['ID'], $pullMessage);
}
}
}
else
{
return false;
}
return true;
}