private static function _GetTreeSettings() { global $USER_FIELD_MANAGER, $CACHE_MANAGER; self::$SECTIONS_SETTINGS_CACHE = array(); $ibDept = COption::GetOptionInt('intranet', 'iblock_structure', false); $cache_id = 'timeman|structure_settings|' . $ibDept; if (CACHED_timeman_settings !== false && $CACHE_MANAGER->Read(CACHED_timeman_settings, $cache_id, "timeman_structure_" . $ibDept)) { self::$SECTIONS_SETTINGS_CACHE = $CACHE_MANAGER->Get($cache_id); } else { $arAllFields = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $ibDept . '_SECTION'); $arUFValues = array(); $arEnumFields = array('UF_TIMEMAN', 'UF_TM_REPORT_REQ', 'UF_TM_FREE', 'UF_REPORT_PERIOD'); foreach ($arEnumFields as $fld) { $dbRes = CUserFieldEnum::GetList(array(), array('USER_FIELD_ID' => $arAllFields[$fld]['ID'])); while ($arRes = $dbRes->Fetch()) { $arUFValues[$arRes['ID']] = $arRes['XML_ID']; } } $arSettings = array('UF_TIMEMAN', 'UF_TM_MAX_START', 'UF_TM_MIN_FINISH', 'UF_TM_MIN_DURATION', 'UF_TM_REPORT_REQ', 'UF_TM_REPORT_TPL', 'UF_TM_FREE', 'UF_TM_REPORT_DATE', 'UF_TM_DAY', 'UF_REPORT_PERIOD', 'UF_TM_TIME', 'UF_TM_ALLOWED_DELTA'); $arReportSettings = array('UF_TM_REPORT_DATE', 'UF_TM_DAY', 'UF_TM_TIME'); $dbRes = CIBlockSection::GetList(array("LEFT_MARGIN" => "ASC"), array('IBLOCK_ID' => $ibDept, 'ACTIVE' => 'Y'), false, array('ID', 'IBLOCK_SECTION_ID', 'UF_TIMEMAN', 'UF_TM_MAX_START', 'UF_TM_MIN_FINISH', 'UF_TM_MIN_DURATION', 'UF_TM_REPORT_REQ', 'UF_TM_REPORT_TPL', 'UF_TM_FREE', 'UF_REPORT_PERIOD', 'UF_TM_REPORT_DATE', 'UF_TM_DAY', 'UF_TM_TIME', 'UF_TM_ALLOWED_DELTA')); while ($arRes = $dbRes->Fetch()) { $arSectionSettings = array(); foreach ($arSettings as $key) { $arSectionSettings[$key] = $arRes[$key] && $arRes[$key] != '00:00' ? isset($arUFValues[$arRes[$key]]) && !in_array($key, $arReportSettings) ? $arUFValues[$arRes[$key]] : (in_array($key, $arReportSettings) ? $arRes[$key] : (is_array($arRes[$key]) ? $arRes[$key] : self::MakeShortTS($arRes[$key]))) : ($arRes['IBLOCK_SECTION_ID'] > 0 ? '_PARENT_|' . $arRes['IBLOCK_SECTION_ID'] : ''); } self::$SECTIONS_SETTINGS_CACHE[$arRes['ID']] = $arSectionSettings; } if (CACHED_timeman_settings !== false) { $CACHE_MANAGER->Set($cache_id, self::$SECTIONS_SETTINGS_CACHE); } } }