- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Integration/UI/EntitySelector/RecentProvider.php
- Класс: BitrixImV2IntegrationUIEntitySelectorRecentProvider
- Вызов: RecentProvider::getExtranetUsersQuery
private function getExtranetUsersQuery(): ?Query
{
if (!Loader::includeModule('socialnetwork'))
{
return null;
}
$extranetSiteId = Option::get('extranet', 'extranet_site');
$extranetSiteId = ($extranetSiteId && ModuleManager::isModuleInstalled('extranet') ? $extranetSiteId : false);
if (
!$extranetSiteId
|| CSocNetUser::isCurrentUserModuleAdmin()
)
{
return null;
}
/** @see BitrixSocialnetworkIntegrationUIEntitySelectorUserProvider::EXTRANET_ROLES */
$extranetRoles = [
BitrixSocialnetworkUserToGroupTable::ROLE_USER,
BitrixSocialnetworkUserToGroupTable::ROLE_OWNER,
BitrixSocialnetworkUserToGroupTable::ROLE_MODERATOR,
BitrixSocialnetworkUserToGroupTable::ROLE_REQUEST,
];
$query = BitrixSocialnetworkUserToGroupTable::query();
$query->addSelect(new ExpressionField('DISTINCT_USER_ID', 'DISTINCT %s', 'USER.ID'));
$query->whereIn('ROLE', $extranetRoles);
$query->registerRuntimeField(
new Reference(
'GS',
BitrixSocialnetworkWorkgroupSiteTable::class,
Join::on('ref.GROUP_ID', 'this.GROUP_ID')->where('ref.SITE_ID', $extranetSiteId),
['join_type' => 'INNER']
)
);
$query->registerRuntimeField(
new Reference(
'UG_MY',
BitrixSocialnetworkUserToGroupTable::class,
Join::on('ref.GROUP_ID', 'this.GROUP_ID')
->where('ref.USER_ID', $this->getContext()->getUserId())
->whereIn('ref.ROLE', $extranetRoles),
['join_type' => 'INNER']
)
);
return $query;
}