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