3namespace Bitrix\Im\V2\Chat;
5use Bitrix\Im\Model\RelationTable;
6use Bitrix\Im\Model\RecentTable;
10use Bitrix\Im\V2\Call\CallToken;
12use Bitrix\Im\V2\Entity\User\NullUser;
13use Bitrix\Im\V2\Entity\User\UserBot;
14use Bitrix\Im\V2\Entity\User\UserPopupItem;
15use Bitrix\Im\V2\Message;
16use Bitrix\Im\V2\Message\Send\PushService;
17use Bitrix\Im\V2\Message\Send\SendingConfig;
18use Bitrix\Im\V2\MessageCollection;
19use Bitrix\Im\V2\Relation;
20use Bitrix\Im\V2\Relation\AddUsersConfig;
21use Bitrix\Im\V2\Rest\PopupData;
22use Bitrix\Im\V2\Rest\PopupDataAggregatable;
23use Bitrix\Im\V2\Result;
24use Bitrix\Im\V2\Service\Context;
25use Bitrix\Im\V2\Service\Locator;
26use Bitrix\ImBot\Bot\Network;
27use Bitrix\Main\Loader;
28use Bitrix\Main\Localization\Loc;
29use Bitrix\Main\Type\DateTime;
39 return self::IM_TYPE_PRIVATE;
44 parent::setDialogId($dialogId);
45 $this->dialogIdCache[$this->getContext()->getUserId()] = $dialogId;
91 return Chat::MANAGE_RIGHTS_MEMBER;
94 public function getDialogId(?
int $contextUserId =
null): ?string
96 $userId = $contextUserId ?? $this->getContext()->getUserId();
97 if (!isset($this->dialogIdCache[
$userId]))
102 return $this->dialogIdCache[
$userId];
107 return $this->dialogId !==
null;
112 return $this->
getDialogId() .
':' .$this->getContext()->getUserId();
122 if (!Loader::includeModule(
'imbot'))
129 foreach ($this->getRelations() as $relation)
131 $user = $relation->getUser();
138 $botType =
$user->getBotData()->toRestFormat()[
'type'] ??
null;
139 if ($botType ===
'support24' || $botType ===
'network')
152 return Network::getBotAsMultidialog($bot->getId(), $otherUser->getId());
158 if (in_array($companionId, $userIds,
true))
160 return [$companionId => $companionId];
172 $message->setAuthorId($this->getContext()->getUserId());
176 ->setNotifyModule(
'im')
197 $relations = $this->getRelations();
199 if (!$relations->hasUser(
$userId, $this->getChatId()))
204 foreach ($relations as $relation)
206 if ($relation->getUserId() !==
$userId)
208 return $relation->getUser();
223 return $this->getRelations()->getUserIds();
248 RecentTable::merge($item, $item, [
'USER_ID',
'ITEM_TYPE',
'ITEM_ID']);
254 return Loc::getMessage(
255 'IM_PRIVATE_CHAT_TITLE',
259 '#CHAT_MEMBER_NAME_2#' => $this->
getCompanion()->getName(),
272 $push = $pushFormat->formatMessageUpdate();
273 $authorId =
$message->getAuthorId();
276 $push[
'params'][
'dialogId'] = $authorId;
277 $push[
'params'][
'fromUserId'] = $authorId;
278 $push[
'params'][
'toUserId'] = $opponentId;
279 Event::add($opponentId, $push);
281 $push[
'params'][
'dialogId'] = $opponentId;
282 $push[
'params'][
'fromUserId'] = $opponentId;
283 $push[
'params'][
'toUserId'] = $authorId;
284 Event::add($authorId, $push);
297 'command' =>
'readMessage',
299 'dialogId' => $companionId,
300 'chatId' => $this->getChatId(),
301 'senderId' => $this->getContext()->getUserId(),
302 'id' => (
int)$companionId,
303 'userId' => (
int)$companionId,
308 'viewedMessages' => $messages->
getIds(),
309 'counterType' => $this->getCounterType()->value,
310 'recentConfig' => $this->getRecentConfig()->toPullFormat(),
321 'command' =>
'readMessageOpponent',
324 'dialogId' => $this->getContext()->getUserId(),
325 'chatId' => $this->getChatId(),
326 'userId' => $this->getContext()->getUserId(),
327 'userName' =>
User::getInstance($this->getContext()->getUserId())->getFullName(
false),
329 'date' => (
new DateTime())->format(
'c'),
330 'chatMessageStatus' => $this->getReadService()->getChatMessageStatus($this->getChatId()),
346 'CHAT_ID' => $this->getChatId(),
347 'CHAT_ENTITY_TYPE' =>
'USER',
348 'CHAT_ENTITY_ID' =>
'',
349 'START_ID' => $startId,
352 'USER_ID' => $this->getContext()->getUserId(),
353 'BY_EVENT' => $byEvent
378 $chatId = (int)
$params[
'CHAT_ID'];
379 $relations = \CIMChat::getRelationById($chatId,
false,
true,
false);
382 foreach ($relations as $rel)
386 && $rel[
'USER_ID'] ==
$params[
'FROM_USER_ID']
392 $params[
'TO_USER_ID'] = (int)$rel[
'USER_ID'];
396 if (empty(
$params[
'FROM_USER_ID']))
405 if (
$params[
'FROM_USER_ID'] <= 0)
409 if (
$params[
'TO_USER_ID'] <= 0)
425 AND RF.CHAT_ID = RT.CHAT_ID
426 AND C.TYPE = '" . self::IM_TYPE_PRIVATE .
"'
427 AND RF.USER_ID = " .
$params[
'FROM_USER_ID'] .
"
428 AND RT.USER_ID = " .
$params[
'TO_USER_ID'] .
"
429 AND RF.MESSAGE_TYPE = '" . self::IM_TYPE_PRIVATE .
"'
430 AND RT.MESSAGE_TYPE = '" . self::IM_TYPE_PRIVATE .
"'
432 if ($row =
$res->fetch())
435 'ID' => (
int)$row[
'ID'],
436 'TYPE' => $row[
'TYPE'],
437 'ENTITY_TYPE' => $row[
'ENTITY_TYPE'],
438 'ENTITY_ID' => $row[
'ENTITY_ID'],
450 if (!$paramsResult->isSuccess())
452 return $result->addErrors($paramsResult->getErrors());
455 $params = $paramsResult->getResult();
468 if ($chatResult->isSuccess() && $chatResult->hasResult())
470 $chatParams = $chatResult->getResult();
473 'CHAT_ID' => (
int)$chatParams[
'ID'],
474 'CHAT' => self::load($chatParams),
481 if ($chat->getChatId() <= 0)
486 \Bitrix\Im\Model\RelationTable::add([
487 'CHAT_ID' => $chat->getChatId(),
489 'USER_ID' =>
$params[
'FROM_USER_ID'],
491 \Bitrix\Im\Model\RelationTable::add([
492 'CHAT_ID' => $chat->getChatId(),
494 'USER_ID' =>
$params[
'TO_USER_ID'],
506 $botJoinFields[
'BOT_ID'] =
$params[
'TO_USER_ID'];
507 $botJoinFields[
'USER_ID'] =
$params[
'FROM_USER_ID'];
508 $botJoinFields[
'TO_USER_ID'] =
$params[
'TO_USER_ID'];
509 $botJoinFields[
'FROM_USER_ID'] =
$params[
'FROM_USER_ID'];
510 \Bitrix\Im\Bot::onJoinChat(
$params[
'FROM_USER_ID'], $botJoinFields);
517 $botJoinFields[
'BOT_ID'] =
$params[
'FROM_USER_ID'];
518 $botJoinFields[
'USER_ID'] =
$params[
'TO_USER_ID'];
519 $botJoinFields[
'TO_USER_ID'] =
$params[
'TO_USER_ID'];
520 $botJoinFields[
'FROM_USER_ID'] =
$params[
'FROM_USER_ID'];
521 \Bitrix\Im\Bot::onJoinChat(
$params[
'TO_USER_ID'], $botJoinFields);
524 $chat->isFilledNonCachedData =
false;
527 'CHAT_ID' => $chat->getChatId(),
536 if (isset(
$params[
'FROM_USER_ID']))
540 if (
$params[
'FROM_USER_ID'] <= 0)
545 if (isset(
$params[
'TO_USER_ID']))
554 if (
$params[
'TO_USER_ID'] <= 0)
576 $userId = $this->getContext()->getUserId();
578 return parent::getPopupData($excludedList)
594 $result = RelationTable::query()
595 ->setSelect([
'CHAT_ID',
'USER_ID'])
596 ->whereIn(
'CHAT_ID', $chatIds)
597 ->where(
'MESSAGE_TYPE', Chat::IM_TYPE_PRIVATE)
598 ->whereNot(
'USER_ID', $contextUserId)
604 $dialogIds[(int)$row[
'CHAT_ID']] = $row[
'USER_ID'];
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getType($chatData, bool $camelCase=true)
static hasAccess($dialogId, $userId=null)
const EVENT_PRIVATE_SYSTEM
static isUnread(int $userId, string $itemType, string $dialogId)
checkAccessInternal(int $userId)
getFieldsForRecent(int $userId, Message $message)
setDialogId(string $dialogId)
prepareMessage(Message $message)
sendPushUpdateMessage(Message $message)
setManageUsersDelete(string $manageUsersDelete)
sendPushReadSelf(MessageCollection $messages, int $lastId, int $counter)
add(array $params, ?Context $context=null)
getPopupData(array $excludedList=[])
updateRecentItems(Message $message)
getPushService(\Bitrix\Im\V2\Message $message, SendingConfig $config)
addUsers(array $userIds, AddUsersConfig $config=new AddUsersConfig())
onBeforeMessageSend(Message $message, SendingConfig $config)
sendEventRead(int $startId, int $endId, int $counter, bool $byEvent)
static getDialogIds(array $chatIds, int $contextUserId)
sendPushReadOpponent(MessageCollection $messages, int $lastId)
setManageUI(string $manageUI)
const EXTRANET_CAN_SEE_HISTORY
setManageSettings(string $manageSettings)
insertRecent(array $fields)
getStartId(?int $userId=null)
prepareParams(array $params=[])
setManageUsersAdd(string $manageUsersAdd)
getDefaultManageMessagesAutoDelete()
setManageMessages(string $manageMessages)
getCompanionId(?int $userId=null)
getDialogId(?int $contextUserId=null)
filterUsersToMentionAnchor(array $userIds)
static find(array $params, ?Context $context=null)
getCompanion(?int $userId=null)
static getConnection($name="")
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']