• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/integrations/ui/entityselector/chatprovider.php
  • Класс: BitrixImOpenlinesIntegrationsUIEntitySelectorChatProvider
  • Вызов: ChatProvider::getChatIdsWithDates
private function getChatIdsWithDates(): array
{
	if (!Loader::includeModule('im'))
	{
		return [];
	}
	if (User::getCurrent()->isExtranet())
	{
		return [];
	}
	$result = [];
	$query = ChatTable::query()
		->setSelect(['ID', 'RECENT_DATE_UPDATE' => 'RECENT.DATE_UPDATE'])
		->setLimit(self::LIMIT)
		->registerRuntimeField(
			new Reference(
				'RECENT',
				RecentTable::class,
				Join::on('this.ID', 'ref.ITEM_CID')->where('ref.USER_ID', User::getCurrent()->getId()),
				['join_type' => Join::TYPE_INNER]
			)
		)
	;
	if (isset($this->preparedSearchString))
	{
		$query
			->registerRuntimeField(
				new Reference(
					'OL_INDEX',
					ChatIndexTable::class,
					Join::on('this.ID', 'ref.CHAT_ID'),
					['join_type' => Join::TYPE_INNER]
				)
			)
			->whereMatch('OL_INDEX.SEARCH_TITLE', $this->preparedSearchString)
			->setOrder(['RECENT.DATE_UPDATE' => 'ASC'])
		;
	}
	elseif (isset($this->chatIds) && !empty($this->chatIds))
	{
		$query->whereIn('ID', $this->chatIds);
	}
	else
	{
		return [];
	}

	$raw = $query->fetchAll();

	foreach ($raw as $row)
	{
		$result[(int)$row['ID']] = $row['RECENT_DATE_UPDATE'];
	}

	return $result;
}