Converter.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DataObject\Copy\Config;
  7. class Converter implements \Magento\Framework\Config\ConverterInterface
  8. {
  9. /**
  10. * Convert dom node tree to array
  11. *
  12. * @param \DOMDocument $source
  13. * @return array
  14. */
  15. public function convert($source)
  16. {
  17. $fieldsets = [];
  18. $xpath = new \DOMXPath($source);
  19. /** @var \DOMNode $fieldset */
  20. foreach ($xpath->query('/config/scope') as $scope) {
  21. $scopeId = $scope->attributes->getNamedItem('id')->nodeValue;
  22. $fieldsets[$scopeId] = $this->_convertScope($scope);
  23. }
  24. return $fieldsets;
  25. }
  26. /**
  27. * Convert Scope node to Magento array
  28. *
  29. * @param \DOMNode $scope
  30. * @return array
  31. */
  32. protected function _convertScope($scope)
  33. {
  34. $result = [];
  35. foreach ($scope->childNodes as $fieldset) {
  36. if (!$fieldset instanceof \DOMElement) {
  37. continue;
  38. }
  39. $fieldsetName = $fieldset->attributes->getNamedItem('id')->nodeValue;
  40. $result[$fieldsetName] = $this->_convertFieldset($fieldset);
  41. }
  42. return $result;
  43. }
  44. /**
  45. * Convert Fieldset node to Magento array
  46. *
  47. * @param \DOMNode $fieldset
  48. * @return array
  49. */
  50. protected function _convertFieldset($fieldset)
  51. {
  52. $result = [];
  53. foreach ($fieldset->childNodes as $field) {
  54. if (!$field instanceof \DOMElement) {
  55. continue;
  56. }
  57. $fieldName = $field->attributes->getNamedItem('name')->nodeValue;
  58. $result[$fieldName] = $this->_convertField($field);
  59. }
  60. return $result;
  61. }
  62. /**
  63. * Convert Field node to Magento array
  64. *
  65. * @param \DOMNode $field
  66. * @return array
  67. */
  68. protected function _convertField($field)
  69. {
  70. $result = [];
  71. foreach ($field->childNodes as $aspect) {
  72. if (!$aspect instanceof \DOMElement) {
  73. continue;
  74. }
  75. /** @var \DOMNamedNodeMap $aspectAttributes */
  76. $aspectAttributes = $aspect->attributes;
  77. $aspectName = $aspectAttributes->getNamedItem('name')->nodeValue;
  78. $targetField = $aspectAttributes->getNamedItem('targetField');
  79. $result[$aspectName] = $targetField === null ? '*' : $targetField->nodeValue;
  80. }
  81. return $result;
  82. }
  83. }