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