- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/EntityChat.php
- Класс: BitrixImV2ChatEntityChat
- Вызов: EntityChat::add
public function add(array $params, ?Context $context = null): Result
{
$result = new Result;
$paramsResult = $this->prepareParams($params);
if ($paramsResult->isSuccess())
{
$params = $paramsResult->getResult();
}
else
{
return $result->addErrors($paramsResult->getErrors());
}
$chat = new static($params);
$chat->setExtranet($chat->checkIsExtranet());
$chat->save();
if (!$chat->getChatId())
{
return $result->addError(new ChatError(ChatError::CREATION_ERROR));
}
else
{
foreach ($chat->getUserIds() as $userId)
{
if ($chat->getAuthorId() == $userId)
{
$isManager = 'Y';
}
else
{
$isManager = in_array($userId, $params['MANAGERS']) ? 'Y' : 'N';
}
RelationTable::add([
'CHAT_ID' => $chat->getChatId(),
'MESSAGE_TYPE' => $chat->getType(),
'USER_ID' => $userId,
'STATUS' => IM_STATUS_READ,
'MANAGER' => $isManager,
]);
if (BitrixImV2EntityUserUser::getInstance($userId)->isBot())
{
BitrixImBot::changeChatMembers($chat->getChatId(), $userId);
BitrixImBot::onJoinChat('chat' . $chat->getChatId(), [
'CHAT_TYPE' => $chat->getType(),
'MESSAGE_TYPE' => $chat->getType(),
'BOT_ID' => $userId,
'USER_ID' => $params['USER_ID'],
'CHAT_AUTHOR_ID' => $chat->getAuthorId(),
'CHAT_ENTITY_TYPE' => $chat->getEntityType(),
'CHAT_ENTITY_ID' => $chat->getEntityId(),
'ACCESS_HISTORY' => true,
]);
}
}
}
$chat->addIndex();
$result->setResult([
'CHAT_ID' => $chat->getChatId(),
'CHAT' => $chat,
]);
return $result;
}