144 lines
4.2 KiB
PHP
144 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Menu;
|
|
|
|
use App\Entity\User;
|
|
use Knp\Menu\FactoryInterface;
|
|
use Knp\Menu\ItemInterface;
|
|
use Symfony\Bundle\SecurityBundle\Security;
|
|
use Symfony\Component\HttpFoundation\RequestStack;
|
|
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
|
|
use Symfony\Component\Uid\Uuid;
|
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
|
|
|
abstract class AbstractMenuBuilder
|
|
{
|
|
public function __construct(
|
|
protected FactoryInterface $factory,
|
|
protected Security $security,
|
|
protected RequestStack $requestStack,
|
|
protected TranslatorInterface $translator,
|
|
) {
|
|
}
|
|
|
|
protected function createRootElement(): ItemInterface
|
|
{
|
|
return $this->factory->createItem('root');
|
|
}
|
|
|
|
protected function getDefaultRouteParameters(string $parameter = 'id', string $default = '0'): array
|
|
{
|
|
$request = $this->requestStack->getMainRequest();
|
|
|
|
return [
|
|
$parameter => $request->get($parameter, $default),
|
|
'r' => $request->get('r'),
|
|
];
|
|
}
|
|
|
|
protected function addAdminItem(ItemInterface $menu): void
|
|
{
|
|
if ($this->security->isGranted('ROLE_ADMIN')) {
|
|
$this->addDivider($menu);
|
|
$menu->addChild('zum Adminbereich', [
|
|
'route' => 'app_admin_index',
|
|
'linkAttributes' => [
|
|
'title' => 'zum Adminbereich',
|
|
],
|
|
'extras' => [
|
|
'icon' => 'user',
|
|
],
|
|
]);
|
|
}
|
|
}
|
|
|
|
protected function addManagerItem(ItemInterface $menu): void
|
|
{
|
|
if ($this->security->isGranted('ROLE_MANAGER')) {
|
|
$this->addDivider($menu);
|
|
$menu->addChild('zum Managementbereich', [
|
|
'route' => 'app_manager_index',
|
|
'linkAttributes' => [
|
|
'title' => 'zum Managementbereich',
|
|
],
|
|
'extras' => [
|
|
'icon' => 'user',
|
|
],
|
|
]);
|
|
}
|
|
}
|
|
|
|
protected function addTeamerItem(ItemInterface $menu): void
|
|
{
|
|
if ($this->security->isGranted('ROLE_TEAMER')) {
|
|
$this->addDivider($menu);
|
|
$menu->addChild('zum Teambereich', [
|
|
'route' => 'app_teamer_index',
|
|
'linkAttributes' => [
|
|
'title' => 'zum Teambereich',
|
|
],
|
|
'extras' => [
|
|
'icon' => 'user',
|
|
],
|
|
]);
|
|
}
|
|
}
|
|
|
|
protected function addHouseManagerItem(ItemInterface $menu): void
|
|
{
|
|
if ($this->security->isGranted('ROLE_HOUSE_MANAGER')) {
|
|
$this->addDivider($menu);
|
|
$menu->addChild('zum Hausleitungsbereich', [
|
|
'route' => 'app_house_manager_index',
|
|
'linkAttributes' => [
|
|
'title' => 'zum Hausleitungsbereich',
|
|
],
|
|
'extras' => [
|
|
'icon' => 'user',
|
|
],
|
|
]);
|
|
}
|
|
}
|
|
|
|
protected function addLogoutItem(ItemInterface $menu): void
|
|
{
|
|
$this->addDivider($menu);
|
|
|
|
$token = $this->security->getToken();
|
|
|
|
if ($token instanceof SwitchUserToken) {
|
|
/** @var User $originalUser */
|
|
$originalUser = $token->getOriginalToken()->getUser();
|
|
$menu->addChild('zum eigenen Benutzer', [
|
|
'route' => $originalUser->getDefaultRoute(),
|
|
'routeParameters' => ['_switch_user' => '_exit'],
|
|
'linkAttributes' => [
|
|
'title' => 'zurück',
|
|
],
|
|
'extras' => [
|
|
'icon' => 'logout',
|
|
],
|
|
]);
|
|
} else {
|
|
$menu->addChild('Logout', [
|
|
'route' => 'app_security_logout',
|
|
'linkAttributes' => [
|
|
'title' => 'Logout',
|
|
],
|
|
'extras' => [
|
|
'icon' => 'logout',
|
|
],
|
|
]);
|
|
}
|
|
}
|
|
|
|
protected function addDivider(ItemInterface $menu): void
|
|
{
|
|
$menu->addChild(Uuid::v4(), [
|
|
'extras' => [
|
|
'divider' => true,
|
|
],
|
|
]);
|
|
}
|
|
}
|