WIP: Implement frontend

This commit is contained in:
Björn Fromme
2023-09-18 13:10:20 +02:00
parent bfc5e5e242
commit ce97017ac4
70 changed files with 8751 additions and 337 deletions
+90
View File
@@ -0,0 +1,90 @@
<?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\Contracts\Translation\TranslatorInterface;
class MenuBuilder
{
public function __construct(
protected FactoryInterface $factory,
protected Security $security,
protected RequestStack $requestStack,
protected TranslatorInterface $translator
) {
}
private function assertMobile(array $options): bool
{
return isset($options['mobile']) && true === (bool) $options['mobile'];
}
private function createRootElement(bool $isMobile): ItemInterface
{
return $this
->factory->createItem('root')
->setChildrenAttribute('class', 'menu'.($isMobile ? ' menu--mobile' : ''))
;
}
private function getDefaultRouteParameters(string $parameter = 'id', string $default = '0'): array
{
return [$parameter => $this->requestStack->getMainRequest()->get($parameter, $default)];
}
public function createMainMenu(array $options): ItemInterface
{
/** @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) {
/** @var User $originalUser */
$originalUser = $token->getOriginalToken()->getUser();
$menu
->addChild('Logout', [
'route' => $originalUser->getDefaultRoute(),
'routeParameters' => ['_switch_user' => '_exit'],
])
->setLinkAttributes([
'title' => 'zurück',
'class' => 'icon-link',
])
->setExtra('icon', 'logout')
->setExtra('icon_only', false === $isMobile)
;
} else {
$menu
->addChild('Logout', ['route' => 'app_security_logout'])
->setLinkAttributes([
'title' => 'Logout',
'class' => 'icon-link',
])
->setExtra('icon', 'logout')
->setExtra('icon_only', false === $isMobile)
;
}
return $menu;
}
}