• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/itrmenu.php
  • Класс: BitrixImBotItrMenu
  • Вызов: ItrMenu::printTrack
public function printTrack(): ?array
{
	$menuState = $this->getState();
	if (!is_array($menuState) || !array_key_exists('track', $menuState))
	{
		return null;
	}

	$menuData = $this->getStructure();
	if (!is_array($menuData))
	{
		return null;
	}

	$startMenuItemId = $this->getStartItemId();
	$previousMenuItem = $this->getItem($startMenuItemId);

	$blocks = [];
	foreach ($menuState['track'] as $itemId)
	{
		$menuItem = $this->getItem($itemId);
		if (!$menuItem && $itemId != self::MENU_EXIT_ID)
		{
			continue;
		}
		if ($itemId == $startMenuItemId)
		{
			$previousMenuItem = $menuItem;
			continue;
		}

		$buttonData = $this->detectClickedButton($itemId, $previousMenuItem, $menuState);
		$answer = $buttonData['text'] ?? '';
		if (isset($previousMenuItem['buttons']))
		{
			foreach ($previousMenuItem['buttons'] as $buttonData)
			{
				if ($buttonData['action'] == self::MENU_ACTION_NEXT && $buttonData['action_value'] == $itemId)
				{
					$answer = $buttonData['text'];
					break;
				}
				if ($buttonData['action'] == self::MENU_ACTION_QUEUE)
				{
					if (
						isset($menuState['menu_action'])
						&& !empty($menuState['menu_action'])
						&& isset($buttonData['action_value'])
						&& !empty($buttonData['action_value'])
						&& $menuState['menu_action'] === $buttonData['action_value']
					)
					{
						$answer = $buttonData['text'];
						break;
					}
					if (
						(
							!isset($menuState['menu_action'])
							|| empty($menuState['menu_action'])
						)
						&&
						(
							!isset($buttonData['action_value'])
							|| empty($buttonData['action_value'])
						)
					)
					{
						$answer = $buttonData['text'];
						break;
					}
				}
				elseif ($buttonData['action_value'] == self::MENU_EXIT_ID)
				{
					$answer = $buttonData['text'];
					break;
				}
			}
		}

		$blocks[] = [
			'id' => $itemId,
			'name' => $previousMenuItem['text'],
			'value' => $answer,
		];

		$previousMenuItem = $menuItem;
	}

	return $blocks;
}