• Модуль: 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));
}