<?php
namespace App\Controller;
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
use Roothirsch\CoreBundle\Menu\Repository\MenuItemRepository;
use Roothirsch\CoreBundle\Site\Repository\SiteRepository;
use Roothirsch\DamBundle\Controller\FileCrudController;
use Roothirsch\DamBundle\Entity\File;
use Roothirsch\DamBundle\Repository\FileRepository;
use Roothirsch\DeclarationBundle\Entity\Declaration;
use Roothirsch\DeclarationBundle\Repository\FieldRepository;
use Roothirsch\CoreBundle\Entity\Company;
use Roothirsch\CoreBundle\Entity\ContactPerson;
use Roothirsch\DeclarationBundle\Entity\Field;
use Roothirsch\CoreBundle\Entity\Article;
use Roothirsch\CoreBundle\Entity\Group;
use Roothirsch\CoreBundle\Entity\User;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use Flagception\Manager\FeatureManagerInterface;
use Roothirsch\ShopBundle\Controller\OrderCrudController;
use Roothirsch\ShopBundle\Repository\OrderRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class FrontendController extends AbstractDashboardController
{
/**
* @var FeatureManagerInterface
*/
private $featureManager;
/**
* @var MenuItemRepository
*/
private $menuItemRepository;
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
/**
* @var Site
*/
private $site;
/**
* @var SiteRepository
*/
private $siteRepository;
/**
* @var OrderRepository
*/
private $orderRepository;
/**
* @var FileRepository
*/
private $fileRepository;
/**
* DashboardController constructor.
*/
public function __construct(
FeatureManagerInterface $featureManager,
MenuItemRepository $menuItemRepository,
TokenStorageInterface $tokenStorage,
SiteRepository $siteRepository,
OrderRepository $orderRepository,
FileRepository $fileRepository,
JWTTokenManagerInterface $jwtTokenManager
) {
$this->featureManager = $featureManager;
$this->menuItemRepository = $menuItemRepository;
$this->tokenStorage = $tokenStorage;
$this->site = $siteRepository->find(1);
$this->siteRepository = $siteRepository;
$this->orderRepository = $orderRepository;
$this->fileRepository = $fileRepository;
if ($tokenStorage->getToken()->getUser() instanceof UserInterface) {
setcookie(
'token',
$jwtTokenManager->create($tokenStorage->getToken()->getUser()),
time() + (14 * (60 * 60 * 24)),
"/",
".stf-lizenzsystem.de"
);
}
}
public function getName()
{
return 'frontend';
}
/**
* @Route("/", name="home")
*/
public function index(): Response
{
return $this->render(
'dashboard/index.html.twig',
[
'dashboard_controller_filepath' => (new \ReflectionClass(static::class))->getFileName(),
'dashboard_controller_class' => (new \ReflectionClass(static::class))->getShortName(),
'orders' => $this->orderRepository->getLastOrders(5),
'files' => $this->fileRepository->getLast(5),
]
);
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle($this->site->getTitle());
}
public function configureCrud(): Crud
{
return Crud::new()
->setFormThemes(
[
'form/types/icon_picker.html.twig',
'form/types/ea_fileupload_widget.html.twig',
'@EasyAdmin/crud/form_theme.html.twig',
]
);
}
public function configureMenuItems(): iterable
{
yield MenuItem::section('');
yield MenuItem::linkToDashboard('Start', 'fal fa-home');
yield MenuItem::linkToRoute('Plaketten', 'fal fa-shield', 'products_index');
yield MenuItem::linkToCrud('Warenkorb', 'fal fa-shopping-cart', Order::class)
->setController(OrderCrudController::class)->setAction('cart');
yield MenuItem::linkToCrud('Bestellungen', 'fal fa-truck', Order::class)
->setController(OrderCrudController::class);
yield MenuItem::linkToCrud('Dokumentation', 'fal fa-book', File::class)
->setController(FileCrudController::class);
yield MenuItem::linkToCrud('Leistungserklärungen', 'fal fa-book', Declaration::class);
yield MenuItem::section('');
yield MenuItem::linkToUrl('zur Website', 'fal fa-external-link-square', 'https://stf-lizenzsystem.de/');
}
public function configureUserMenu(UserInterface $user): UserMenu
{
// Usually it's better to call the parent method because that gives you a
// user menu with some menu items already created ("sign out", "exit impersonation", etc.)
// if you prefer to create the user menu from scratch, use: return UserMenu::new()->...
return parent::configureUserMenu($user)
->setName($user->__toString())
->displayUserName(true)
->displayUserAvatar(true)
->setGravatarEmail($user->getEmail())
->addMenuItems(
[
MenuItem::linkToRoute('Passwort ändern', 'fa fa-key', 'app_change_password_index'),
MenuItem::section(),
// MenuItem::linkToCrud('Mein Profil', 'fa fa-id-card', User::class)
// ->setAction('editProfile')
// ->setEntityId($this->tokenStorage->getToken()->getUser()->getId()),
// MenuItem::section(),
]
);
}
}