vendor/easycorp/easyadmin-bundle/src/Dto/ActionConfigDto.php line 101

Open in your IDE?
  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\Dto;
  3. use EasyCorp\Bundle\EasyAdminBundle\Collection\ActionCollection;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  5. /**
  6. * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  7. */
  8. final class ActionConfigDto
  9. {
  10. private $pageName;
  11. /** @var ActionDto[] */
  12. private $actions = [
  13. Crud::PAGE_DETAIL => [],
  14. Crud::PAGE_EDIT => [],
  15. Crud::PAGE_INDEX => [],
  16. Crud::PAGE_NEW => [],
  17. ];
  18. /** @var string[] */
  19. private $disabledActions = [];
  20. /** @var string[] */
  21. private $actionPermissions = [];
  22. public function __construct()
  23. {
  24. }
  25. public function __clone()
  26. {
  27. foreach ($this->actions as $pageName => $actions) {
  28. foreach ($actions as $actionName => $actionDto) {
  29. $this->actions[$pageName][$actionName] = clone $actionDto;
  30. }
  31. }
  32. }
  33. public function setPageName(?string $pageName): void
  34. {
  35. $this->pageName = $pageName;
  36. }
  37. public function setActionPermission(string $actionName, string $permission): void
  38. {
  39. $this->actionPermissions[$actionName] = $permission;
  40. }
  41. public function setActionPermissions(array $permissions): void
  42. {
  43. $this->actionPermissions = $permissions;
  44. }
  45. public function prependAction(string $pageName, ActionDto $actionDto): void
  46. {
  47. $this->actions[$pageName][$actionDto->getName()] = $actionDto;
  48. }
  49. public function appendAction(string $pageName, ActionDto $actionDto): void
  50. {
  51. $this->actions[$pageName] = array_merge([$actionDto->getName() => $actionDto], $this->actions[$pageName]);
  52. }
  53. public function setAction(string $pageName, ActionDto $actionDto): void
  54. {
  55. $this->actions[$pageName][$actionDto->getName()] = $actionDto;
  56. }
  57. public function getAction(string $pageName, string $actionName): ?ActionDto
  58. {
  59. return $this->actions[$pageName][$actionName] ?? null;
  60. }
  61. public function removeAction(string $pageName, string $actionName): void
  62. {
  63. unset($this->actions[$pageName][$actionName]);
  64. }
  65. public function reorderActions(string $pageName, array $orderedActionNames): void
  66. {
  67. $orderedActions = [];
  68. foreach ($orderedActionNames as $actionName) {
  69. $orderedActions[$actionName] = $this->actions[$pageName][$actionName];
  70. }
  71. $this->actions[$pageName] = $orderedActions;
  72. }
  73. public function disableActions(array $actionNames): void
  74. {
  75. foreach ($actionNames as $actionName) {
  76. if (!\in_array($actionName, $this->disabledActions)) {
  77. $this->disabledActions[] = $actionName;
  78. }
  79. }
  80. }
  81. /**
  82. * @return array|ActionCollection
  83. */
  84. public function getActions()
  85. {
  86. return null === $this->pageName ? $this->actions : ActionCollection::new($this->actions[$this->pageName]);
  87. }
  88. /**
  89. * @param ActionDto[] $newActions
  90. */
  91. public function setActions(string $pageName, array $newActions): void
  92. {
  93. $this->actions[$pageName] = $newActions;
  94. }
  95. public function getDisabledActions(): array
  96. {
  97. return $this->disabledActions;
  98. }
  99. public function getActionPermissions(): array
  100. {
  101. return $this->actionPermissions;
  102. }
  103. }