• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/widget/chat.php
  • Класс: BitrixImopenlinesWidgetChat
  • Вызов: Chat::get
static function get($userId, $configId)
{
	global $USER, $APPLICATION;

	self::clearError();

	$orm = BitrixImModelChatTable::getList(array(
		'select' => ['ID', 'ENTITY_DATA_1', 'ENTITY_DATA_2', 'ENTITY_DATA_3'],
		'filter' => array(
			'=ENTITY_TYPE' => 'LIVECHAT',
			'=ENTITY_ID' => $configId.'|'.$userId
		),
		'limit' => 1
	));
	if($chat = $orm->fetch())
	{
		return $chat;
	}

	if ($userId == $USER->GetID())
	{
		$avatarId = $USER->GetParam('PERSONAL_PHOTO');
	}
	else
	{
		$user = BitrixMainUserTable::getById($userId)->fetch();
		if ($user)
		{
			$avatarId = $user['PERSONAL_PHOTO'];
		}
		else
		{
			self::setError(__METHOD__, 'USER_ERROR', Loc::getMessage('IMOL_WIDGET_CHAT_ERROR_USER_NOT_FOUND'));
			return false;
		}
	}

	$config = BitrixImopenlinesModelConfigTable::getById($configId)->fetch();
	if (!$config)
	{
		self::setError(__METHOD__, 'CONFIG_ERROR', Loc::getMessage('IMOL_WIDGET_CHAT_ERROR_CONFIG_NOT_FOUND'));
		return false;
	}

	$userName = BitrixImUser::getInstance($userId)->getFullName(false);
	$chatColorCode = BitrixImColor::getCodeByNumber($userId);
	if (BitrixImUser::getInstance($userId)->getGender() == 'M')
	{
		$replaceColor = BitrixImColor::getReplaceColors();
		if (isset($replaceColor[$chatColorCode]))
		{
			$chatColorCode = $replaceColor[$chatColorCode];
		}
	}

	$addChat['TITLE'] = Loc::getMessage('IMOL_WIDGET_CHAT_NAME', Array(
		"#USER_NAME#" => $userName,
		"#LINE_NAME#" => $config['LINE_NAME']
	));

	$addChat['TYPE'] = IM_MESSAGE_CHAT;
	$addChat['COLOR'] = $chatColorCode;
	$addChat['AVATAR_ID'] = $avatarId;
	$addChat['ENTITY_TYPE'] = 'LIVECHAT';
	$addChat['ENTITY_ID'] = $configId.'|'.$userId;
	$addChat['SKIP_ADD_MESSAGE'] = 'Y';
	$addChat['AUTHOR_ID'] = $userId;
	$addChat['USERS'] =[$userId];

	$chat = new CIMChat(0);
	$id = $chat->Add($addChat);
	if (!$id)
	{
		$errorCode = '';
		$errorMessage = '';

		if ($exception = $APPLICATION->GetException())
		{
			$errorCode = $exception->GetID();
			$errorMessage = $exception->GetString();
		}

		self::setError(__METHOD__, 'CHAT_ERROR', Loc::getMessage('IMOL_WIDGET_CHAT_ERROR_CREATE'), ['CODE' => $errorCode, 'MSG' => $errorMessage]);
		return false;
	}

	return [
		'ID' => $id,
		'ENTITY_DATA_1' => '',
		'ENTITY_DATA_2' => '',
		'ENTITY_DATA_3' => ''
	];
}