• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Integration/UI/EntitySelector/RecentProvider.php
  • Класс: BitrixImV2IntegrationUIEntitySelectorRecentProvider
  • Вызов: RecentProvider::getUserIdsWithDate
private function getUserIdsWithDate(): array
{
	$result = [];
	$query = UserTable::query()
		->setSelect(['ID', 'DATE_UPDATE' => 'RECENT.DATE_UPDATE', 'IS_INTRANET_USER', 'DATE_CREATE' => 'DATE_REGISTER'])
		->where('ACTIVE', true)
		->registerRuntimeField(
			'RECENT',
			new Reference(
				'RECENT',
				RecentTable::class,
				Join::on('this.ID', 'ref.ITEM_ID')
					->where('ref.USER_ID', $this->getContext()->getUserId())
					->where('ref.ITEM_TYPE', Chat::IM_TYPE_PRIVATE),
				['join_type' => Join::TYPE_LEFT]
			)
		)
		->setLimit(self::LIMIT)
	;

	if (isset($this->preparedSearchString))
	{
		$query
			->whereMatch('INDEX.SEARCH_USER_CONTENT', $this->preparedSearchString)
			->setOrder(['RECENT.DATE_UPDATE' => 'DESC', 'IS_INTRANET_USER' => 'DESC', 'DATE_CREATE' => 'DESC'])
		;
	}
	elseif (isset($this->userIds) && !empty($this->userIds))
	{
		$query->whereIn('ID', $this->userIds);
	}
	else
	{
		return [];
	}

	$query->where($this->getIntranetFilter());

	$raw = $query->fetchAll();

	foreach ($raw as $row)
	{
		$result[(int)$row['ID']] = [
			'DIALOG_ID' => (int)$row['ID'],
			'DATE_UPDATE' => $row['DATE_UPDATE'],
			'DATE_CREATE' => $row['DATE_CREATE'],
		];
	}

	return $result;
}