src/Controller/AdminController.php line 113

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Declaration\Declaration;
  4. use App\Entity\Declaration\Field;
  5. use EasyCorp\Bundle\EasyAdminBundle\Security\Permission;
  6. use Roothirsch\CoreBundle\Entity\Company\CompanyAttribute;
  7. use Roothirsch\CoreBundle\Translation\Services\LegacyTranslator;
  8. use Roothirsch\DeliveryTimeEstimatorBundle\Entity\Downtime;
  9. use Roothirsch\DeliveryTimeEstimatorBundle\Entity\Product as DeliveryTimeEstimatorProduct;
  10. use Roothirsch\DeliveryTimeEstimatorBundle\Entity\ProductGroup;
  11. use Roothirsch\NotificationBundle\Entity\Notification;
  12. use Roothirsch\PimBundle\Controller\CategoryCrudController;
  13. use Roothirsch\PimBundle\Controller\ProductCrudController;
  14. use Roothirsch\PimBundle\Entity\Article;
  15. use Roothirsch\PimBundle\Entity\Attribute;
  16. use Roothirsch\PimBundle\Entity\AttributeGroup;
  17. use Roothirsch\PimBundle\Entity\Category;
  18. use Roothirsch\PimBundle\Entity\Channel;
  19. use Roothirsch\PimBundle\Entity\Product;
  20. use Roothirsch\PimBundle\Entity\Test\Food;
  21. use Roothirsch\PimBundle\Entity\Test\FoodAttribute;
  22. use Roothirsch\ShopBundle\Controller\EstimateManagementCrudController;
  23. use Roothirsch\ShopBundle\Controller\OrderCrudController;
  24. use Roothirsch\ShopBundle\Controller\OrderManagementCrudController;
  25. use Roothirsch\ShopBundle\Entity\Estimate;
  26. use Roothirsch\ShopBundle\Entity\Estimate\EstimateAttribute;
  27. use Roothirsch\ShopBundle\Entity\Order;
  28. use Roothirsch\ShopBundle\Entity\Order\OrderAttribute;
  29. use Doctrine\ORM\EntityManagerInterface;
  30. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  31. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  32. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  33. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  34. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  35. use Flagception\Manager\FeatureManagerInterface;
  36. use App\Entity\Company;
  37. use App\Entity\Discount;
  38. use Roothirsch\CoreBundle\Entity\ContactPerson;
  39. use Roothirsch\CoreBundle\Entity\Group;
  40. use Roothirsch\CoreBundle\Entity\User;
  41. use Roothirsch\CoreBundle\FeatureFlag\Entity\FeatureFlag;
  42. use Roothirsch\CoreBundle\Menu\Repository\MenuItemRepository;
  43. use Roothirsch\CoreBundle\Site\Controller\SiteCrudController;
  44. use Roothirsch\CoreBundle\Site\Entity\Site;
  45. use Roothirsch\CoreBundle\Translation\Entity\Language;
  46. use Roothirsch\CoreBundle\Translation\Entity\TranslationScope;
  47. use Roothirsch\CoreBundle\Translation\Entity\TranslationUnit;
  48. use Roothirsch\DamBundle\Controller\AssetManagementCrudController;
  49. use Roothirsch\DamBundle\Controller\FileCrudController;
  50. use Roothirsch\DamBundle\Controller\FileManagementCrudController;
  51. use Roothirsch\DamBundle\Entity\Asset;
  52. use Roothirsch\DamBundle\Entity\File;
  53. use Symfony\Component\HttpFoundation\Response;
  54. use Symfony\Component\Routing\Annotation\Route;
  55. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  56. use Symfony\Component\Security\Core\User\UserInterface;
  57. use function Symfony\Component\Translation\t;
  58. class AdminController extends AbstractDashboardController
  59. {
  60. /**
  61. * @var FeatureManagerInterface
  62. */
  63. private $featureManager;
  64. /**
  65. * @var MenuItemRepository
  66. */
  67. private $menuItemRepository;
  68. /**
  69. * @var TokenStorageInterface
  70. */
  71. private $tokenStorage;
  72. /**
  73. * @var LegacyTranslator
  74. */
  75. private $translator;
  76. /**
  77. * @var EntityManagerInterface
  78. */
  79. private $entityManager;
  80. /**
  81. * DashboardController constructor.
  82. */
  83. public function __construct(
  84. FeatureManagerInterface $featureManager,
  85. MenuItemRepository $menuItemRepository,
  86. TokenStorageInterface $tokenStorage,
  87. EntityManagerInterface $entityManager,
  88. LegacyTranslator $translator
  89. ) {
  90. $this->featureManager = $featureManager;
  91. $this->menuItemRepository = $menuItemRepository;
  92. $this->tokenStorage = $tokenStorage;
  93. $entityManager->getFilters()->disable('user_aware_filter');
  94. $entityManager->getFilters()->disable('file_locale_filter');
  95. $this->translator = $translator;
  96. $this->entityManager = $entityManager;
  97. }
  98. public function getName()
  99. {
  100. return 'admin';
  101. }
  102. /**
  103. * @Route("/admin", name="admin")
  104. */
  105. public function index(): Response
  106. {
  107. return $this->render('admin/dashboard.html.twig');
  108. }
  109. public function configureDashboard(): Dashboard
  110. {
  111. return Dashboard::new()
  112. ->disableDarkMode()
  113. ->setTitle('Administration');
  114. }
  115. public function configureCrud(): Crud
  116. {
  117. return Crud::new()
  118. ->setFormThemes(
  119. [
  120. 'form/types/icon_picker.html.twig',
  121. 'form/types/ea_fileupload_widget.html.twig',
  122. 'form/types/translatable.html.twig',
  123. '@EasyAdmin/crud/form_theme.html.twig',
  124. ]
  125. );
  126. }
  127. public function configureMenuItems(): iterable
  128. {
  129. if (class_exists('\Roothirsch\PimBundle\Entity\Article') && $this->featureManager->isActive('MODULE_PIM')) {
  130. yield MenuItem::section('PIM', 'fas fa-database')
  131. ->setPermission('ROLE_MANAGER');
  132. yield MenuItem::linkToCrud('Artikel', 'far fa-file-alt', Article::class)
  133. ->setPermission('ROLE_MANAGER');
  134. yield MenuItem::linkToCrud('Kategorien', 'far fa-file-alt', Category::class)
  135. ->setController(CategoryCrudController::class)
  136. ->setPermission('ROLE_MANAGER');
  137. yield MenuItem::linkToCrud('Produkte', 'far fa-file-alt', Product::class)
  138. ->setController(ProductCrudController::class)
  139. ->setPermission('ROLE_MANAGER');
  140. yield MenuItem::linkToCrud('Attribut Gruppen', 'far fa-folder', AttributeGroup::class)
  141. ->setPermission('ROLE_MANAGER');
  142. yield MenuItem::linkToCrud('Attribute', 'far fa-file-alt', Attribute::class)
  143. ->setPermission('ROLE_MANAGER');
  144. yield MenuItem::linkToCrud('Kanäle', 'far fa-file-alt', Channel::class)
  145. ->setPermission('ROLE_MANAGER');
  146. yield MenuItem::linkToRoute('Wartung', 'fas fa-tools', 'app_admin_pim_maintenance')
  147. ->setPermission('ROLE_ADMIN');
  148. }
  149. if (class_exists('\Roothirsch\DamBundle\Entity\Category') && $this->featureManager->isActive('MODULE_DAM')) {
  150. yield MenuItem::section('DAM', 'fas fa-database')
  151. ->setPermission('ROLE_MANAGER');
  152. yield MenuItem::linkToCrud('Kategorien', 'far fa-file-alt', \Roothirsch\DamBundle\Entity\Category::class)
  153. ->setPermission('ROLE_MANAGER');
  154. yield MenuItem::linkToCrud('Dokumente', 'far fa-file-alt', Asset::class)
  155. ->setController(AssetManagementCrudController::class)
  156. ->setPermission('ROLE_MANAGER');;
  157. // yield MenuItem::linkToCrud('Dateien', 'far fa-asset-alt', File::class)
  158. // ->setController(FileManagementCrudController::class);
  159. }
  160. if ($this->featureManager->isActive('MODULE_DECLARATION')) {
  161. yield MenuItem::section('Leistungserklärung', 'fas fa-database')
  162. ->setPermission('ROLE_MANAGER');
  163. yield MenuItem::linkToCrud('Leistungserklärungen', 'far fa-file-alt', Declaration::class)
  164. ->setPermission('ROLE_MANAGER');
  165. yield MenuItem::linkToCrud('Felder', 'far fa-file-alt', Field::class)
  166. ->setPermission('ROLE_MANAGER');
  167. yield MenuItem::linkToCrud('Produkte', 'far fa-file-alt', \App\Entity\Declaration\Product::class)
  168. ->setPermission('ROLE_MANAGER');
  169. // yield MenuItem::linkToCrud('Institute', 'fas fa-building', Institute::class)->setPermission('ROLE_MANAGER');
  170. // yield MenuItem::linkToCrud('Zertifizierungen', 'fas fa-book', Certification::class)->setPermission('ROLE_MANAGER');
  171. // yield MenuItem::linkToCrud('Attribute', 'far fa-file-alt', DeclarationAttribute::class)
  172. // ->setPermission('ROLE_MANAGER');
  173. }
  174. yield MenuItem::section('Stammdaten', 'fas fa-chevron-circle-right')
  175. ->setPermission('ROLE_MANAGER');
  176. yield MenuItem::linkToCrud('Nutzer', 'fas fa-user-friends', User::class)
  177. ->setPermission('ROLE_MANAGER');
  178. yield MenuItem::linkToCrud('Gruppen', 'fas fa-users', Group::class)
  179. ->setPermission(('ROLE_MANAGER'));
  180. yield MenuItem::linkToCrud('Unternehmen', 'fas fa-building', Company::class)
  181. ->setController(CompanyCrudController::class)
  182. ->setPermission(('ROLE_MANAGER'));
  183. yield MenuItem::linkToCrud('Unternehmen Attribute', 'fas fa-building', CompanyAttribute::class)
  184. ->setPermission(('ROLE_MANAGER'));
  185. yield MenuItem::linkToCrud('Ansprechpartner', 'fas fa-user-tie', ContactPerson::class)
  186. ->setPermission('ROLE_MANAGER');
  187. yield MenuItem::linkToCrud('Rabatte', 'fas fa-percentage', Discount::class)
  188. ->setController(DiscountCrudController::class)
  189. ->setPermission('ROLE_MANAGER');
  190. if (class_exists('\Roothirsch\ShopBundle\Entity\Order') && $this->featureManager->isActive('MODULE_SHOP')) {
  191. yield MenuItem::section('Shop', 'fas fa-shopping-basket')
  192. ->setPermission('ROLE_MANAGER');
  193. yield MenuItem::linkToCrud('Angebote', 'far fa-file-alt', Estimate::class)
  194. ->setController(EstimateManagementCrudController::class)
  195. ->setPermission('ROLE_MANAGER');
  196. yield MenuItem::linkToCrud('Angebot Attribute', 'far fa-file-alt', EstimateAttribute::class)
  197. ->setPermission('ROLE_MANAGER');
  198. yield MenuItem::linkToCrud('Bestellungen', 'far fa-file-alt', Order::class)
  199. ->setController(OrderManagementCrudController::class)
  200. ->setPermission('ROLE_MANAGER');
  201. yield MenuItem::linkToCrud('Bestellung Attribute', 'far fa-file-alt', OrderAttribute::class)
  202. ->setPermission('ROLE_MANAGER');
  203. }
  204. if ($this->featureManager->isActive('MODULE_DELIVERYTIME_ESTIMATOR')) {
  205. yield MenuItem::section('Lieferzeitenrechner', 'fas fa-truck')
  206. ->setPermission('ROLE_MANAGE_DELIVERY_TIME');
  207. // yield MenuItem::linkToCrud('Lieferzeitenrechner', 'far fa-truck', Order::class)
  208. // ->setController(OrderManagementCrudController::class)
  209. // ->setPermission('ROLE_MANAGER');
  210. yield MenuItem::linkToCrud('Produkte', 'far fa-file-alt', \Roothirsch\DeliveryTimeEstimatorBundle\Entity\Product::class)
  211. ->setPermission('ROLE_MANAGE_DELIVERY_TIME');
  212. yield MenuItem::linkToCrud('Produktgruppen', 'far fa-folder', ProductGroup::class)
  213. ->setPermission('ROLE_MANAGE_DELIVERY_TIME');
  214. yield MenuItem::linkToCrud('Ausfallzeiten', 'far fa-calendar-alt', Downtime::class)
  215. ->setPermission('ROLE_MANAGE_DELIVERY_TIME');
  216. }
  217. yield MenuItem::section('Administration', 'fas fa-chevron-circle-right')
  218. ->setPermission('ROLE_MANAGER');
  219. if(class_exists(Notification::class)){
  220. yield MenuItem::linkToCrud("Benachrichtigungen", 'far fa-newspaper', Notification::class)->setPermission('ROLE_MANAGER');
  221. }
  222. yield MenuItem::linkToRoute("Berichte", 'fad fa-file-chart-line', 'report_list')
  223. ->setPermission('ROLE_ADMIN');;
  224. yield MenuItem::linkToCrud('Feature-Flags', 'fas fa-check-square', FeatureFlag::class)
  225. ->setPermission('ROLE_ADMIN');
  226. yield MenuItem::linkToCrud('Menüstruktur', 'fas fa-bars', \Roothirsch\CoreBundle\Menu\Entity\MenuItem::class)
  227. ->setPermission(('ROLE_MANAGER'));
  228. yield MenuItem::linkToCrud('Einstellungen', 'fas fa-sliders-h', Site::class)
  229. ->setController(\App\Controller\SiteCrudController::class)
  230. ->setPermission('ROLE_ADMIN')
  231. ->setAction('edit')
  232. ->setEntityId(1);
  233. if ($this->featureManager->isActive('MODULE_TRANSLATION')) {
  234. yield MenuItem::section('Mehrsprachigkeit', 'fas fa-chevron-circle-right')
  235. ->setPermission('ROLE_MANAGER');;
  236. yield MenuItem::linkToCrud('Sprachen', 'fas fa-globe-africa', Language::class)
  237. ->setPermission('ROLE_MANAGER');;
  238. yield MenuItem::linkToCrud('Bereiche', 'fas fa-layer-group', TranslationScope::class)
  239. ->setPermission('ROLE_MANAGER');;
  240. yield MenuItem::linkToCrud('Übersetzungen', 'fas fa-book', TranslationUnit::class)
  241. ->setPermission('ROLE_MANAGER');;
  242. }
  243. }
  244. public function configureUserMenu(UserInterface $user): UserMenu
  245. {
  246. // Usually it's better to call the parent method because that gives you a
  247. // user menu with some menu items already created ("sign out", "exit impersonation", etc.)
  248. // if you prefer to create the user menu from scratch, use: return UserMenu::new()->...
  249. $userMenuItems = [
  250. MenuItem::linkToLogout($this->translator->trans('Abmelden'), 'fas fa-power-off'),
  251. MenuItem::linkToRoute($this->translator->trans('Profile ändern'), 'fas fa-user-cog', 'app_profile_index'),
  252. MenuItem::linkToRoute($this->translator->trans('Passwort ändern'), 'fa fa-key', 'app_change_password_index'),
  253. ];
  254. if ($this->isGranted(Permission::EA_EXIT_IMPERSONATION)) {
  255. $userMenuItems[] = MenuItem::linkToExitImpersonation($this->translator->trans('Imitieren beenden'), 'fa-user-lock');
  256. }
  257. return parent::configureUserMenu($user)
  258. ->setName($user->__toString())
  259. ->displayUserName(true)
  260. ->displayUserAvatar(true)
  261. ->setGravatarEmail($user->getEmail())
  262. ->setMenuItems($userMenuItems);
  263. }
  264. }