- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/UI/LeftMenu/Preset/PresetAbstract.php
- Класс: BitrixIntranetUILeftMenuPresetPresetAbstract
- Вызов: PresetAbstract::getSavedStructure
private function getSavedStructure(): ?array
{
static $savedStructure;
if ($savedStructure)
{
return $savedStructure;
}
$data = CUserOptions::GetOption("intranet", "left_menu_sorted_items_" . $this->getSiteId());
if (!$data)
{
return null;
}
if (!isset($data['version']))
{
$savedStructure = self::oldToNewStructure($data, $this->getStructure());
}
else
{
$flatOwnStructure = self::flatten(array_merge($data['show'], $data['hide']));
$expectedStructure = $this->getStructure();
$notNaturalSelection = function(&$group, $key) use (&$notNaturalSelection, $flatOwnStructure)
{
if (is_array($group))
{
$needToSelect = false;
foreach ($group as $menuKey => $menuItem)
{
if (is_array($menuItem))
{
$needToSelect = true;
}
else if (array_key_exists($menuItem, $flatOwnStructure))
{
unset($group[$menuKey]);
}
}
if ($needToSelect)
{
array_walk($group, $notNaturalSelection);
foreach ($group as $menuKey => $menuItem)
{
if (empty($menuItem))
{
unset($group[$menuKey]);
}
}
}
}
};
array_walk($expectedStructure, $notNaturalSelection);
$savedStructure = array_merge_recursive($data, ['show' => $expectedStructure['shown'], 'hide' => $expectedStructure['hidden']]);
$savedStructure = ['shown' => $savedStructure['show'], 'hidden' => $savedStructure['hide']];
}
return $savedStructure;
}