• Модуль: extranet
  • Путь к файлу: ~/bitrix/modules/extranet/classes/general/extranet.php
  • Класс: CExtranet
  • Вызов: CExtranet::fillUserListFilterORM
static function fillUserListFilterORM($arParams = array(), &$arFilter = array(), &$bFilteredByUserId = null)
{
	global $USER;

	static $IsShowAllContacts = false;
	static $IsExtranetWorkGroupsAllowed = false;

	if (!is_array($arParams))
	{
		$arParams = array();
	}

	$currentUserId = (int)($arParams["CURRENT_USER_ID"] ?? $USER->GetId());

	$bExtranetUser = (bool)($arParams["EXTRANET_USER"] ?? !self::IsIntranetUser(SITE_ID, $currentUserId));

	$arFilteredUserIDs = (
		isset($arParams["MY_USERS"])
		&& is_array($arParams["MY_USERS"])
			? $arParams["MY_USERS"]
			: []
	);

	if ($IsShowAllContacts === false)
	{
		$IsShowAllContacts = (
			self::ShowAllContactsAllowed()
			|| (
				isset($arParams['SHOW_ALL_EXTRANET_CONTACTS'])
				&& $arParams['SHOW_ALL_EXTRANET_CONTACTS']
				&& CSocNetUser::isUserModuleAdmin($currentUserId)
			)
				? "Y"
				: "N"
		);
	}

	if ($IsExtranetWorkGroupsAllowed === false)
	{
		$IsExtranetWorkGroupsAllowed = (
			self::WorkgroupsAllowed()
				? "Y"
				: "N"
		);
	}

	if (
		$IsExtranetWorkGroupsAllowed === "Y"
		&& (
			$bExtranetUser
			|| $IsShowAllContacts !== "Y"
		)
	)
	{
		$arFilteredUserIDs = array_merge($arFilteredUserIDs, self::GetMyGroupsUsers(self::GetExtranetSiteID()));
	}

	if ($bExtranetUser)
	{
		if ($IsExtranetWorkGroupsAllowed !== "Y")
		{
			$arFilter = false;
		}
		else
		{
			$arFilter["ID"] = array_unique(array_merge(array($currentUserId), $arFilteredUserIDs));
			$bFilteredByUserId = true;
		}
	}
	elseif ($IsShowAllContacts !== "Y")
	{
		$subFilter = [
			'!UF_DEPARTMENT' => false,
		];

		if ($IsExtranetWorkGroupsAllowed === "Y")
		{
			$subFilter['=EXTERNAL_AUTH_ID'] = 'email';
			$subFilter['ID'] = array_unique(array_merge([ $currentUserId ], $arFilteredUserIDs));

			$bFilteredByUserId = true;
		}

		if (isset($arParams['ALLOW_BOTS']) && $arParams['ALLOW_BOTS'] === true)
		{
			$subFilter['=EXTERNAL_AUTH_ID'] = 'bot';
		}

		if (count($subFilter) <= 1)
		{
			foreach($subFilter as $key => $value)
			{
				$arFilter[$key] = $value;
			}
		}
		else
		{
			$subFilter['LOGIC'] = 'OR';
			$arFilter[] = $subFilter;
		}
	}

	if ($arFilter)
	{
		if (
			isset($arParams["INTRANET_ONLY"])
			&& $arParams["INTRANET_ONLY"]
		)
		{
			if (isset($arFilter["UF_DEPARTMENT"]))
			{
				unset($arFilter["UF_DEPARTMENT"]);
			}
			$arFilter["!UF_DEPARTMENT"] = false;
		}
		elseif (
			isset($arParams["EXTRANET_ONLY"])
			&& $arParams["EXTRANET_ONLY"]
		)
		{
			if (isset($arFilter["!UF_DEPARTMENT"]))
			{
				unset($arFilter["!UF_DEPARTMENT"]);
			}
			$arFilter["UF_DEPARTMENT"] = false;
		}
	}
}