- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/binding/menu.php
- Класс: BitrixIntranetBindingMenu
- Вызов: Menu::getBindings
static function getBindings()
{
$map = self::getMap();
// local bindings, from another modules
$event = new Event('intranet', 'onBuildBindingMenu', []);
$event->send();
foreach ($event->getResults() as $result)
{
if ($result->getType() != EventResult::ERROR)
{
$places = $result->getParameters();
if (is_array($places))
{
foreach ($places as $place)
{
// validate necessary keys
if (
!isset($place['items']) ||
!isset($place['bindings'])
)
{
continue;
}
$items = self::getValidItems($place['items']);
$bindings = self::getValidBindings($place['bindings']);
// fill map with items
if ($items && $bindings)
{
foreach ($bindings as $bindingCode => $binding)
{
foreach ($map[$bindingCode]['items'] as $itemsCode => &$menu)
{
if (
(
!$binding['include'] ||
in_array($itemsCode, $binding['include'])
)
&&
(
!in_array($itemsCode, $binding['exclude'])
)
)
{
$menu = array_merge($menu, $items);
}
}
unset($menu);
}
}
}
}
}
}
// rest bindings
if (BitrixMainLoader::includeModule('rest'))
{
$menuSectionCode = self::SECTIONS['marketplace'];
$groups = [];// array for group items position storage
$res = BitrixRestPlacementTable::getList([
'select' => [
'ID',
'APP_ID',
'PLACEMENT',
'TITLE',
'APP_NAME' => 'REST_APP.APP_NAME',
'GROUP_NAME',
'LANG_ALL',
],
'filter' => [
'=PLACEMENT' => array_keys(static::getRestPlacementMap())
],
'order' => [
'ID' => 'desc'
]
]);
foreach ($res->fetchCollection() as $row)
{
if (!isset(static::getRestPlacementMap()[$row->getPlacement()]))
{
continue;
}
$placementLang = [];
$placementLangAll = [];
if (!is_null($row->getLangAll()))
{
foreach ($row->getLangAll() as $lang)
{
if (trim($lang->getTitle()))
{
$placementLangAll[$lang->getLanguageId()] = [
'TITLE' => trim($lang->getTitle()),
'GROUP_NAME' => $lang->getGroupName(),
];
}
}
}
if (!empty($placementLangAll))
{
$langList = BitrixRestLang::listLanguage();
foreach ($langList as $lang)
{
if ($placementLangAll[$lang])
{
$placementLang = $placementLangAll[$lang];
break;
}
}
if (!$placementLang['TITLE'])
{
$placementLang = reset($placementLangAll);
}
}
elseif ($row->getRestApp())
{
$placementLang['TITLE'] = $row->getRestApp()->getAppName();
}
if (!trim($placementLang['TITLE']))
{
$placementLang['TITLE'] = BitrixRestPlacementTable::getDefaultTitle($row->getId());
}
[$bindingCode, $menuCode] = explode('@', static::getRestPlacementMap()[$row->getPlacement()]);
$bindingCode = mb_strtolower($bindingCode);
$menuCode = mb_strtolower($menuCode);
if (isset($map[$bindingCode]['items'][$menuCode]))
{
self::$needProvider = true;
$oneItem = [
'id' => 'rest_' . $row->getId(),
'system' => false,
'text' => htmlspecialcharsbx($placementLang['TITLE']),
'sort' => 500,
'sectionCode' => $menuSectionCode,
'linkProvider' => 'marketplace',
'params' => [
'app_id' => $row->getAppId(),
'placement_id' => $row->getId(),
'placement' => $row->getPlacement(),
]
];
if ($placementLang['GROUP_NAME'])
{
$groupingKey = $row->getPlacement() . '_' . $placementLang['GROUP_NAME'];
if (isset($groups[$groupingKey]))
{
$i = $groups[$groupingKey];
$map[$bindingCode]['items'][$menuCode][$i]['items'][] = $oneItem;
}
else
{
$map[$bindingCode]['items'][$menuCode][] = [
'text' => $placementLang['GROUP_NAME'],
'sort' => 500,
'sectionCode' => $menuSectionCode,
'items' => [
$oneItem
]
];
$groups[$groupingKey] = count($map[$bindingCode]['items'][$menuCode]) - 1;
}
}
else
{
$map[$bindingCode]['items'][$menuCode][] = $oneItem;
}
}
}
}
return $map;
}