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

	$elements = '';
	$arElement = array();
	$arElements = array();

	$arLRU = CAccess::GetLastRecentlyUsed($this->id);
	if(!empty($arLRU))
	{
		$arFinderParams = Array(
			'PROVIDER' => $this->id,
			'TYPE' => 3,
		);
		$arLast = array();
		$arLastID = array();
		foreach($arLRU as $val)
		{
			if (mb_substr($val, 0, 2) == 'DR')
			{
				$id = mb_substr($val, 2);
				$arLast['DR'][] = $id;
				$arLastID[$id] = $id;
			}
			else if (mb_substr($val, 0, 1) == 'D')
			{
				$id = mb_substr($val, 1);
				$arLast['D'][] = $id;
				$arLastID[$id] = $id;
			}
			else if (mb_substr($val, 0, 2) == 'IU')
				$arLast['U'][] = mb_substr($val, 2);
		}
		$dbRes = CIBlockSection::GetList(
			array('ID' => 'ASC'),
			array('IBLOCK_ID' => COption::GetOptionInt('intranet', 'iblock_structure'), 'ID' => $arLastID),
			false,
			array('ID', 'NAME')
		);
		while ($arSection = $dbRes->Fetch())
		{
			$arElement[$arSection['ID']] = $arSection;
		}
		if (!empty($arLast['DR']))
		{
			foreach ($arLast['DR'] as $value)
			{
				$arItem = Array(
					"ID" => 'DR'.$arElement[$value]['ID'],
					"NAME" => $arElement[$value]['NAME'].': '.GetMessage("authprov_check_dr"),
					"AVATAR" => '/bitrix/js/main/core/images/access/avatar-user-everyone.png',
				);
				$arElements['DR'.$value] = CFinder::GetFinderItem($arFinderParams, $arItem);
			}
		}
		if (!empty($arLast['D']))
		{
			foreach ($arLast['D'] as $value)
			{
				$arItem = Array(
					"ID" => 'D'.$arElement[$value]['ID'],
					"NAME" => $arElement[$value]['NAME'].': '.GetMessage("authprov_check_d"),
					"AVATAR" => '/bitrix/js/main/core/images/access/avatar-user-everyone.png',
				);
				$arElements['D'.$value] = CFinder::GetFinderItem($arFinderParams, $arItem);
			}
		}
		if (!empty($arLast['U']))
		{
			//be careful with field list because of CUser::FormatName()
			$res = CUser::GetList("LAST_NAME", "asc",
				array("ID"=>implode("|", $arLast['U'])),
				array("FIELDS" => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'PERSONAL_PHOTO', 'PERSONAL_GENDER', 'WORK_POSITION', 'PERSONAL_PROFESSION'))
			);
			while($arUser = $res->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);
			}
		}

		foreach($arLRU as $val)
		{
			$elements .= $arElements[$val] ?? '';
		}
	}

	$arFinderParams = Array(
		'PROVIDER' => 'intranet',
		'TYPE' => 'structure',
	);
	$obCache = new CPHPCache();
	$IBlockID = COption::GetOptionInt('intranet', 'iblock_structure');
	$arSecFilter = array('IBLOCK_ID' => $IBlockID);
	$arStructure = array();
	$arSections = array();

	if (!CModule::IncludeModule('extranet') || CExtranet::IsIntranetUser())
	{
		$cache_id = md5(serialize($arSecFilter));
		$cacheDir = '/intranet';
		if($obCache->InitCache(30*86400, $cache_id, $cacheDir))
		{
			$vars = $obCache->GetVars();
			$arSections = $vars["SECTIONS"];
			$arStructure = $vars["STRUCTURE"];
		}
		elseif ($obCache->StartDataCache())
		{
			global $CACHE_MANAGER;
			$CACHE_MANAGER->StartTagCache($cacheDir);
			$CACHE_MANAGER->RegisterTag("iblock_id_".$IBlockID);

			$dbRes = CIBlockSection::GetTreeList($arSecFilter);

			while ($arRes = $dbRes->Fetch())
			{
				$iblockSectionID = intval($arRes['IBLOCK_SECTION_ID']);

				if (!isset($arStructure[$iblockSectionID]) || !is_array($arStructure[$iblockSectionID]))
					$arStructure[$iblockSectionID] = array($arRes['ID']);
				else
					$arStructure[$iblockSectionID][] = $arRes['ID'];

				$arSections[$arRes['ID']] = $arRes;
			}
			$CACHE_MANAGER->EndTagCache();
			$obCache->EndDataCache(array("SECTIONS" => $arSections, "STRUCTURE" => $arStructure));
		}
	}

	$arItem = self::InEmployeeDrawStructure($arStructure, $arSections, 0);
	$elementsStructure = CFinder::GetFinderItem($arFinderParams, $arItem);

	$arPanels = Array(
		Array(
			"NAME" => GetMessage("authprov_panel_last"),
			"ELEMENTS" => $elements,
		),
		Array(
			"NAME" => GetMessage("authprov_panel_group"),
			"ELEMENTS" => $elementsStructure,
		),
		Array(
			"NAME" => GetMessage("authprov_panel_search"),
			"ELEMENTS" => CFinder::GetFinderItem(Array("TYPE" => "text"), Array("TEXT" => GetMessage("authprov_panel_search_text"))),
			"SEARCH" => "Y",
		),
	);
	$html = CFinder::GetFinderAppearance($arFinderParams, $arPanels);

	return array("HTML"=>$html);
}