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