src/Controller/AdminController.php line 109

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