• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_share.php
  • Класс: CIMShare
  • Вызов: CIMShare::Chat
public function Chat($messageId)
{
	$CIMMessage = new CIMMessage($this->user_id);
	$message = $CIMMessage->GetMessage($messageId, true);
	if (!$message)
		return false;

	$parentChatId = $message['CHAT_ID'];

	$joinUsers = Array($this->user_id);
	if (!BitrixImUser::getInstance($message['AUTHOR_ID'])->isExtranet())
	{
		$joinUsers[] = (int)$message['AUTHOR_ID'];
	}

	$chat = new CIMChat($this->user_id);
	$chatId = $chat->Add(Array(
		'USERS' => $joinUsers,
		'ENTITY_TYPE' => 'THREAD',
		'SKIP_ADD_MESSAGE' => 'Y',
	));

	$parentMessageId = $this->SendMessage('', GetMessage('IM_SHARE_CHAT_CHAT'), $message, array(
		'CHAT_ID' => $chatId,
		'CHAT_MESSAGE' => 1,
		'CHAT_LAST_DATE' => new BitrixMainTypeDateTime(),
		'CHAT_USER' => array_unique($joinUsers),
	));

	$sendMessage = '';
	if ($message['MESSAGE'])
	{
		$sendMessage .= $message['MESSAGE']."n";
	}

	$files = CIMMessageParam::Get($messageId, 'FILE_ID');
	if (!empty($files))
	{
		foreach ($files as $fileId)
		{
			$sendMessage .= " [DISK={$fileId}]";
		}
	}

	if ($message['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE)
	{
		$dialogId = $this->user_id;
		$relations = BitrixImChat::getRelation($parentChatId, ['WITHOUT_COUNTERS' => 'Y']);
		foreach ($relations as $relation)
		{
			if ($relation['USER_ID'] != $this->user_id)
			{
				$dialogId = $relation['USER_ID'];
			}
		}
		$chatLink = '[USER='.$dialogId.']'.BitrixImUser::getInstance($dialogId)->getFullName(false)."[/USER]";
	}
	else
	{
		$chatLink = '[CHAT='.$parentChatId.']'.$message['CHAT_TITLE']."[/CHAT]";
	}

	$message['MESSAGE'] = trim($sendMessage);
	$message['MESSAGE_TYPE'] = IM_MESSAGE_CHAT;
	$message['CHAT_ID'] = $chatId;

	$noticeMessage = GetMessage('IM_SHARE_CHAT_CHAT_WELCOME', Array(
		'#CHAT#' => $chatLink
	));
	$pinMessageId = $this->SendMessage('', $noticeMessage, $message);

	BitrixImModelChatTable::update($chatId, Array(
		'PARENT_ID' => $parentChatId,
		'PARENT_MID' => $parentMessageId,
		'PIN_MESSAGE_ID' => $pinMessageId,
	));

	return true;
}