diff --git a/assets/styles/components/menu.css b/assets/styles/components/menu.css index 7ea260a..253bba7 100644 --- a/assets/styles/components/menu.css +++ b/assets/styles/components/menu.css @@ -1,7 +1,15 @@ -.menu { +.menu--header { @apply flex items-center space-x-4 h-8; } +.menu--main { + @apply flex flex-col divide-y divide-gray-200; +} + +.menu--main > li { + @apply py-4 first:pt-0 last:pb-0; +} + .menu--mobile { @apply flex-col space-x-0 h-auto divide-y divide-gray-200; } @@ -10,7 +18,8 @@ @apply py-4 w-full; } -.menu a { +.menu a, +.menu div { @apply uppercase hover:text-slate-700 text-slate-900 text-sm lg:text-base; } @@ -18,11 +27,20 @@ @apply text-lg; } +.menu ul { + @apply pl-7 pt-1; +} + +.menu ul a { + @apply text-sm; +} + .menu .current > a, .menu .active > a { @apply text-slate-900 font-bold; } -.menu .icon-link { +.menu .icon-link, +.menu .icon-section { @apply flex items-center space-x-2; } diff --git a/config/services.yaml b/config/services.yaml index ee3b5db..45a472b 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -56,13 +56,47 @@ services: $intlExtension: '@twig.extension.intl' $environment: '%kernel.environment%' - App\Menu\MenuBuilder: + App\Menu\AdminMenuBuilder: arguments: $factory: '@knp_menu.factory' tags: + - name: knp_menu.menu_builder + method: createHeaderMenu + alias: admin_header - name: knp_menu.menu_builder method: createMainMenu - alias: main + alias: admin_main + - name: knp_menu.menu_builder + method: createMobileMenu + alias: admin_mobile + + App\Menu\ManagerMenuBuilder: + arguments: + $factory: '@knp_menu.factory' + tags: + - name: knp_menu.menu_builder + method: createHeaderMenu + alias: manager_header + - name: knp_menu.menu_builder + method: createMainMenu + alias: manager_main + - name: knp_menu.menu_builder + method: createMobileMenu + alias: manager_mobile + + App\Menu\TeamerMenuBuilder: + arguments: + $factory: '@knp_menu.factory' + tags: + - name: knp_menu.menu_builder + method: createHeaderMenu + alias: teamer_header + - name: knp_menu.menu_builder + method: createMainMenu + alias: teamer_main + - name: knp_menu.menu_builder + method: createMobileMenu + alias: teamer_mobile App\Service\Upload\UploadHandler: arguments: diff --git a/package-lock.json b/package-lock.json index c4bca95..14c4ce6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "myep-team", + "name": "html", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/src/Controller/Teamer/Disposition/IndexController.php b/src/Controller/Teamer/Disposition/IndexController.php new file mode 100644 index 0000000..a517a1b --- /dev/null +++ b/src/Controller/Teamer/Disposition/IndexController.php @@ -0,0 +1,18 @@ +render(''); + } +} \ No newline at end of file diff --git a/src/Controller/Teamer/Disposition/WatchlistController.php b/src/Controller/Teamer/Disposition/WatchlistController.php new file mode 100644 index 0000000..9d88c1d --- /dev/null +++ b/src/Controller/Teamer/Disposition/WatchlistController.php @@ -0,0 +1,18 @@ +render(''); + } +} \ No newline at end of file diff --git a/src/Controller/Teamer/Profile/AvailabilitiesController.php b/src/Controller/Teamer/Profile/AvailabilitiesController.php new file mode 100644 index 0000000..1a670c7 --- /dev/null +++ b/src/Controller/Teamer/Profile/AvailabilitiesController.php @@ -0,0 +1,18 @@ +render(''); + } +} \ No newline at end of file diff --git a/src/Controller/Teamer/ProfileController.php b/src/Controller/Teamer/Profile/IndexController.php similarity index 95% rename from src/Controller/Teamer/ProfileController.php rename to src/Controller/Teamer/Profile/IndexController.php index 3225890..db802fd 100644 --- a/src/Controller/Teamer/ProfileController.php +++ b/src/Controller/Teamer/Profile/IndexController.php @@ -1,6 +1,6 @@ render(''); + } +} \ No newline at end of file diff --git a/src/Menu/MenuBuilder.php b/src/Menu/AbstractMenuBuilder.php similarity index 65% rename from src/Menu/MenuBuilder.php rename to src/Menu/AbstractMenuBuilder.php index 3fdc687..b61efcb 100644 --- a/src/Menu/MenuBuilder.php +++ b/src/Menu/AbstractMenuBuilder.php @@ -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; } } diff --git a/src/Menu/AdminMenuBuilder.php b/src/Menu/AdminMenuBuilder.php new file mode 100644 index 0000000..073f7f9 --- /dev/null +++ b/src/Menu/AdminMenuBuilder.php @@ -0,0 +1,31 @@ +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; + } +} \ No newline at end of file diff --git a/src/Menu/ManagerMenuBuilder.php b/src/Menu/ManagerMenuBuilder.php new file mode 100644 index 0000000..4c2dd9f --- /dev/null +++ b/src/Menu/ManagerMenuBuilder.php @@ -0,0 +1,33 @@ +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; + } +} \ No newline at end of file diff --git a/src/Menu/TeamerMenuBuilder.php b/src/Menu/TeamerMenuBuilder.php new file mode 100644 index 0000000..9ccb28f --- /dev/null +++ b/src/Menu/TeamerMenuBuilder.php @@ -0,0 +1,92 @@ +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; + } +} \ No newline at end of file diff --git a/templates/_partials/_menu.html.twig b/templates/_partials/_menu.html.twig index e42c3f7..3c9ec3b 100644 --- a/templates/_partials/_menu.html.twig +++ b/templates/_partials/_menu.html.twig @@ -12,3 +12,16 @@ {% endif %} {% endapply %} {% endblock %} + +{% block spanElement %} +