<?php
namespace App\Controller;
use App\Entity\Declaration\Declaration;
use App\Entity\Declaration\Field;
use EasyCorp\Bundle\EasyAdminBundle\Security\Permission;
use Roothirsch\CoreBundle\Entity\Company\CompanyAttribute;
use Roothirsch\CoreBundle\Translation\Services\LegacyTranslator;
use Roothirsch\DeliveryTimeEstimatorBundle\Entity\Downtime;
use Roothirsch\DeliveryTimeEstimatorBundle\Entity\Product as DeliveryTimeEstimatorProduct;
use Roothirsch\DeliveryTimeEstimatorBundle\Entity\ProductGroup;
use Roothirsch\NotificationBundle\Entity\Notification;
use Roothirsch\PimBundle\Controller\CategoryCrudController;
use Roothirsch\PimBundle\Controller\ProductCrudController;
use Roothirsch\PimBundle\Entity\Article;
use Roothirsch\PimBundle\Entity\Attribute;
use Roothirsch\PimBundle\Entity\AttributeGroup;
use Roothirsch\PimBundle\Entity\Category;
use Roothirsch\PimBundle\Entity\Channel;
use Roothirsch\PimBundle\Entity\Product;
use Roothirsch\PimBundle\Entity\Test\Food;
use Roothirsch\PimBundle\Entity\Test\FoodAttribute;
use Roothirsch\ShopBundle\Controller\EstimateManagementCrudController;
use Roothirsch\ShopBundle\Controller\OrderCrudController;
use Roothirsch\ShopBundle\Controller\OrderManagementCrudController;
use Roothirsch\ShopBundle\Entity\Estimate;
use Roothirsch\ShopBundle\Entity\Estimate\EstimateAttribute;
use Roothirsch\ShopBundle\Entity\Order;
use Roothirsch\ShopBundle\Entity\Order\OrderAttribute;
use Doctrine\ORM\EntityManagerInterface;
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 App\Entity\Company;
use App\Entity\Discount;
use Roothirsch\CoreBundle\Entity\ContactPerson;
use Roothirsch\CoreBundle\Entity\Group;
use Roothirsch\CoreBundle\Entity\User;
use Roothirsch\CoreBundle\FeatureFlag\Entity\FeatureFlag;
use Roothirsch\CoreBundle\Menu\Repository\MenuItemRepository;
use Roothirsch\CoreBundle\Site\Controller\SiteCrudController;
use Roothirsch\CoreBundle\Site\Entity\Site;
use Roothirsch\CoreBundle\Translation\Entity\Language;
use Roothirsch\CoreBundle\Translation\Entity\TranslationScope;
use Roothirsch\CoreBundle\Translation\Entity\TranslationUnit;
use Roothirsch\DamBundle\Controller\AssetManagementCrudController;
use Roothirsch\DamBundle\Controller\FileCrudController;
use Roothirsch\DamBundle\Controller\FileManagementCrudController;
use Roothirsch\DamBundle\Entity\Asset;
use Roothirsch\DamBundle\Entity\File;
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;
use function Symfony\Component\Translation\t;
class AdminController extends AbstractDashboardController
{
/**
* @var FeatureManagerInterface
*/
private $featureManager;
/**
* @var MenuItemRepository
*/
private $menuItemRepository;
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
/**
* @var LegacyTranslator
*/
private $translator;
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* DashboardController constructor.
*/
public function __construct(
FeatureManagerInterface $featureManager,
MenuItemRepository $menuItemRepository,
TokenStorageInterface $tokenStorage,
EntityManagerInterface $entityManager,
LegacyTranslator $translator
) {
$this->featureManager = $featureManager;
$this->menuItemRepository = $menuItemRepository;
$this->tokenStorage = $tokenStorage;
$entityManager->getFilters()->disable('user_aware_filter');
$entityManager->getFilters()->disable('file_locale_filter');
$this->translator = $translator;
$this->entityManager = $entityManager;
}
public function getName()
{
return 'admin';
}
/**
* @Route("/admin", name="admin")
*/
public function index(): Response
{
return $this->render('admin/dashboard.html.twig');
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->disableDarkMode()
->setTitle('Administration');
}
public function configureCrud(): Crud
{
return Crud::new()
->setFormThemes(
[
'form/types/icon_picker.html.twig',
'form/types/ea_fileupload_widget.html.twig',
'form/types/translatable.html.twig',
'@EasyAdmin/crud/form_theme.html.twig',
]
);
}
public function configureMenuItems(): iterable
{
if (class_exists('\Roothirsch\PimBundle\Entity\Article') && $this->featureManager->isActive('MODULE_PIM')) {
yield MenuItem::section('PIM', 'fas fa-database')
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Artikel', 'far fa-file-alt', Article::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Kategorien', 'far fa-file-alt', Category::class)
->setController(CategoryCrudController::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Produkte', 'far fa-file-alt', Product::class)
->setController(ProductCrudController::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Attribut Gruppen', 'far fa-folder', AttributeGroup::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Attribute', 'far fa-file-alt', Attribute::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Kanäle', 'far fa-file-alt', Channel::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToRoute('Wartung', 'fas fa-tools', 'app_admin_pim_maintenance')
->setPermission('ROLE_ADMIN');
}
if (class_exists('\Roothirsch\DamBundle\Entity\Category') && $this->featureManager->isActive('MODULE_DAM')) {
yield MenuItem::section('DAM', 'fas fa-database')
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Kategorien', 'far fa-file-alt', \Roothirsch\DamBundle\Entity\Category::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Dokumente', 'far fa-file-alt', Asset::class)
->setController(AssetManagementCrudController::class)
->setPermission('ROLE_MANAGER');;
// yield MenuItem::linkToCrud('Dateien', 'far fa-asset-alt', File::class)
// ->setController(FileManagementCrudController::class);
}
if ($this->featureManager->isActive('MODULE_DECLARATION')) {
yield MenuItem::section('Leistungserklärung', 'fas fa-database')
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Leistungserklärungen', 'far fa-file-alt', Declaration::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Felder', 'far fa-file-alt', Field::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Produkte', 'far fa-file-alt', \App\Entity\Declaration\Product::class)
->setPermission('ROLE_MANAGER');
// yield MenuItem::linkToCrud('Institute', 'fas fa-building', Institute::class)->setPermission('ROLE_MANAGER');
// yield MenuItem::linkToCrud('Zertifizierungen', 'fas fa-book', Certification::class)->setPermission('ROLE_MANAGER');
// yield MenuItem::linkToCrud('Attribute', 'far fa-file-alt', DeclarationAttribute::class)
// ->setPermission('ROLE_MANAGER');
}
yield MenuItem::section('Stammdaten', 'fas fa-chevron-circle-right')
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Nutzer', 'fas fa-user-friends', User::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Gruppen', 'fas fa-users', Group::class)
->setPermission(('ROLE_MANAGER'));
yield MenuItem::linkToCrud('Unternehmen', 'fas fa-building', Company::class)
->setController(CompanyCrudController::class)
->setPermission(('ROLE_MANAGER'));
yield MenuItem::linkToCrud('Unternehmen Attribute', 'fas fa-building', CompanyAttribute::class)
->setPermission(('ROLE_MANAGER'));
yield MenuItem::linkToCrud('Ansprechpartner', 'fas fa-user-tie', ContactPerson::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Rabatte', 'fas fa-percentage', Discount::class)
->setController(DiscountCrudController::class)
->setPermission('ROLE_MANAGER');
if (class_exists('\Roothirsch\ShopBundle\Entity\Order') && $this->featureManager->isActive('MODULE_SHOP')) {
yield MenuItem::section('Shop', 'fas fa-shopping-basket')
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Angebote', 'far fa-file-alt', Estimate::class)
->setController(EstimateManagementCrudController::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Angebot Attribute', 'far fa-file-alt', EstimateAttribute::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Bestellungen', 'far fa-file-alt', Order::class)
->setController(OrderManagementCrudController::class)
->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Bestellung Attribute', 'far fa-file-alt', OrderAttribute::class)
->setPermission('ROLE_MANAGER');
}
if ($this->featureManager->isActive('MODULE_DELIVERYTIME_ESTIMATOR')) {
yield MenuItem::section('Lieferzeitenrechner', 'fas fa-truck')
->setPermission('ROLE_MANAGE_DELIVERY_TIME');
// yield MenuItem::linkToCrud('Lieferzeitenrechner', 'far fa-truck', Order::class)
// ->setController(OrderManagementCrudController::class)
// ->setPermission('ROLE_MANAGER');
yield MenuItem::linkToCrud('Produkte', 'far fa-file-alt', \Roothirsch\DeliveryTimeEstimatorBundle\Entity\Product::class)
->setPermission('ROLE_MANAGE_DELIVERY_TIME');
yield MenuItem::linkToCrud('Produktgruppen', 'far fa-folder', ProductGroup::class)
->setPermission('ROLE_MANAGE_DELIVERY_TIME');
yield MenuItem::linkToCrud('Ausfallzeiten', 'far fa-calendar-alt', Downtime::class)
->setPermission('ROLE_MANAGE_DELIVERY_TIME');
}
yield MenuItem::section('Administration', 'fas fa-chevron-circle-right')
->setPermission('ROLE_MANAGER');
if(class_exists(Notification::class)){
yield MenuItem::linkToCrud("Benachrichtigungen", 'far fa-newspaper', Notification::class)->setPermission('ROLE_MANAGER');
}
yield MenuItem::linkToRoute("Berichte", 'fad fa-file-chart-line', 'report_list')
->setPermission('ROLE_ADMIN');;
yield MenuItem::linkToCrud('Feature-Flags', 'fas fa-check-square', FeatureFlag::class)
->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Menüstruktur', 'fas fa-bars', \Roothirsch\CoreBundle\Menu\Entity\MenuItem::class)
->setPermission(('ROLE_MANAGER'));
yield MenuItem::linkToCrud('Einstellungen', 'fas fa-sliders-h', Site::class)
->setController(\App\Controller\SiteCrudController::class)
->setPermission('ROLE_ADMIN')
->setAction('edit')
->setEntityId(1);
if ($this->featureManager->isActive('MODULE_TRANSLATION')) {
yield MenuItem::section('Mehrsprachigkeit', 'fas fa-chevron-circle-right')
->setPermission('ROLE_MANAGER');;
yield MenuItem::linkToCrud('Sprachen', 'fas fa-globe-africa', Language::class)
->setPermission('ROLE_MANAGER');;
yield MenuItem::linkToCrud('Bereiche', 'fas fa-layer-group', TranslationScope::class)
->setPermission('ROLE_MANAGER');;
yield MenuItem::linkToCrud('Übersetzungen', 'fas fa-book', TranslationUnit::class)
->setPermission('ROLE_MANAGER');;
}
}
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()->...
$userMenuItems = [
MenuItem::linkToLogout($this->translator->trans('Abmelden'), 'fas fa-power-off'),
MenuItem::linkToRoute($this->translator->trans('Profile ändern'), 'fas fa-user-cog', 'app_profile_index'),
MenuItem::linkToRoute($this->translator->trans('Passwort ändern'), 'fa fa-key', 'app_change_password_index'),
];
if ($this->isGranted(Permission::EA_EXIT_IMPERSONATION)) {
$userMenuItems[] = MenuItem::linkToExitImpersonation($this->translator->trans('Imitieren beenden'), 'fa-user-lock');
}
return parent::configureUserMenu($user)
->setName($user->__toString())
->displayUserName(true)
->displayUserAvatar(true)
->setGravatarEmail($user->getEmail())
->setMenuItems($userMenuItems);
}
}