- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/MessageService.php
- Класс: BitrixImV2MessageMessageService
- Вызов: MessageService::getMessageContext
public function getMessageContext(int $range, array $select = []): Result
{
$result = new Result();
$messageId = $this->message->getMessageId() ?? 0;
$chat = $this->message->getChat();
$startId = $chat->getStartId();
$idsBefore = [];
$idsAfter = [];
if ($range > 0)
{
$idsBefore = MessageTable::query()
->setSelect(['ID'])
->where('ID', '<', $messageId)
->where('ID', '>=', $startId)
->where('CHAT_ID', $chat->getChatId())
->setOrder(['ID' => 'DESC'])
->setLimit($range)
->fetchCollection()
->getIdList()
;
$idsAfter = MessageTable::query()
->setSelect(['ID'])
->where('ID', '>', $messageId)
->where('CHAT_ID', $chat->getChatId())
->setOrder(['ID' => 'ASC'])
->setLimit($range)
->fetchCollection()
->getIdList()
;
}
$targetMessage = $messageId < $startId ? [] : [$messageId];
$ids = array_merge($idsBefore, $targetMessage, $idsAfter);
if (empty($ids))
{
return $result->setResult(new MessageCollection());
}
if (empty($select))
{
return $result->setResult(new MessageCollection($ids));
}
$ormCollection = MessageTable::query()->whereIn('ID', $ids)->setSelect($select)->fetchCollection();
return $result->setResult(new MessageCollection($ormCollection));
}