Page.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /**
  3. * Admin system config startup page
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\Config\Model\Config\Source\Admin;
  9. /**
  10. * @api
  11. * @since 100.0.2
  12. */
  13. class Page implements \Magento\Framework\Option\ArrayInterface
  14. {
  15. /**
  16. * Menu model
  17. *
  18. * @var \Magento\Backend\Model\Menu
  19. */
  20. protected $_menu;
  21. /**
  22. * @var \Magento\Backend\Model\Menu\Filter\IteratorFactory
  23. */
  24. protected $_iteratorFactory;
  25. /**
  26. * @param \Magento\Backend\Model\Menu\Filter\IteratorFactory $iteratorFactory
  27. * @param \Magento\Backend\Model\Menu\Config $menuConfig
  28. */
  29. public function __construct(
  30. \Magento\Backend\Model\Menu\Filter\IteratorFactory $iteratorFactory,
  31. \Magento\Backend\Model\Menu\Config $menuConfig
  32. ) {
  33. $this->_menu = $menuConfig->getMenu();
  34. $this->_iteratorFactory = $iteratorFactory;
  35. }
  36. /**
  37. * @return array
  38. */
  39. public function toOptionArray()
  40. {
  41. $options = [];
  42. $this->_createOptions($options, $this->_menu);
  43. return $options;
  44. }
  45. /**
  46. * Get menu filter iterator
  47. *
  48. * @param \Magento\Backend\Model\Menu $menu menu model
  49. * @return \Magento\Backend\Model\Menu\Filter\Iterator
  50. */
  51. protected function _getMenuIterator(\Magento\Backend\Model\Menu $menu)
  52. {
  53. return $this->_iteratorFactory->create(['iterator' => $menu->getIterator()]);
  54. }
  55. /**
  56. * Create options array
  57. *
  58. * @param array &$optionArray
  59. * @param \Magento\Backend\Model\Menu $menu
  60. * @param int $level
  61. * @return void
  62. */
  63. protected function _createOptions(&$optionArray, \Magento\Backend\Model\Menu $menu, $level = 0)
  64. {
  65. $nonEscapableNbspChar = html_entity_decode('&#160;', ENT_NOQUOTES, 'UTF-8');
  66. $paddingString = str_repeat($nonEscapableNbspChar, $level * 4);
  67. foreach ($this->_getMenuIterator($menu) as $menuItem) {
  68. /**@var $menuItem \Magento\Backend\Model\Menu\Item */
  69. if ($menuItem->getAction()) {
  70. $optionArray[] = [
  71. 'label' => $paddingString . $menuItem->getTitle(),
  72. 'value' => $menuItem->getId(),
  73. ];
  74. if ($menuItem->hasChildren()) {
  75. $this->_createOptions($optionArray, $menuItem->getChildren(), $level + 1);
  76. }
  77. } else {
  78. $children = [];
  79. if ($menuItem->hasChildren()) {
  80. $this->_createOptions($children, $menuItem->getChildren(), $level + 1);
  81. }
  82. $optionArray[] = ['label' => $paddingString . $menuItem->getTitle(), 'value' => $children];
  83. }
  84. }
  85. }
  86. }