- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/binding/menu.php
- Класс: BitrixIntranetBindingis
- Вызов: is::getMenuItems
static function getMenuItems($sectionCode, $menuCode, array $params = [])
{
static $bindings = [];
static $extLoaded = [];
$inline = (isset($params['inline']) && $params['inline'] === true);
$context = (isset($params['context']) && is_array($params['context']))
? $params['context'] : [];
if (!$bindings)
{
$cache = new CPHPCache;
$cacheManager = $GLOBALS['CACHE_MANAGER'];
$cacheTag = 'intranet_menu_binding';
$cacheKey = $cacheTag . '_' . LANGUAGE_ID;
if (Loader::includeModule('landing'))
{
if (Rights::hasAdditionalRight('extension', 'knowledge', false, true))
{
$cacheKey .= '_extension';
if (Rights::hasAdditionalRight('create', 'knowledge', false, true))
{
$cacheKey .= '_create';
}
}
}
$cacheDir = '/intranet/menu_binding';
if ($cache->initCache(8640000, $cacheKey, $cacheDir))
{
[$bindings, self::$needProvider] = $cache->getVars();
}
else
{
$cache->startDataCache();
$cacheManager->startTagCache($cacheDir);
$cacheManager->registerTag($cacheTag);
$bindings = self::getBindings();
$cacheManager->endTagCache();
$cache->endDataCache([$bindings, self::$needProvider]);
}
}
if (is_string($sectionCode) && is_string($menuCode))
{
$sectionCode = mb_strtolower($sectionCode);
$menuCode = mb_strtolower($menuCode);
if (isset($bindings[$sectionCode]['items'][$menuCode]))
{
// 'group' by sections
$returnItems = [];
$sections = self::SECTIONS;
foreach ($sections as $globalSectionCode)
{
if ($globalSectionCode == $sections['other'])
{
if ($returnItems)
{
$returnItems[] = [
'delimiter' => true
];
}
}
else
{
$returnItems[] = [
'text' => Loc::getMessage('INTRANET_BIND_MENU_SECTION_' . mb_strtoupper($globalSectionCode)),
'delimiter' => true
];
}
$existItems = false;
foreach ($bindings[$sectionCode]['items'][$menuCode] as $item)
{
if (isset($item['extension']))
{
if (!isset($extLoaded[$item['extension']]))
{
$extLoaded[$item['extension']] = true;
BitrixMainUIExtension::load(
$item['extension']
);
}
}
if ($item['sectionCode'] == $globalSectionCode)
{
$existItems = true;
$returnItems[] = $item;
}
}
if (!$existItems)
{
array_pop($returnItems);
}
}
// for rest items wee need rebuild for correct links
if (self::$needProvider)
{
$returnItems = self::setItemsProvider($returnItems, $context);
}
// marketplace item
$marketCode = mb_strtoupper($sectionCode . '@' . $menuCode);
$placementMap = array_flip(static::getRestPlacementMap());
if (isset($placementMap[$marketCode]))
{
if ($returnItems)
{
$returnItems[] = [
'delimiter' => true
];
}
$returnItems[] = [
'href' => Marketplace::getMainDirectory() . '?placement=' . $placementMap[$marketCode],
'text' => Loc::getMessage('INTRANET_BIND_MENU_APPS_2')
];
}
if ($inline)
{
return [
'text' => Loc::getMessage('INTRANET_BIND_MENU_TITLE'),
'items' => $returnItems
];
}
return $returnItems;
}
}
return [];
}