9 private $bHideLink =
false;
14 $this->user_id = intval($user_id);
16 $this->user_id = intval(
$USER->GetID());
18 $this->bHideLink =
true;
21 function SearchMessage($searchText, $toUserId, $fromUserId =
false, $bTimeZone =
true)
25 $fromUserId = intval($fromUserId);
27 $fromUserId = $this->user_id;
29 $toUserId = intval($toUserId);
32 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_ERROR_TO_USER_ID"),
"ERROR_TO_USER_ID");
36 $searchText = trim($searchText);
37 if (mb_strlen($searchText) < 3)
39 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_SEARCH_EMPTY"),
"ERROR_SEARCH_EMPTY");
44 $arMessages = Array();
45 $arMessageId = Array();
46 $arUnreadMessage = Array();
47 $arMessageFiles = Array();
51 if ($toUserId == $fromUserId)
53 $chat =
new CIMChat();
54 $chatId = $chat->GetPersonalChat();
63 $arRelation = \CIMChat::GetPrivateRelation($fromUserId, $toUserId);
64 $chatId = $arRelation[
'CHAT_ID'];
65 $startId = $arRelation[
'START_ID'];
70 '=CHAT_ID' => $chatId,
71 '*%MESSAGE' => $searchText,
73 if ($this->checkFullText($searchText))
77 '=CHAT_ID' => $chatId,
78 '*INDEX.SEARCH_CONTENT' => $searchText,
83 $where[
'>=ID'] = intval($startId);
86 $orm = \Bitrix\Im\Model\MessageTable::getList(
97 'order' => [
'DATE_CREATE' =>
'DESC',
'ID' =>
'DESC'],
102 while (
$arRes = $orm->fetch())
104 if ($fromUserId ==
$arRes[
'AUTHOR_ID'])
106 $arRes[
'TO_USER_ID'] = $toUserId;
107 $arRes[
'FROM_USER_ID'] = $fromUserId;
108 $convId =
$arRes[
'TO_USER_ID'];
112 $arRes[
'TO_USER_ID'] = $fromUserId;
113 $arRes[
'FROM_USER_ID'] = $toUserId;
114 $convId =
$arRes[
'FROM_USER_ID'];
117 $arMessages[
$arRes[
'ID']] = Array(
119 'chatId' =>
$arRes[
'CHAT_ID'],
120 'senderId' =>
$arRes[
'FROM_USER_ID'],
121 'recipientId' =>
$arRes[
'TO_USER_ID'],
122 'date' =>
$arRes[
'DATE_CREATE'],
123 'system' =>
$arRes[
'NOTIFY_EVENT'] ==
'private'?
'N':
'Y',
125 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
128 $arUsers[$convId][] =
$arRes[
'ID'];
129 $arMessageId[] =
$arRes[
'ID'];
130 $chatId =
$arRes[
'CHAT_ID'];
133 $params = CIMMessageParam::Get($arMessageId);
138 if (isset($param[
'FILE_ID']))
140 foreach ($param[
'FILE_ID'] as $fileId)
150 return Array(
'chatId' => $chatId,
'message' => $arMessages,
'unreadMessage' => $arUnreadMessage,
'usersMessage' => $arUsers,
'files' => $arMessageFiles);
157 $fromUserId = intval($fromUserId);
158 if ($fromUserId <= 0)
159 $fromUserId = $this->user_id;
161 $toUserId = intval($toUserId);
164 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_ERROR_TO_USER_ID"),
"ERROR_TO_USER_ID");
173 $sqlDateStart = $sqlHelper->getCharToDateFunction($dateStart->format(
"Y-m-d H:i:s"));
175 $dateEnd = $dateStart->add(
'1 DAY');
176 $sqlDateEnd = $sqlHelper->getCharToDateFunction($dateEnd->format(
"Y-m-d H:i:s"));
178 catch(\
Bitrix\Main\ObjectException $e)
180 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_SEARCH_DATE_EMPTY"),
"ERROR_SEARCH_EMPTY");
185 $arMessages = Array();
186 $arMessageId = Array();
187 $arUnreadMessage = Array();
188 $arMessageFiles = Array();
192 if ($toUserId == $fromUserId)
194 $chat =
new CIMChat();
195 $chatId = $chat->GetPersonalChat();
204 $arRelation = \CIMChat::GetPrivateRelation($fromUserId, $toUserId);
205 $chatId = $arRelation[
'CHAT_ID'];
206 $startId = $arRelation[
'START_ID'];
212 $limitById =
'AND M.ID >= '.intval($startId);
216 CTimeZone::Disable();
222 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" as DATE_CREATE,
224 ".$fromUserId.
" as R1_USER_ID,
225 ".$toUserId.
" as R2_USER_ID,
229 M.CHAT_ID = ".$chatId.
"
230 AND M.DATE_CREATE >= ".$sqlDateStart.
" AND M.DATE_CREATE <= ".$sqlDateEnd.
"
232 ORDER BY M.DATE_CREATE DESC, M.ID DESC
240 if ($fromUserId ==
$arRes[
'AUTHOR_ID'])
244 $convId =
$arRes[
'TO_USER_ID'];
250 $convId =
$arRes[
'FROM_USER_ID'];
253 $arMessages[
$arRes[
'ID']] = Array(
255 'chatId' =>
$arRes[
'CHAT_ID'],
256 'senderId' =>
$arRes[
'FROM_USER_ID'],
257 'recipientId' =>
$arRes[
'TO_USER_ID'],
258 'date' => \
Bitrix\Main\Type\DateTime::createFromTimestamp(
$arRes[
'DATE_CREATE']),
259 'system' =>
$arRes[
'NOTIFY_EVENT'] ==
'private' ?
'N' :
'Y',
261 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
264 $arUsers[$convId][] =
$arRes[
'ID'];
265 $arMessageId[] =
$arRes[
'ID'];
266 $chatId =
$arRes[
'CHAT_ID'];
269 $params = CIMMessageParam::Get($arMessageId);
274 if (isset($param[
'FILE_ID']))
276 foreach ($param[
'FILE_ID'] as $fileId)
286 return Array(
'chatId' => $chatId,
'message' => $arMessages,
'unreadMessage' => $arUnreadMessage,
'usersMessage' => $arUsers,
'files' => $arMessageFiles);
297 $fromUserId = intval($fromUserId);
298 if ($fromUserId <= 0)
299 $fromUserId = $this->user_id;
301 $toUserId = intval($toUserId);
304 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_ERROR_TO_USER_ID"),
"ERROR_TO_USER_ID");
309 $arMessages = Array();
310 $arMessageId = Array();
311 $arUnreadMessage = Array();
312 $arMessageFiles = Array();
317 if ($toUserId == $fromUserId)
319 $chat =
new CIMChat();
320 $chatId = $chat->GetPersonalChat();
329 $arRelation = \CIMChat::GetPrivateRelation($fromUserId, $toUserId);
330 $chatId = $arRelation[
'CHAT_ID'] ??
null;
331 $startId = $arRelation[
'START_ID'];
338 $limitById =
'AND M.ID >= '.intval($startId);
341 SELECT COUNT(M.ID) as CNT
343 WHERE M.CHAT_ID = ".$chatId.
"
346 $res_cnt =
$DB->Query($sqlStr);
347 $res_cnt = $res_cnt->Fetch();
348 $cnt = $res_cnt[
"CNT"];
350 if ($cnt > 0 && ceil($cnt/30) >= $iNumPage)
353 CTimeZone::Disable();
359 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" DATE_CREATE,
362 ".$fromUserId.
" R1_USER_ID,
363 ".$toUserId.
" R2_USER_ID
366 M.CHAT_ID = ".$chatId.
"
368 ORDER BY M.DATE_CREATE DESC, M.ID DESC
373 $dbRes->NavQuery($strSql, $cnt, Array(
'iNumPage' => $iNumPage,
'nPageSize' => 30));
377 if ($fromUserId ==
$arRes[
'AUTHOR_ID'])
381 $convId =
$arRes[
'TO_USER_ID'];
387 $convId =
$arRes[
'FROM_USER_ID'];
389 $arMessages[
$arRes[
'ID']] = Array(
391 'chatId' =>
$arRes[
'CHAT_ID'],
392 'senderId' =>
$arRes[
'FROM_USER_ID'],
393 'recipientId' =>
$arRes[
'TO_USER_ID'],
394 'date' => \
Bitrix\Main\Type\DateTime::createFromTimestamp(
$arRes[
'DATE_CREATE']),
395 'system' =>
$arRes[
'NOTIFY_EVENT'] ==
'private'?
'N':
'Y',
397 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
399 $arUsers[$convId][] =
$arRes[
'ID'];
400 $arMessageId[] =
$arRes[
'ID'];
401 $chatId =
$arRes[
'CHAT_ID'];
404 $params = CIMMessageParam::Get($arMessageId);
409 if (isset($param[
'FILE_ID']))
411 foreach ($param[
'FILE_ID'] as $fileId)
423 return Array(
'chatId' => $chatId,
'message' => $arMessages,
'usersMessage' => $arUsers,
'files' => $arMessageFiles);
446 MAX(M.ID)+1 as MAX_ID,
449 R1.START_ID as R1_START_ID,
451 R2.START_ID as R2_START_ID
452 FROM b_im_relation R1
453 INNER JOIN b_im_relation R2 on R2.CHAT_ID = R1.CHAT_ID
454 INNER JOIN b_im_message M ON M.ID >= R1.START_ID AND M.CHAT_ID = R1.CHAT_ID
456 R1.USER_ID = ".$this->user_id.
"
459 GROUP BY M.CHAT_ID, R1.ID, R1.START_ID, R2.ID, R2.START_ID
464 $strSql =
"UPDATE b_im_relation SET START_ID = ".intval(
$arRes[
'MAX_ID']).
" WHERE ID = ".intval(
$arRes[
'R1_ID']);
467 $counterService =
new IM\V2\Message\CounterService($this->user_id);
469 $counterService->deleteByChatId((
int)
$arRes[
'CHAT_ID']);
474 'select' =>
array(
'ID'),
476 '<ID' =>
$arRes[
'R2_START_ID'],
477 '=CHAT_ID' =>
$arRes[
'CHAT_ID'],
480 while ($messageInfo =
$messages->fetch())
482 IM\Model\MessageTable::delete($messageInfo[
'ID']);
487 IM\Model\RecentTable::update($primaryKey, [
'ITEM_MID' => 0]);
497 $chatId = intval($chatId);
500 $ar = \CIMChat::GetRelationById($chatId, $this->user_id,
true,
false);
501 if (
$ar &&
$ar[
'START_ID'] > 0)
503 $limitById =
'AND M.ID >= '.intval(
$ar[
'START_ID']);
508 MAX(M.ID)+1 as MAX_ID,
510 FROM b_im_relation R1
511 INNER JOIN b_im_message M ON M.CHAT_ID = R1.CHAT_ID
513 R1.CHAT_ID = ".$chatId.
"
514 AND R1.USER_ID = ".$this->user_id.
"
516 GROUP BY M.CHAT_ID, R1.ID
521 $strSql =
"UPDATE b_im_relation SET START_ID = ".intval(
$arRes[
'MAX_ID']).
" WHERE ID = ".intval(
$arRes[
'R1_ID']);
524 $counterService =
new IM\V2\Message\CounterService($this->user_id);
526 $counterService->deleteByChatId((
int)
$arRes[
'CHAT_ID']);
529 $primaryKey = [
'USER_ID' => $this->user_id,
'ITEM_TYPE' => $chatType,
'ITEM_ID' => $chatId];
530 IM\Model\RecentTable::update($primaryKey, [
'ITEM_MID' => 0]);
538 $chatId = intval($chatId);
539 $searchText = trim($searchText);
541 if ($searchText ==
'')
543 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_SEARCH_EMPTY"),
"ERROR_SEARCH_EMPTY");
547 if (!\
Bitrix\Im\Dialog::hasAccess(
'chat'.$chatId, $this->user_id))
553 '=CHAT_ID' => $chatId,
554 '*%MESSAGE' => $searchText,
557 if($this->checkFullText($searchText))
560 '=CHAT_ID' => $chatId,
561 '*INDEX.SEARCH_CONTENT' => \
Bitrix\Main\Search\Content::prepareStringToken($searchText),
565 $ar = \CIMChat::GetRelationById($chatId, $this->user_id,
true,
false);
566 if (
$ar &&
$ar[
'START_ID'] > 0)
568 $where[
'>=ID'] = intval(
$ar[
'START_ID']);
571 $orm = \Bitrix\Im\Model\MessageTable::getList(
581 'order' => [
'DATE_CREATE' =>
'DESC',
'ID' =>
'DESC'],
586 $arMessages = Array();
587 $arMessageId = Array();
588 $arUnreadMessage = Array();
589 $usersMessage = Array();
591 while (
$arRes = $orm->fetch())
593 $arMessages[
$arRes[
'ID']] = Array(
595 'chatId' =>
$arRes[
'CHAT_ID'],
596 'senderId' =>
$arRes[
'AUTHOR_ID'],
597 'recipientId' =>
$arRes[
'CHAT_ID'],
598 'date' =>
$arRes[
'DATE_CREATE'],
600 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
604 $arMessageId[] =
$arRes[
'ID'];
607 $params = CIMMessageParam::Get($arMessageId);
612 if (isset($param[
'FILE_ID']))
614 foreach ($param[
'FILE_ID'] as $fileId)
623 return Array(
'chatId' => $chatId,
'message' => $arMessages,
'unreadMessage' => $arUnreadMessage,
'usersMessage' => $usersMessage,
'files' => $arMessageFiles);
630 $chatId = intval($chatId);
636 $sqlDateStart = $sqlHelper->getCharToDateFunction($dateStart->format(
"Y-m-d H:i:s"));
638 $dateEnd = $dateStart->add(
'1 DAY');
639 $sqlDateEnd = $sqlHelper->getCharToDateFunction($dateEnd->format(
"Y-m-d H:i:s"));
641 catch(\
Bitrix\Main\ObjectException $e)
643 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_HISTORY_SEARCH_DATE_EMPTY"),
"ERROR_SEARCH_EMPTY");
648 $ar = \CIMChat::GetRelationById($chatId, $this->user_id,
true,
false);
649 if (
$ar &&
$ar[
'START_ID'] > 0)
651 $limitById =
'AND M.ID >= '.intval(
$ar[
'START_ID']);
655 CTimeZone::Disable();
661 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" as DATE_CREATE,
663 FROM b_im_relation R1
664 INNER JOIN b_im_message M ON M.CHAT_ID = R1.CHAT_ID
666 R1.CHAT_ID = ".$chatId.
"
667 AND R1.USER_ID = ".$this->user_id.
"
668 AND M.DATE_CREATE >= ".$sqlDateStart.
"
669 AND M.DATE_CREATE <= ".$sqlDateEnd.
"
671 ORDER BY M.DATE_CREATE DESC, M.ID DESC
677 $arMessages = Array();
678 $arMessageId = Array();
679 $arUnreadMessage = Array();
680 $usersMessage = Array();
684 $arMessages[
$arRes[
'ID']] = Array(
686 'chatId' =>
$arRes[
'CHAT_ID'],
687 'senderId' =>
$arRes[
'AUTHOR_ID'],
688 'recipientId' =>
$arRes[
'CHAT_ID'],
689 'date' => \
Bitrix\Main\Type\DateTime::createFromTimestamp(
$arRes[
'DATE_CREATE']),
691 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
695 $arMessageId[] =
$arRes[
'ID'];
697 $params = CIMMessageParam::Get($arMessageId);
702 if (isset($param[
'FILE_ID']))
704 foreach ($param[
'FILE_ID'] as $fileId)
713 return Array(
'chatId' => $chatId,
'message' => $arMessages,
'unreadMessage' => $arUnreadMessage,
'usersMessage' => $usersMessage,
'files' => $arMessageFiles);
730 $chatId = intval($chatId);
732 $orm = IM\Model\ChatTable::getById($chatId);
733 if (!($chatData = $orm->fetch()))
735 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_ERROR_CHAT_NOT_EXISTS"),
"ERROR_CHAT_NOT_EXISTS");
740 $ar = \CIMChat::GetRelationById($chatId, $this->user_id,
true,
false);
741 if (
$ar &&
$ar[
'START_ID'] > 0)
743 $limitById =
'AND M.ID >= '.intval(
$ar[
'START_ID']);
748 CTimeZone::Disable();
754 && \
Bitrix\Main\Loader::includeModule(
'imopenlines')
757 $lineId = \Bitrix\ImOpenLines\Chat::parseLinesChatEntityId($chatData[
'ENTITY_ID'])[
'lineId'];
763 SELECT COUNT(M.ID) as CNT
765 INNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.TYPE = '".IM_MESSAGE_OPEN.
"'
766 WHERE M.CHAT_ID = ".$chatId.
" ".$limitById.
"
774 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" DATE_CREATE,
776 C.ENTITY_TYPE CHAT_ENTITY_TYPE
778 INNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.TYPE = '".
IM_MESSAGE_OPEN.
"'
779 LEFT JOIN b_im_relation R ON R.CHAT_ID = M.CHAT_ID AND R.USER_ID = ".$this->user_id.
"
781 M.CHAT_ID = ".$chatId.
"
783 ORDER BY M.DATE_CREATE DESC, M.ID DESC
788 && \
Bitrix\Main\Loader::includeModule(
'imopenlines')
789 && \
Bitrix\ImOpenLines\Config::canJoin($lineId)
793 SELECT COUNT(M.ID) as CNT
795 INNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.TYPE = '".IM_MESSAGE_OPEN_LINE.
"'
796 WHERE M.CHAT_ID = ".$chatId.
" ".$limitById.
"
804 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" DATE_CREATE,
806 C.ENTITY_TYPE CHAT_ENTITY_TYPE
809 LEFT JOIN b_im_relation R ON R.CHAT_ID = M.CHAT_ID AND R.USER_ID = ".$this->user_id.
"
811 M.CHAT_ID = ".$chatId.
"
813 ORDER BY M.DATE_CREATE DESC, M.ID DESC
819 SELECT COUNT(M.ID) as CNT
821 INNER JOIN b_im_relation R1 ON M.CHAT_ID = R1.CHAT_ID
822 WHERE R1.CHAT_ID = ".$chatId.
" AND R1.USER_ID = ".$this->user_id.
" ".$limitById.
"
830 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" as DATE_CREATE,
832 C.ENTITY_TYPE as CHAT_ENTITY_TYPE
834 LEFT JOIN b_im_chat C ON M.CHAT_ID = C.ID
836 M.CHAT_ID = ".$chatId.
"
838 ORDER BY M.DATE_CREATE DESC, M.ID DESC
844 $res_cnt =
$DB->Query($strCountSql);
845 $res_cnt = $res_cnt->Fetch();
846 $cnt = $res_cnt[
"CNT"];
848 $arMessages = Array();
849 $arMessageFiles = Array();
850 $arMessageId = Array();
851 $usersMessage = Array();
852 if ($cnt > 0 && ceil($cnt/30) >= $iNumPage)
855 $dbRes->NavQuery($strResultSql, $cnt, Array(
'iNumPage' => $iNumPage,
'nPageSize' => 30));
859 if (
$arRes[
'CHAT_ENTITY_TYPE'] !=
'LIVECHAT' && \
Bitrix\Im\User::getInstance($this->user_id)->isConnector())
863 $arMessages[
$arRes[
'ID']] = Array(
865 'chatId' =>
$arRes[
'CHAT_ID'],
866 'senderId' =>
$arRes[
'AUTHOR_ID'],
867 'recipientId' =>
$arRes[
'CHAT_ID'],
868 'date' => \
Bitrix\Main\Type\DateTime::createFromTimestamp(
$arRes[
'DATE_CREATE']),
869 'system' =>
$arRes[
'AUTHOR_ID'] > 0?
'N':
'Y',
871 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
875 $arMessageId[] =
$arRes[
'ID'];
876 $arUsersIds[] =
$arRes[
'AUTHOR_ID'];
879 $params = CIMMessageParam::Get($arMessageId);
884 if (isset($param[
'FILE_ID']))
886 foreach ($param[
'FILE_ID'] as $fileId)
897 $users = CIMContactList::GetUserData(
array(
906 'message' => $arMessages,
907 'usersMessage' => $usersMessage,
908 'users' => $users[
'users'],
909 'userInGroup' => $users[
'userInGroup'],
910 'phones' => $users[
'phones'],
911 'files' => $arMessageFiles
919 $chatId = intval($chatId);
920 $messageStart = intval($messageStart);
922 if ($date instanceof \
Bitrix\Main\Type\DateTime)
925 $dateSql = $checkDate->format(
"Y-m-d H:i:s");
929 $checkDate = new \Bitrix\Main\Type\DateTime($date,
"Y-m-d H:i:s");
930 $dateSql = $checkDate->format(
"Y-m-d H:i:s");
931 if ($dateSql != $date)
937 $chatData = CIMChat::GetChatData(Array(
'ID' => $chatId,
'USER_ID' => $this->user_id));
938 if (empty($chatData[
'chat']))
943 if ($chatData[
'chat'][$chatId][
'type'] ==
'private')
946 foreach ($chatData[
'userInChat'][$chatId] as
$userId)
961 $dialogId =
'chat'.$chatId;
964 $chatSql = str_pad($chatId, 11,
'0', STR_PAD_LEFT);
969 CTimeZone::Disable();
973 CASE WHEN M.ID > 0 THEN 'Y' ELSE 'N' END AS MESSAGE_EXISTS,
974 CASE WHEN M.ID > R.LAST_ID THEN 'N' ELSE 'Y' END AS MESSAGE_READ,
979 ".$DB->DatetimeToTimestampFunction(
'M.DATE_CREATE').
" as DATE_CREATE,
981 FROM b_im_message_param MS
982 LEFT JOIN b_im_message M ON M.ID = MS.MESSAGE_ID
983 LEFT JOIN b_im_relation R ON R.CHAT_ID = M.CHAT_ID and R.USER_ID = ".$this->user_id.
"
984 LEFT JOIN b_im_chat C ON C.ID = M.CHAT_ID
986 MS.PARAM_NAME='TS' and
987 MS.PARAM_VALUE between '".$chatSql.
" ".$dateSql.
"' and '".$chatSql.
" 9999-99-99 99:99:99'
988 ".($messageStart > 0?
'MS.MESSAGE_ID >= '.$messageStart:
"").
"
996 $arMessages = Array();
997 $arMessageUnread = Array();
998 $arMessageDelete = Array();
999 $arMessageId = Array();
1000 $usersMessage = Array();
1001 $arUsersIds = Array();
1005 if (
$message[
'MESSAGE_EXISTS'] ==
'N')
1007 $arMessageDelete[] =
$message[
'ID'];
1010 if (
$message[
'MESSAGE_READ'] ==
'N')
1012 $arMessageUnread[$dialogId][] =
$message[
'ID'];
1016 $recipientId =
$message[
'AUTHOR_ID'] == $this->user_id? $dialogId: $this->user_id;
1020 $recipientId =
$message[
'CHAT_ID'];
1022 $arMessages[
$message[
'ID']] = Array(
1025 'senderId' =>
$message[
'AUTHOR_ID'],
1026 'recipientId' => $recipientId,
1027 'date' => \
Bitrix\Main\Type\DateTime::createFromTimestamp(
$message[
'DATE_CREATE']),
1028 'system' =>
$message[
'AUTHOR_ID'] > 0?
'N':
'Y',
1030 'textLegacy' => \
Bitrix\Im\Text::parseLegacyFormat(
$arRes[
'MESSAGE'])
1033 $usersMessage[$dialogId][] =
$message[
'ID'];
1035 $arUsersIds[] =
$message[
'AUTHOR_ID'];
1038 $params = CIMMessageParam::Get($arMessageId);
1043 if (isset($param[
'FILE_ID']))
1045 foreach ($param[
'FILE_ID'] as $fileId)
1054 $users = CIMContactList::GetUserData(
array(
1055 'ID' => $arUsersIds,
1056 'DEPARTMENT' =>
'Y',
1062 'chatId' => $chatId,
1063 'dialogId' => $dialogId,
1064 'message' => $arMessages,
1065 'usersMessage' => $usersMessage,
1066 'unreadMessage' => $arMessageUnread,
1067 'messageDelete' => $arMessageDelete,
1068 'files' => $arMessageFiles,
1069 'users' => $users[
'users'],
1070 'userInGroup' => $users[
'userInGroup'],
1071 'phones' => $users[
'phones'],
1075 'userCallStatus' => $chatType ==
IM_MESSAGE_PRIVATE? Array(): $chatData[
'userCallStatus'],
1076 'userChatBlockStatus' => $chatType ==
IM_MESSAGE_PRIVATE? Array(): $chatData[
'userChatBlockStatus'],
1082 $message = \Bitrix\Im\Model\MessageTable::getList(Array(
1084 'ID',
'DATE_CREATE',
'CHAT_ID',
'AUTHOR_ID',
1085 'CHAT_TYPE' =>
'CHAT.TYPE',
1086 'CHAT_ENTITY_TYPE' =>
'CHAT.ENTITY_TYPE',
1087 'CHAT_ENTITY_ID' =>
'CHAT.ENTITY_ID',
1088 'CHAT_ENTITY_DATA_1' =>
'CHAT.ENTITY_DATA_1',
1099 $relations = CIMChat::GetRelationById(
$message[
'CHAT_ID'],
false,
true,
false);
1100 if (!isset($relations[$this->user_id]))
1103 $message[
'CHAT_ENTITY_TYPE'] ==
'LINES'
1104 && \
Bitrix\Main\Loader::includeModule(
'imopenlines')
1107 $explodeData = explode(
'|',
$message[
'CHAT_ENTITY_DATA_1']);
1108 $crmEntityType = ($explodeData[0] ==
'Y') ? $explodeData[1] :
null;
1109 $crmEntityId = ($explodeData[0] ==
'Y') ? intval($explodeData[2]) :
null;
1111 $lineId = \Bitrix\ImOpenLines\Chat::parseLinesChatEntityId(
$message[
'CHAT_ENTITY_ID'])[
'lineId'];
1113 if (!\
Bitrix\ImOpenLines\Config::canJoin($lineId, $crmEntityType, $crmEntityId))
1133 $dialogId = $this->user_id;
1135 if (
$message[
'AUTHOR_ID'] != $this->user_id)
1143 if (
$userId != $this->user_id)
1157 $dialogId =
'chat'.$message[
'CHAT_ID'];
1160 $previousMessages = $this->GetPreviousMessages(
$messageId,
$message[
'CHAT_ID'],
$message[
'DATE_CREATE'], $previous, $timezone);
1163 $startId = (int)($relations[$this->user_id][
'START_ID'] ?? 0);
1166 $previousMessages = array_filter($previousMessages,
static fn (
array $message) => (
int)
$message[
'ID'] >= $startId);
1169 $messages = array_replace($previousMessages, $nextMessages);
1173 $arMessages = Array();
1174 $arMessageFiles = Array();
1175 $arMessageId = Array();
1176 $usersMessage = Array();
1177 $arUsersIds = Array();
1183 $recipientId = $mess[
'AUTHOR_ID'] == $this->user_id? $dialogId: $this->user_id;
1187 $recipientId = $mess[
'CHAT_ID'];
1189 $arMessages[$mess[
'ID']] = Array(
1190 'id' => $mess[
'ID'],
1191 'chatId' => $mess[
'CHAT_ID'],
1192 'senderId' => $mess[
'AUTHOR_ID'],
1193 'recipientId' => $recipientId,
1194 'date' => \
Bitrix\Main\Type\DateTime::createFromTimestamp($mess[
'DATE_CREATE']),
1195 'system' => $mess[
'AUTHOR_ID'] > 0?
'N':
'Y',
1196 'text' => $textParser? \
Bitrix\Im\Text::parse($mess[
'MESSAGE']): $mess[
'MESSAGE'],
1197 'textLegacy' => $textParser? \
Bitrix\Im\Text::parseLegacyFormat($mess[
'MESSAGE']): $mess[
'MESSAGE']
1200 $usersMessage[$dialogId][] = $mess[
'ID'];
1201 $arMessageId[] = $mess[
'ID'];
1202 $arUsersIds[] = $mess[
'AUTHOR_ID'];
1205 $params = CIMMessageParam::Get($arMessageId);
1210 if (isset($param[
'FILE_ID']))
1212 foreach ($param[
'FILE_ID'] as $fileId)
1221 $users = CIMContactList::GetUserData(
array(
1222 'ID' => $arUsersIds,
1223 'DEPARTMENT' =>
'Y',
1229 'chatId' => $chatId,
1230 'dialogId' => $dialogId,
1231 'message' => $arMessages,
1232 'usersMessage' => $usersMessage,
1233 'files' => $arMessageFiles,
1234 'users' => $users[
'users'],
1235 'userInGroup' => $users[
'userInGroup'],
1236 'phones' => $users[
'phones'],
1240 private function GetPreviousMessages(
$messageId, $chatId =
null, $dateCreate =
null, $limit = 10, $timezone =
true)
1244 if (is_null($chatId) || !is_object($dateCreate))
1246 $message = \Bitrix\Im\Model\MessageTable::getList(Array(
'select' => Array(
'DATE_CREATE',
'CHAT_ID'),
'filter' => Array(
'=ID' =>
$messageId)))->fetch();
1251 $dateCreate =
$message[
'DATE_CREATE'];
1258 $limit = intval($limit)+1;
1268 ".$DB->DatetimeToTimestampFunction(
'DATE_CREATE').
" as DATE_CREATE,
1273 and DATE_CREATE <= '".$dateCreate->format(
'Y-m-d H:i:s').
"'
1274 ORDER BY CHAT_ID, DATE_CREATE desc
1292 private function GetNextMessages(
$messageId, $chatId =
null, $dateCreate =
null, $limit = 10, $timezone =
true)
1296 if (is_null($chatId) || !is_object($dateCreate))
1298 $message = \Bitrix\Im\Model\MessageTable::getList(Array(
'select' => Array(
'DATE_CREATE',
'CHAT_ID'),
'filter' => Array(
'=ID' =>
$messageId)))->fetch();
1303 $dateCreate =
$message[
'DATE_CREATE'];
1310 $limit = intval($limit)+1;
1320 ".$DB->DatetimeToTimestampFunction(
'DATE_CREATE').
" as DATE_CREATE,
1325 and DATE_CREATE >= '".$dateCreate->format(
'Y-m-d H:i:s').
"'
1326 ORDER BY CHAT_ID, DATE_CREATE asc
1343 private function checkFullText($searchText): bool
1345 $indexEnabled = \Bitrix\Main\Config\Option::get(
'im',
'message_history_index');
1349 && \Bitrix\Main\Search\Content::canUseFulltextSearch($searchText)
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static prepareStringToken($token)
static createFromUserTime($timeString)
static GetFiles($chatId, $fileId=false, $checkPermission=true)
GetMessagesByDate($chatId, $date, $messageStart=0, $timezone=true)
SearchDateChatMessage($searchDate, $chatId, $bTimeZone=true)
GetRelatedMessages($messageId, $previous=10, $next=10, $timezone=true, $textParser=true)
GetMoreMessage($pageId, $toUserId, $fromUserId=false, $bTimeZone=true)
GetMoreChatMessage($pageId, $chatId, $bTimeZone=true)
SearchMessage($searchText, $toUserId, $fromUserId=false, $bTimeZone=true)
RemoveAllMessage($userId)
SearchDateMessage($searchDate, $toUserId, $fromUserId=false, $bTimeZone=true)
SearchChatMessage($searchText, $chatId, $bTimeZone=true)
RemoveMessage($messageId)
HideAllChatMessage($chatId)
__construct($user_id=false, $arParams=Array())
static prepareShow($arMessages, $params)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
const IM_CHAT_TYPE_PERSONAL
const IM_MESSAGE_OPEN_LINE
IsModuleInstalled($module_id)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
$GLOBALS['_____370096793']