- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_message.php
- Класс: CIMMessage
- Вызов: CIMMessage::GetChatId
static function GetChatId($fromUserId, $toUserId, $createIfNotExists = true)
{
global $DB;
$chatId = 0;
$fromUserId = intval($fromUserId);
$toUserId = intval($toUserId);
if (intval($fromUserId) <= 0 || intval($toUserId) <= 0)
{
return $chatId;
}
if ($fromUserId == $toUserId)
{
$chat = new CIMChat();
$chatId = $chat->GetPersonalChat($fromUserId);
if (!$chatId)
{
return 0;
}
return $chatId;
}
$strSql = "
SELECT RF.CHAT_ID
FROM
b_im_chat C,
b_im_relation RF,
b_im_relation RT
WHERE
C.ID = RT.CHAT_ID
and C.TYPE = '".IM_MESSAGE_PRIVATE."'
and RF.USER_ID = ".$fromUserId."
and RT.USER_ID = ".$toUserId."
and RF.MESSAGE_TYPE = '".IM_MESSAGE_PRIVATE."'
and RT.MESSAGE_TYPE = '".IM_MESSAGE_PRIVATE."'
and RF.CHAT_ID = RT.CHAT_ID
";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
{
$chatId = intval($arRes['CHAT_ID']);
}
if ($chatId <= 0)
{
if (!$createIfNotExists)
{
return 0;
}
if (!BitrixImDialog::hasAccess($fromUserId, $toUserId))
{
return 0;
}
$result = BitrixImModelChatTable::add(Array('TYPE' => IM_MESSAGE_PRIVATE, 'AUTHOR_ID' => $fromUserId));
$chatId = $result->getId();
if ($chatId > 0)
{
BitrixImModelRelationTable::add(array(
"CHAT_ID" => $chatId,
"MESSAGE_TYPE" => IM_MESSAGE_PRIVATE,
"USER_ID" => $fromUserId,
//"STATUS" => IM_STATUS_READ,
));
BitrixImModelRelationTable::add(array(
"CHAT_ID" => $chatId,
"MESSAGE_TYPE" => IM_MESSAGE_PRIVATE,
"USER_ID" => $toUserId,
//"STATUS" => IM_STATUS_READ,
));
$botJoinFields = Array(
"CHAT_TYPE" => IM_MESSAGE_PRIVATE,
"MESSAGE_TYPE" => IM_MESSAGE_PRIVATE
);
if (BitrixImUser::getInstance($fromUserId)->isExists() && !BitrixImUser::getInstance($fromUserId)->isBot())
{
$botJoinFields['BOT_ID'] = $toUserId;
$botJoinFields['USER_ID'] = $fromUserId;
$botJoinFields['TO_USER_ID'] = $toUserId;
$botJoinFields['FROM_USER_ID'] = $fromUserId;
BitrixImBot::onJoinChat($fromUserId, $botJoinFields);
}
else if (BitrixImUser::getInstance($toUserId)->isExists() && !BitrixImUser::getInstance($toUserId)->isBot())
{
$botJoinFields['BOT_ID'] = $fromUserId;
$botJoinFields['USER_ID'] = $toUserId;
$botJoinFields['TO_USER_ID'] = $toUserId;
$botJoinFields['FROM_USER_ID'] = $fromUserId;
BitrixImBot::onJoinChat($toUserId, $botJoinFields);
}
}
}
return $chatId;
}