vendor/easycorp/easyadmin-bundle/src/Context/AdminContext.php line 27

Open in your IDE?
  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\Context;
  3. use EasyCorp\Bundle\EasyAdminBundle\Config\Option\EA;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  5. use EasyCorp\Bundle\EasyAdminBundle\Contracts\Controller\DashboardControllerInterface;
  6. use EasyCorp\Bundle\EasyAdminBundle\Dto\AssetsDto;
  7. use EasyCorp\Bundle\EasyAdminBundle\Dto\CrudDto;
  8. use EasyCorp\Bundle\EasyAdminBundle\Dto\DashboardDto;
  9. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  10. use EasyCorp\Bundle\EasyAdminBundle\Dto\I18nDto;
  11. use EasyCorp\Bundle\EasyAdminBundle\Dto\MainMenuDto;
  12. use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
  13. use EasyCorp\Bundle\EasyAdminBundle\Dto\UserMenuDto;
  14. use EasyCorp\Bundle\EasyAdminBundle\Factory\MenuFactory;
  15. use EasyCorp\Bundle\EasyAdminBundle\Registry\CrudControllerRegistry;
  16. use EasyCorp\Bundle\EasyAdminBundle\Registry\TemplateRegistry;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\Security\Core\User\UserInterface;
  19. /**
  20. * A context object that stores all the state and config of the current admin request.
  21. *
  22. * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  23. */
  24. final class AdminContext
  25. {
  26. private $request;
  27. private $user;
  28. private $i18nDto;
  29. private $crudControllers;
  30. private $entityDto;
  31. private $dashboardDto;
  32. private $dashboardControllerInstance;
  33. private $assetDto;
  34. private $crudDto;
  35. private $searchDto;
  36. private $menuFactory;
  37. private $templateRegistry;
  38. private $mainMenuDto;
  39. private $userMenuDto;
  40. public function __construct(Request $request, ?UserInterface $user, I18nDto $i18nDto, CrudControllerRegistry $crudControllers, DashboardDto $dashboardDto, DashboardControllerInterface $dashboardController, AssetsDto $assetDto, ?CrudDto $crudDto, ?EntityDto $entityDto, ?SearchDto $searchDto, MenuFactory $menuFactory, TemplateRegistry $templateRegistry)
  41. {
  42. $this->request = $request;
  43. $this->user = $user;
  44. $this->i18nDto = $i18nDto;
  45. $this->crudControllers = $crudControllers;
  46. $this->dashboardDto = $dashboardDto;
  47. $this->dashboardControllerInstance = $dashboardController;
  48. $this->crudDto = $crudDto;
  49. $this->assetDto = $assetDto;
  50. $this->entityDto = $entityDto;
  51. $this->searchDto = $searchDto;
  52. $this->menuFactory = $menuFactory;
  53. $this->templateRegistry = $templateRegistry;
  54. }
  55. public function getRequest(): Request
  56. {
  57. return $this->request;
  58. }
  59. public function getReferrer(): ?string
  60. {
  61. return $this->request->query->get(EA::REFERRER);
  62. }
  63. public function getI18n(): I18nDto
  64. {
  65. return $this->i18nDto;
  66. }
  67. public function getCrudControllers(): CrudControllerRegistry
  68. {
  69. return $this->crudControllers;
  70. }
  71. public function getEntity(): EntityDto
  72. {
  73. return $this->entityDto;
  74. }
  75. public function getUser(): ?UserInterface
  76. {
  77. return $this->user;
  78. }
  79. public function getAssets(): AssetsDto
  80. {
  81. return $this->assetDto;
  82. }
  83. public function getSignedUrls(): bool
  84. {
  85. return $this->dashboardDto->getSignedUrls();
  86. }
  87. public function getAbsoluteUrls(): bool
  88. {
  89. return $this->dashboardDto->getAbsoluteUrls();
  90. }
  91. public function getDashboardTitle(): string
  92. {
  93. return $this->dashboardDto->getTitle();
  94. }
  95. public function getDashboardFaviconPath(): string
  96. {
  97. return $this->dashboardDto->getFaviconPath();
  98. }
  99. public function getDashboardControllerFqcn(): string
  100. {
  101. return \get_class($this->dashboardControllerInstance);
  102. }
  103. public function getDashboardRouteName(): string
  104. {
  105. return $this->dashboardDto->getRouteName();
  106. }
  107. public function getDashboardContentWidth(): string
  108. {
  109. return $this->dashboardDto->getContentWidth();
  110. }
  111. public function getDashboardSidebarWidth(): string
  112. {
  113. return $this->dashboardDto->getSidebarWidth();
  114. }
  115. public function getMainMenu(): MainMenuDto
  116. {
  117. if (null !== $this->mainMenuDto) {
  118. return $this->mainMenuDto;
  119. }
  120. $configuredMenuItems = $this->dashboardControllerInstance->configureMenuItems();
  121. $mainMenuItems = \is_array($configuredMenuItems) ? $configuredMenuItems : iterator_to_array($configuredMenuItems, false);
  122. $selectedMenuIndex = $this->request->query->getInt(EA::MENU_INDEX, -1);
  123. $selectedMenuSubIndex = $this->request->query->getInt(EA::SUBMENU_INDEX, -1);
  124. return $this->mainMenuDto = $this->menuFactory->createMainMenu($mainMenuItems, $selectedMenuIndex, $selectedMenuSubIndex);
  125. }
  126. public function getUserMenu(): UserMenuDto
  127. {
  128. if (null !== $this->userMenuDto) {
  129. return $this->userMenuDto;
  130. }
  131. if (null === $this->user) {
  132. return UserMenu::new()->getAsDto();
  133. }
  134. $userMenu = $this->dashboardControllerInstance->configureUserMenu($this->user);
  135. return $this->userMenuDto = $this->menuFactory->createUserMenu($userMenu);
  136. }
  137. public function getCrud(): ?CrudDto
  138. {
  139. return $this->crudDto;
  140. }
  141. public function getSearch(): ?SearchDto
  142. {
  143. return $this->searchDto;
  144. }
  145. public function getTemplatePath(string $templateName): string
  146. {
  147. return $this->templateRegistry->get($templateName);
  148. }
  149. }