- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/UI/LeftMenu/Preset/PresetAbstract.php
- Класс: BitrixIntranetUILeftMenuPresetPresetAbstract
- Вызов: PresetAbstract::oldToNewStructure
static function oldToNewStructure(array $oldData, array $newData): array
{
$data = [
'shown' => isset($oldData['show']) && is_array($oldData['show']) ? $oldData['show'] : [],
'hidden' => isset($oldData['hide']) && is_array($oldData['hide']) ? $oldData['hide'] : []
];
$result = ['shown' => [], 'hidden' => []];
$systemGroups = [];
$replaceItems = [
'menu_live_feed' => 'menu_teamwork',
'menu_marketplace_sect' => 'menu_marketplace_group'
];
foreach ($result as $visibility => $items)
{
foreach ($data[$visibility] as $itemId)
{
if (array_key_exists($itemId, $replaceItems))
{
$groupId = $replaceItems[$itemId];
$expectedStructure = null;
foreach ($newData as $structureContent)
{
if (is_array($structureContent) && array_key_exists($groupId , $structureContent))
{
$expectedStructure = $structureContent[$groupId];
break;
}
}
if ($expectedStructure !== null)
{
$result[$visibility][$groupId] = [$itemId];
$systemGroups[$groupId] = [$visibility, $expectedStructure];
}
continue;
}
$result[$visibility][] = $itemId;
}
}
foreach ($systemGroups as $groupId => [$visibility, $expectedStructure])
{
$menu = &$result[$visibility];
$foundItems = array_intersect($menu, $expectedStructure);
$menu[$groupId] = array_merge(
$menu[$groupId],
array_values($foundItems)
);
$notFoundItems = array_diff($expectedStructure, $menu[$groupId]);
if ($visibility === 'shown')
{
$notFoundItems = array_diff($notFoundItems,
array_intersect($result['hidden'], $expectedStructure)
);
$menu[$groupId] = array_merge(
$menu[$groupId],
array_values($notFoundItems)
);
}
$result[$visibility] = array_diff($menu, $menu[$groupId]);
unset($menu);
}
return ['shown' => $result['shown'], 'hidden' => $result['hidden']];
}