WIP: Implement menu/navigation
This commit is contained in:
@@ -10,7 +10,7 @@ use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class MenuBuilder
|
||||
abstract class AbstractMenuBuilder
|
||||
{
|
||||
public function __construct(
|
||||
protected FactoryInterface $factory,
|
||||
@@ -20,42 +20,26 @@ class MenuBuilder
|
||||
) {
|
||||
}
|
||||
|
||||
private function assertMobile(array $options): bool
|
||||
protected function assertMobile(array $options): bool
|
||||
{
|
||||
return isset($options['mobile']) && true === (bool) $options['mobile'];
|
||||
}
|
||||
|
||||
private function createRootElement(bool $isMobile): ItemInterface
|
||||
protected function createRootElement(string $class): ItemInterface
|
||||
{
|
||||
return $this
|
||||
->factory->createItem('root')
|
||||
->setChildrenAttribute('class', 'menu'.($isMobile ? ' menu--mobile' : ''))
|
||||
->setChildrenAttribute('class', $class)
|
||||
;
|
||||
}
|
||||
|
||||
private function getDefaultRouteParameters(string $parameter = 'id', string $default = '0'): array
|
||||
protected function getDefaultRouteParameters(string $parameter = 'id', string $default = '0'): array
|
||||
{
|
||||
return [$parameter => $this->requestStack->getMainRequest()->get($parameter, $default)];
|
||||
}
|
||||
|
||||
public function createMainMenu(array $options): ItemInterface
|
||||
protected function addLogoutItem(ItemInterface $menu, bool $isMobile = false): void
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $this->security->getUser();
|
||||
$userLabel = $user->getUserIdentifier();
|
||||
|
||||
$isMobile = $this->assertMobile($options);
|
||||
$menu = $this->createRootElement($isMobile);
|
||||
|
||||
if ($this->security->isGranted('ROLE_TEAMER')) {
|
||||
$menu
|
||||
->addChild('Profil', ['route' => 'app_teamer_profile'])
|
||||
->setLinkAttribute('title', 'Benutzer: '.$userLabel)
|
||||
->setExtra('icon', 'user')
|
||||
->setExtra('icon_only', false === $isMobile)
|
||||
;
|
||||
}
|
||||
|
||||
$token = $this->security->getToken();
|
||||
|
||||
if ($token instanceof SwitchUserToken) {
|
||||
@@ -85,6 +69,5 @@ class MenuBuilder
|
||||
;
|
||||
}
|
||||
|
||||
return $menu;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Menu;
|
||||
|
||||
use Knp\Menu\ItemInterface;
|
||||
|
||||
class AdminMenuBuilder extends AbstractMenuBuilder
|
||||
{
|
||||
public function createHeaderMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement();
|
||||
$this->addLogoutItem($menu);
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
public function createMainMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement();
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
public function createMobileMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement(true);
|
||||
$this->addLogoutItem($menu, true);
|
||||
|
||||
return $menu;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Menu;
|
||||
|
||||
use Knp\Menu\ItemInterface;
|
||||
|
||||
class ManagerMenuBuilder extends AbstractMenuBuilder
|
||||
{
|
||||
public function createHeaderMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement();
|
||||
|
||||
$this->addLogoutItem($menu);
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
public function createMainMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement();
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
public function createMobileMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement(true);
|
||||
|
||||
$this->addLogoutItem($menu, true);
|
||||
|
||||
return $menu;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace App\Menu;
|
||||
|
||||
use Knp\Menu\ItemInterface;
|
||||
|
||||
class TeamerMenuBuilder extends AbstractMenuBuilder
|
||||
{
|
||||
public function createHeaderMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement('menu menu--header');
|
||||
|
||||
$this->addLogoutItem($menu);
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
public function createMainMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement('menu menu--main');
|
||||
|
||||
|
||||
$menu
|
||||
->addChild('Einsatzübersicht', ['route' => 'app_teamer_disposition_index'])
|
||||
->setLinkAttributes([
|
||||
'title' => 'Einsatzübersicht',
|
||||
'class' => 'icon-link',
|
||||
])
|
||||
->setExtra('icon', 'calendar')
|
||||
->setExtra('icon_only', false)
|
||||
;
|
||||
|
||||
|
||||
$profileMenu = $menu
|
||||
->addChild('Mein Profil')
|
||||
->setExtra('icon', 'user')
|
||||
->setExtra('icon_only', false)
|
||||
;
|
||||
$profileMenu
|
||||
->addChild('Stammdaten und Foto', ['route' => 'app_teamer_profile_index'])
|
||||
->setLinkAttributes([
|
||||
'title' => 'Mein Profil',
|
||||
])
|
||||
;
|
||||
$profileMenu
|
||||
->addChild('Jobprofile & Skills', ['route' => 'app_teamer_profile_skills'])
|
||||
->setLinkAttributes([
|
||||
'title' => 'Jobprofile & Skills',
|
||||
])
|
||||
;
|
||||
$profileMenu
|
||||
->addChild('Meine Verfügbarkeit', ['route' => 'app_teamer_profile_availabilities'])
|
||||
->setLinkAttributes([
|
||||
'title' => 'Meine Verfügbarkeit',
|
||||
])
|
||||
;
|
||||
|
||||
|
||||
$dispositionMenu = $menu
|
||||
->addChild('Meine Einsätze')
|
||||
->setExtra('icon', 'calendar')
|
||||
->setExtra('icon_only', false)
|
||||
;
|
||||
$dispositionMenu
|
||||
->addChild('Merkliste', ['route' => 'app_teamer_disposition_watchlist'])
|
||||
->setLinkAttributes([
|
||||
'title' => 'Merkliste',
|
||||
])
|
||||
;
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
public function createMobileMenu(array $options): ItemInterface
|
||||
{
|
||||
$menu = $this->createRootElement('menu menu--mobile');
|
||||
|
||||
$menu
|
||||
->addChild('Profil', ['route' => 'app_teamer_profile_index'])
|
||||
->setLinkAttributes([
|
||||
'title' => 'Mein Profil',
|
||||
'class' => 'icon-link',
|
||||
])
|
||||
->setExtra('icon', 'user')
|
||||
->setExtra('icon_only', false)
|
||||
;
|
||||
|
||||
$this->addLogoutItem($menu, true);
|
||||
|
||||
return $menu;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user