WIP: Implement CRUD, improve menu configuration

This commit is contained in:
Björn Fromme
2023-09-27 17:50:42 +02:00
parent c55fd85314
commit c528156959
43 changed files with 2187 additions and 3475 deletions
+54 -7
View File
@@ -25,6 +25,52 @@ abstract class AbstractMenuBuilder
return $this->factory->createItem('root');
}
protected function createMenu(array $menuItems): ItemInterface
{
$menu = $this->createRootElement();
foreach ($menuItems as $menuItem) {
$addedItem = $this->createMenuItem($menu, $menuItem);
if (isset($menuItem['hideChildren'])&& true === $menuItem['hideChildren']) {
$addedItem->setDisplayChildren(false);
}
if (isset($menuItem['children'])) {
foreach ($menuItem['children'] as $subMenuItem) {
$addedSubItem = $this->createMenuItem($addedItem, $subMenuItem);
if (isset($subMenuItem['children'])) {
$addedSubItem->setDisplayChildren(false);
foreach ($subMenuItem['children'] as $hiddenItem) {
$this->createMenuItem($addedSubItem, $hiddenItem);
}
}
}
}
}
return $menu;
}
protected function createMenuItem(ItemInterface $menu, array $options): ItemInterface
{
$itemOptions = [];
if (false !== $options['route']) {
$itemOptions['route'] = $options['route'];
$itemOptions['linkAttributes'] = ['title' => $options['title']];
}
if (isset($options['routeParameters'])) {
$itemOptions['routeParameters'] = $options['routeParameters'];
}
$addedItem = $menu
->addChild($options['title'], $itemOptions)
->setChildrenAttribute('title', $options['title'])
;
if (isset($options['icon'])) {
$addedItem->setExtra('icon', $options['icon']);
}
return $addedItem;
}
protected function getDefaultRouteParameters(string $parameter = 'id', string $default = '0'): array
{
return [$parameter => $this->requestStack->getMainRequest()->get($parameter, $default)];
@@ -74,18 +120,19 @@ abstract class AbstractMenuBuilder
->addChild('Logout', [
'route' => $originalUser->getDefaultRoute(),
'routeParameters' => ['_switch_user' => '_exit'],
])
->setLinkAttributes([
'title' => 'zurück',
'class' => 'icon-link',
'linkAttributes' => [
'title' => 'zurück',
],
])
->setExtra('icon', 'logout')
;
} else {
$menu
->addChild('Logout', ['route' => 'app_security_logout'])
->setLinkAttributes([
'title' => 'Logout',
->addChild('Logout', [
'route' => 'app_security_logout',
'linkAttributes' => [
'title' => 'Logout',
],
])
->setExtra('icon', 'logout')
;
+92 -89
View File
@@ -8,96 +8,99 @@ class AdminMenuBuilder extends AbstractMenuBuilder
{
public function createMainMenu(array $options): ItemInterface
{
$menu = $this->createRootElement();
$menu
->addChild('Dashboard', ['route' => 'app_admin_index'])
->setChildrenAttribute('title', 'Dashboard')
->setExtra('icon', 'lab')
;
$menu
->addChild('Einsatzübersicht', ['route' => 'app_admin_index'])
->setChildrenAttribute('title', 'Einsatzübersicht')
->setExtra('icon', 'calendar')
;
$menu
->addChild('Bewerbungsübersicht', ['route' => 'app_admin_index'])
->setChildrenAttribute('title', 'Bewerbungsübersicht')
->setExtra('icon', 'mail')
;
$menu
->addChild('Dokumentenübersicht', ['route' => 'app_admin_index'])
->setChildrenAttribute('title', 'Dokumentenübersicht')
->setExtra('icon', 'document')
;
$menu
->addChild('Teamerübersicht', ['route' => 'app_admin_teamer_index'])
->setChildrenAttribute('title', 'Teamerübersicht')
->setExtra('icon', 'users')
;
$systemMenu = $menu
->addChild('Einstellungen')
->setExtra('icon', 'settings')
;
$feeMenu = $systemMenu
->addChild('Honorare', [
'route' => 'app_admin_system_fee_index',
'linkAttributes' => [
'title' => 'Honorare',
$menuItems = [
[
'route' => 'app_admin_index',
'title' => 'Dashboard',
'icon' => 'lab',
],
[
'route' => 'app_admin_assignment_index',
'title' => 'Einsatzübersicht',
'icon' => 'calendar',
],
[
'route' => 'app_admin_application_index',
'title' => 'Bewerbungsübersicht',
'icon' => 'mail',
],
[
'route' => 'app_admin_document_index',
'title' => 'Dokumentenübersicht',
'icon' => 'document',
],
[
'route' => 'app_admin_teamer_index',
'title' => 'Teamerübersicht',
'icon' => 'users',
'hideChildren' => true,
'children' => [],
],
[
'route' => false,
'title' => 'Einstellungen',
'icon' => 'settings',
'children' => [
[
'route' => 'app_admin_system_fee_index',
'title' => 'Honorare',
'children' => [
[
'route' => 'app_admin_system_fee_create',
'title' => 'Honorar anlegen',
],
[
'route' => 'app_admin_system_fee_edit',
'routeParameters' => $this->getDefaultRouteParameters(),
'title' => 'Honorar bearbeiten',
],
],
],
[
'route' => 'app_admin_system_training_index',
'title' => 'Fortbildungen',
'children' => [
[
'route' => 'app_admin_system_training_create',
'title' => 'Fortbildung anlegen',
],
[
'route' => 'app_admin_system_training_edit',
'routeParameters' => $this->getDefaultRouteParameters(),
'title' => 'Fortbildung bearbeiten',
],
],
],
[
'route' => 'app_admin_system_job_profile_index',
'title' => 'Job-Profile',
'children' => [
[
'route' => 'app_admin_system_job_profile_create',
'title' => 'Job-Profil anlegen',
],
],
],
[
'route' => 'app_admin_system_faq_index',
'title' => 'FAQ',
'children' => [
[
'route' => 'app_admin_system_faq_create',
'title' => 'FAQ-Eintrag anlegen',
],
[
'route' => 'app_admin_system_faq_edit',
'routeParameters' => $this->getDefaultRouteParameters(),
'title' => 'FAQ-Eintrag bearbeiten',
],
],
],
],
'displayChildren' => false,
])
;
$feeMenu
->addChild('Honorar anlegen', [
'route' => 'app_admin_system_fee_create',
])
;
$feeMenu
->addChild('Honorar bearbeiten', [
'route' => 'app_admin_system_fee_edit',
'routeParameters' => $this->getDefaultRouteParameters(),
])
;
$trainingMenu = $systemMenu
->addChild('Fortbildungen', [
'route' => 'app_admin_system_training_index',
'linkAttributes' => [
'title' => 'Fortbildungen',
],
'displayChildren' => false,
])
;
$trainingMenu
->addChild('Fortbildung anlegen', [
'route' => 'app_admin_system_training_create',
])
;
$trainingMenu
->addChild('Fortbildung bearbeiten', [
'route' => 'app_admin_system_training_edit',
'routeParameters' => $this->getDefaultRouteParameters(),
])
;
$jobProfileMenu = $systemMenu
->addChild('Job-Profile', [
'route' => 'app_admin_system_job_profile_index',
'linkAttributes' => [
'title' => 'Fortbildungen',
],
'displayChildren' => false,
])
;
$jobProfileMenu
->addChild('Job-Profil anlegen', [
'route' => 'app_admin_system_job_profile_create',
])
;
],
];
$menu = $this->createMenu($menuItems);
$this->addDivider($menu);
+73 -66
View File
@@ -8,73 +8,80 @@ class TeamerMenuBuilder extends AbstractMenuBuilder
{
public function createMainMenu(array $options): ItemInterface
{
$menu = $this->createRootElement();
$menuItems = [
[
'route' => 'app_teamer_index',
'title' => 'Einsatzübersicht',
'icon' => 'calendar',
],
[
'route' => false,
'title' => 'Mein Profil',
'icon' => 'user',
'children' => [
[
'route' => 'app_teamer_profile_index',
'title' => 'Stammdaten und Foto',
],
[
'route' => 'app_teamer_profile_skills',
'title' => 'Jobprofile & Skills',
],
[
'route' => 'app_teamer_profile_availabilities',
'title' => 'Meine Verfügbarkeit',
],
],
],
[
'route' => false,
'title' => 'Meine Einsätze',
'icon' => 'bus',
'children' => [
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Merkliste',
],
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Offene Bewerbungen',
],
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Nächste Einsätze',
],
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Letzte Einsätze',
],
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Meine Dokumente',
],
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Mein Feedback',
],
],
],
[
'route' => false,
'title' => 'FAQ & Kontakt',
'icon' => 'info',
'children' => [
[
'route' => 'app_teamer_faq',
'title' => 'FAQ',
],
[
'route' => 'app_teamer_disposition_watchlist',
'title' => 'Kontakt',
],
],
],
];
$menu
->addChild('Einsatzübersicht', ['route' => 'app_teamer_index'])
->setChildrenAttribute('title', 'Einsatzübersicht')
->setExtra('icon', 'calendar')
;
$profileMenu = $menu
->addChild('Mein Profil')
->setExtra('icon', 'user')
->setLinkAttribute('title', 'Mein Profil')
;
$profileMenu
->addChild('Stammdaten und Foto', ['route' => 'app_teamer_profile_index'])
->setLinkAttribute('title', 'Stammdaten und Foto')
;
$profileMenu
->addChild('Jobprofile & Skills', ['route' => 'app_teamer_profile_skills'])
->setLinkAttribute('title', 'Jobprofile & Skills')
;
$profileMenu
->addChild('Meine Verfügbarkeit', ['route' => 'app_teamer_profile_availabilities'])
->setLinkAttribute('title', 'Meine Verfügbarkeit')
;
$dispositionMenu = $menu
->addChild('Meine Einsätze')
->setExtra('icon', 'bus')
;
$dispositionMenu
->addChild('Merkliste', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Merkliste')
;
$dispositionMenu
->addChild('Offene Bewerbungen', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Offene Bewerbungen')
;
$dispositionMenu
->addChild('Nächste Einsätze', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Nächste Einsätze')
;
$dispositionMenu
->addChild('Letzte Einsätze', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Letzte Einsätze')
;
$dispositionMenu
->addChild('Meine Dokumente', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Meine Dokumente')
;
$dispositionMenu
->addChild('Mein Feedback', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Mein Feedback')
;
$faqMenu = $menu
->addChild('FAQ & Kontakt')
->setExtra('icon', 'info')
;
$faqMenu
->addChild('FAQ', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'FAQ')
;
$faqMenu
->addChild('Kontakt', ['route' => 'app_teamer_disposition_watchlist'])
->setLinkAttribute('title', 'Kontakt')
;
$menu = $this->createMenu($menuItems);
$this->addDivider($menu);