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