<?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'])));
}
}