• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/authproviders.php
  • Класс: CIntranetAuthProvider
  • Вызов: CIntranetAuthProvider::AjaxRequest
public function AjaxRequest($arParams=false)
{
	global $USER;
	if (
		!$USER->IsAuthorized()
//			|| CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser($arParams["SITE_ID"])
	)
		return false;

	$elements = "";
	if ($_REQUEST['action'] == 'structure-item')
	{
		$arFinderParams = Array(
			"PROVIDER" => $this->id,
			"TYPE" => 'structure-item',
		);
		//be careful with field list because of CUser::FormatName()
		if (
			CModule::IncludeModule('extranet')
			&& !CExtranet::IsIntranetUser($arParams["SITE_ID"])
		)
		{
			$arExtranetUsers = CExtranet::GetMyGroupsUsersFull(CExtranet::GetExtranetSiteID(), false);
			$dbRes = new CDBResult;
			$dbRes->InitFromArray($arExtranetUsers);
		}
		else
		{
			$arFilter = array(
				'ACTIVE' => 'Y',
				'CONFIRM_CODE' => false,
				'UF_DEPARTMENT' => intval($_REQUEST['item']),
				'!EXTERNAL_AUTH_ID' => BitrixMainUserTable::getExternalUserTypes()
			);

			$dbRes = CUser::GetList(
				'last_name',
				'asc',
				$arFilter,
				array(
					"FIELDS" => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'PERSONAL_PHOTO', 'PERSONAL_GENDER', 'WORK_POSITION', 'PERSONAL_PROFESSION')
				)
			);
		}

		while ($arUser = $dbRes->Fetch())
		{
			$arPhoto = array('IMG' => '');

			if (!$arUser['PERSONAL_PHOTO'])
			{
				switch ($arUser['PERSONAL_GENDER'])
				{
					case "M":
						$suffix = "male";
						break;
					case "F":
						$suffix = "female";
						break;
					default:
						$suffix = "unknown";
				}
				$arUser['PERSONAL_PHOTO'] = COption::GetOptionInt("socialnetwork", "default_user_picture_".$suffix, false, SITE_ID);
			}

			if ($arUser['PERSONAL_PHOTO'] > 0)
			{
				$arPhoto = CIntranetUtils::InitImage($arUser['PERSONAL_PHOTO'], 30);
			}
			$arItem = Array(
				"ID" => "IU".$arUser["ID"],
				"NAME" => CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false),
				"AVATAR" => $arPhoto['CACHE']['src'] ?? '',
				"DESC" => $arUser['WORK_POSITION'] ? $arUser['WORK_POSITION'] : $arUser['PERSONAL_PROFESSION'],
			);
			$elements .= CFinder::GetFinderItem($arFinderParams, $arItem);
		}
	}
	else
	{
		$search = urldecode($_REQUEST['search']);

		if (
			!CModule::IncludeModule('extranet')
			|| CExtranet::IsIntranetUser($arParams["SITE_ID"])
		)
		{
			$arFinderParams = Array(
				"PROVIDER" => $this->id,
				"TYPE" => 4,
			);

			$dbRes = CIBlockSection::GetList(
				array('ID' => 'ASC'),
				array('IBLOCK_ID' => COption::GetOptionInt('intranet', 'iblock_structure'), '%NAME' => $search),
				false,
				array('ID', 'NAME'),
				array('nTopCount' => 7)
			);
			while ($arSection = $dbRes->fetch())
			{
				$arItem = Array(
					"ID" => $arSection["ID"],
					"AVATAR" => "/bitrix/js/main/core/images/access/avatar-user-everyone.png",
					"NAME" => $arSection["NAME"],
					"DESC" => GetMessage("authprov_group"),
					"CHECKBOX" => array(
						"D#ID#" => GetMessage("authprov_check_d"),
						"DR#ID#" => GetMessage("authprov_check_dr"),
					),
				);
				$elements .= CFinder::GetFinderItem($arFinderParams, $arItem);
			}
		}

		$arFinderParams = Array(
			"PROVIDER" => $this->id,
			"TYPE" => 3,
		);

		$arFilter = array(
			"ACTIVE" => "Y",
			"CONFIRM_CODE" => false,
			"NAME_SEARCH" => $search
		);

		$arExternalAuthId = array();
		if (IsModuleInstalled('socialservices'))
		{
			$arExternalAuthId[] = 'replica';
		}
		if (IsModuleInstalled('mail'))
		{
			$arExternalAuthId[] = 'email';
		}
		if (IsModuleInstalled('im'))
		{
			$arExternalAuthId[] = 'bot';
		}
		if (IsModuleInstalled('imconnector'))
		{
			$arExternalAuthId[] = 'imconnector';
		}
		if (!empty($arExternalAuthId))
		{
			$arFilter["!EXTERNAL_AUTH_ID"] = $arExternalAuthId;
		}

		if (
			CModule::IncludeModule('extranet')
			&& !CExtranet::IsIntranetUser($arParams["SITE_ID"])
		)
		{
			$arExtranetUsersId = CExtranet::GetMyGroupsUsers($arParams["SITE_ID"]);
			if (count($arExtranetUsersId) > 0)
			{
				$arFilter["ID"] = implode('|', $arExtranetUsersId);
			}
			else
			{
				$arFilter = false;
			}
		}
		else
		{
			$arFilter['!UF_DEPARTMENT'] = false;
		}

		if ($arFilter)
		{
			//be careful with field list because of CUser::FormatName()
			$dbRes = CUser::GetList('last_name', 'asc',
				$arFilter,
				array(
					"FIELDS" => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'PERSONAL_PHOTO', 'PERSONAL_GENDER', 'WORK_POSITION', 'PERSONAL_PROFESSION'),
					"NAV_PARAMS" => Array("nTopCount" => 7)
				)
			);
			while ($arUser = $dbRes->Fetch())
			{
				$arPhoto = array('IMG' => '');

				if (!$arUser['PERSONAL_PHOTO'])
				{
					switch ($arUser['PERSONAL_GENDER'])
					{
						case "M":
							$suffix = "male";
							break;
						case "F":
							$suffix = "female";
							break;
						default:
							$suffix = "unknown";
					}
					$arUser['PERSONAL_PHOTO'] = COption::GetOptionInt("socialnetwork", "default_user_picture_".$suffix, false, SITE_ID);
				}

				if ($arUser['PERSONAL_PHOTO'] > 0)
				{
					$arPhoto = CIntranetUtils::InitImage($arUser['PERSONAL_PHOTO'], 30);
				}
				$arItem = Array(
					"ID" => "IU".$arUser["ID"],
					"NAME" => CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false),
					"AVATAR" => $arPhoto['CACHE']['src'],
					"DESC" => $arUser['WORK_POSITION'] ? $arUser['WORK_POSITION'] : $arUser['PERSONAL_PROFESSION'],
				);
				$elements .= CFinder::GetFinderItem($arFinderParams, $arItem);
			}
		}
	}

	return $elements;
}