• Модуль: 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;
}