- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/PrivateChat.php
- Класс: BitrixImV2ChatPrivateChat
- Вызов: PrivateChat::add
public function add(array $params, ?Context $context = null): Result
{
$result = new Result;
$paramsResult = $this->prepareParams($params);
if (!$paramsResult->isSuccess())
{
return $result->addErrors($paramsResult->getErrors());
}
$params = $paramsResult->getResult();
if (!BitrixImDialog::hasAccess($params['FROM_USER_ID'], $params['TO_USER_ID']))
{
return $result->addError(new ChatError(ChatError::ACCESS_DENIED));
}
if ($params['FROM_USER_ID'] == $params['TO_USER_ID'])
{
return (new FavoriteChat($params))->add($params);
}
$chatResult = self::find($params);
if ($chatResult->isSuccess() && $chatResult->hasResult())
{
$chatParams = $chatResult->getResult();
return $result->setResult([
'CHAT_ID' => (int)$chatParams['ID'],
'CHAT' => self::load($chatParams),
]);
}
$chat = new static($params);
$chat->save();
if ($chat->getChatId() <= 0)
{
return $result->addError(new ChatError(ChatError::CREATION_ERROR));
}
BitrixImModelRelationTable::add([
'CHAT_ID' => $chat->getChatId(),
'MESSAGE_TYPE' => IM_MESSAGE_PRIVATE,
'USER_ID' => $params['FROM_USER_ID'],
'STATUS' => IM_STATUS_READ,
]);
BitrixImModelRelationTable::add([
'CHAT_ID' => $chat->getChatId(),
'MESSAGE_TYPE' => IM_MESSAGE_PRIVATE,
'USER_ID' => $params['TO_USER_ID'],
'STATUS' => IM_STATUS_READ,
]);
$botJoinFields = [
'CHAT_TYPE' => IM_MESSAGE_PRIVATE,
'MESSAGE_TYPE' => IM_MESSAGE_PRIVATE
];
if (
User::getInstance($params['FROM_USER_ID'])->isExists()
&& !User::getInstance($params['FROM_USER_ID'])->isBot()
)
{
$botJoinFields['BOT_ID'] = $params['TO_USER_ID'];
$botJoinFields['USER_ID'] = $params['FROM_USER_ID'];
$botJoinFields['TO_USER_ID'] = $params['TO_USER_ID'];
$botJoinFields['FROM_USER_ID'] = $params['FROM_USER_ID'];
BitrixImBot::onJoinChat($params['FROM_USER_ID'], $botJoinFields);
}
elseif (
User::getInstance($params['TO_USER_ID'])->isExists()
&& !User::getInstance($params['TO_USER_ID'])->isBot()
)
{
$botJoinFields['BOT_ID'] = $params['FROM_USER_ID'];
$botJoinFields['USER_ID'] = $params['TO_USER_ID'];
$botJoinFields['TO_USER_ID'] = $params['TO_USER_ID'];
$botJoinFields['FROM_USER_ID'] = $params['FROM_USER_ID'];
BitrixImBot::onJoinChat($params['TO_USER_ID'], $botJoinFields);
}
return $result->setResult([
'CHAT_ID' => $chat->getChatId(),
'CHAT' => $chat,
]);
}