Link

Verze:

18. 07. 2025

Zodpovědná osoba:

Dominik Šlechta

Poslední aktualizace:

18. 07. 2025, kocandajan488@gmail.com

<?php

namespace Filters;

use App\Repository\MenuRepository;
use Contributte\Translation\Translator;
use Nette;
use Nette\Application\BadRequestException;
use Nette\Utils\Strings;

class Link
{
	use Nette\SmartObject;

	public function __construct(
		private readonly Translator     $translator,
		private readonly MenuRepository $menuRepository,
	) {}

	/**
	 * @throws BadRequestException
	 */
	public function __invoke($menu, $locale = null)
	{
		return $this->create($menu, $locale);
	}

	/**
	 * @throws BadRequestException
	 */
	public function create($menu, $locale = null)
	{
		if (!$locale) {
			$locale = $this->translator->getLocale();
		}

		if ($menu instanceof Nette\Database\Table\ActiveRow) {
			$menu = $menu->toArray();
		}

		if (is_object($menu)) {
			$menu = (array) $menu;
		}

		if (!is_array($menu) || empty($menu)) {
			return '';
		}

		if (1 === $menu['id']) {
			return '/' . $locale;
		}

		if (is_numeric($menu['url'])) {
			$new = $this->menuRepository->page($menu['url'], true);

			return "/$locale/m-" . $new['id'] . '-' . $this->getName($new);
		}

		if ($menu['url']) {
			return $menu['url'];
		}

		return "/$locale/m-" . $menu['id'] . '-' . $this->getName($menu);
	}

	private function getName($page): string
	{
		return Strings::webalize(strip_tags(html_entity_decode($page['name'])));
	}
}