• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/utils.php
  • Класс: CIntranetUtils
  • Вызов: CIntranetUtils::_GetDeparmentsTree
static function _GetDeparmentsTree()
{
	global $CACHE_MANAGER, $DB;

	self::$SECTIONS_SETTINGS_CACHE = array(
		'TREE' => array(),
		'DATA' => array(),
	);

	$ibDept = COption::GetOptionInt('intranet', 'iblock_structure', false);
	if ($ibDept <= 0)
		return;

	$cache_dir = '/intranet/structure';
	$cache_id = 'intranet|structure2|'.$ibDept;

	$obCache = new CPHPCache();

	if ($obCache->InitCache(30*86400, $cache_id, $cache_dir))
	{
		self::$SECTIONS_SETTINGS_CACHE = $obCache->GetVars();
	}
	else
	{
		$obCache->StartDataCache();

		$CACHE_MANAGER->StartTagCache($cache_dir);

		$CACHE_MANAGER->RegisterTag("iblock_id_".$ibDept);
		$CACHE_MANAGER->RegisterTag("intranet_users");
		$CACHE_MANAGER->RegisterTag("intranet_department_structure");

		$dbRes = CIBlockSection::GetList(
			array("LEFT_MARGIN"=>"ASC"),
			array('IBLOCK_ID' => $ibDept, 'ACTIVE' => 'Y'),
			false,
			array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'UF_HEAD', 'SECTION_PAGE_URL', 'DEPTH_LEVEL',)
		);

		while ($arRes = $dbRes->Fetch())
		{
			if (empty($arRes['IBLOCK_SECTION_ID']))
				$arRes['IBLOCK_SECTION_ID'] = 0;

			if (empty(self::$SECTIONS_SETTINGS_CACHE['TREE'][$arRes['IBLOCK_SECTION_ID']]))
				self::$SECTIONS_SETTINGS_CACHE['TREE'][$arRes['IBLOCK_SECTION_ID']] = array();

			self::$SECTIONS_SETTINGS_CACHE['TREE'][$arRes['IBLOCK_SECTION_ID']][] = $arRes['ID'];
			self::$SECTIONS_SETTINGS_CACHE['DATA'][$arRes['ID']] = array(
				'ID' => $arRes['ID'],
				'NAME' => $arRes['NAME'],
				'IBLOCK_SECTION_ID' => $arRes['IBLOCK_SECTION_ID'],
				'UF_HEAD' => $arRes['UF_HEAD'],
				'SECTION_PAGE_URL' => $arRes['SECTION_PAGE_URL'],
				'DEPTH_LEVEL' => $arRes['DEPTH_LEVEL'],
				'EMPLOYEES' => array()
			);
		}

		$dbRes = $DB->query("
			SELECT BUF.VALUE_ID AS ID, BUF.VALUE_INT AS UF_DEPARTMENT
				FROM b_utm_user BUF
					LEFT JOIN b_user_field UF ON BUF.FIELD_ID = UF.ID
					LEFT JOIN b_user U ON BUF.VALUE_ID = U.ID
				WHERE ( U.ACTIVE = 'Y' )
					AND ( UF.FIELD_NAME = 'UF_DEPARTMENT' )
					AND ( BUF.VALUE_INT IS NOT NULL AND BUF.VALUE_INT <> 0 )
		");
		while ($arRes = $dbRes->fetch())
		{
			$dpt = $arRes['UF_DEPARTMENT'];
			if (isset(self::$SECTIONS_SETTINGS_CACHE['DATA'][$dpt]) && is_array(self::$SECTIONS_SETTINGS_CACHE['DATA'][$dpt]))
				self::$SECTIONS_SETTINGS_CACHE['DATA'][$dpt]['EMPLOYEES'][] = $arRes['ID'];
		}

		$CACHE_MANAGER->EndTagCache();
		$obCache->EndDataCache(self::$SECTIONS_SETTINGS_CACHE);
	}
}