Dom.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Acl\AclResource\Config\Converter;
  7. class Dom implements \Magento\Framework\Config\ConverterInterface
  8. {
  9. /**
  10. * {@inheritdoc}
  11. *
  12. * @param \DOMDocument $source
  13. * @return array
  14. * @throws \Exception
  15. */
  16. public function convert($source)
  17. {
  18. $aclResourceConfig = ['config' => ['acl' => ['resources' => []]]];
  19. $xpath = new \DOMXPath($source);
  20. /** @var $resourceNode \DOMNode */
  21. foreach ($xpath->query('/config/acl/resources/resource') as $resourceNode) {
  22. $aclResourceConfig['config']['acl']['resources'][] = $this->_convertResourceNode($resourceNode);
  23. }
  24. return $aclResourceConfig;
  25. }
  26. /**
  27. * Convert resource node into assoc array
  28. *
  29. * @param \DOMNode $resourceNode
  30. * @return array
  31. * @throws \Exception
  32. * @SuppressWarnings(PHPMD.NPathComplexity)
  33. */
  34. protected function _convertResourceNode(\DOMNode $resourceNode)
  35. {
  36. $resourceData = [];
  37. $resourceAttributes = $resourceNode->attributes;
  38. $idNode = $resourceAttributes->getNamedItem('id');
  39. if ($idNode === null) {
  40. throw new \Exception('Attribute "id" is required for ACL resource.');
  41. }
  42. $resourceData['id'] = $idNode->nodeValue;
  43. $moduleNode = $resourceAttributes->getNamedItem('module');
  44. if ($moduleNode !== null) {
  45. $resourceData['module'] = $moduleNode->nodeValue;
  46. }
  47. $titleNode = $resourceAttributes->getNamedItem('title');
  48. if ($titleNode !== null) {
  49. $resourceData['title'] = $titleNode->nodeValue;
  50. }
  51. $sortOrderNode = $resourceAttributes->getNamedItem('sortOrder');
  52. $resourceData['sortOrder'] = $sortOrderNode !== null ? (int)$sortOrderNode->nodeValue : 0;
  53. $disabledNode = $resourceAttributes->getNamedItem('disabled');
  54. $resourceData['disabled'] = $disabledNode !== null && $disabledNode->nodeValue == 'true' ? true : false;
  55. // convert child resource nodes if needed
  56. $resourceData['children'] = [];
  57. /** @var $childNode \DOMNode */
  58. foreach ($resourceNode->childNodes as $childNode) {
  59. if ($childNode->nodeName == 'resource') {
  60. $resourceData['children'][] = $this->_convertResourceNode($childNode);
  61. }
  62. }
  63. return $resourceData;
  64. }
  65. }