Converter.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * Converts sales totals (incl. creditmemo, invoice) from \DOMDocument to array
  8. */
  9. namespace Magento\Sales\Model\Config;
  10. class Converter implements \Magento\Framework\Config\ConverterInterface
  11. {
  12. /**
  13. * Converting data to array type
  14. *
  15. * @param mixed $source
  16. * @return array
  17. * @throws \InvalidArgumentException
  18. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  19. */
  20. public function convert($source)
  21. {
  22. $output = [];
  23. if (!$source instanceof \DOMDocument) {
  24. return $output;
  25. }
  26. /** @var \DOMNodeList $sections*/
  27. $sections = $source->getElementsByTagName('section');
  28. /** @var \DOMElement $section */
  29. foreach ($sections as $section) {
  30. $sectionArray = [];
  31. $sectionName = $section->getAttribute('name');
  32. if (!$sectionName) {
  33. throw new \InvalidArgumentException('Attribute "name" of "section" does not exist');
  34. }
  35. /** @var \DOMNodeList $groups */
  36. $groups = $section->getElementsByTagName('group');
  37. /** @var \DOMElement $group */
  38. foreach ($groups as $group) {
  39. $groupArray = [];
  40. $groupName = $group->getAttribute('name');
  41. if (!$groupName) {
  42. throw new \InvalidArgumentException('Attribute "name" of "group" does not exist');
  43. }
  44. /** @var \DOMNodeList $items */
  45. $items = $group->getElementsByTagName('item');
  46. /** @var \DOMElement $item */
  47. foreach ($items as $item) {
  48. $rendererArray = [];
  49. $itemName = $item->getAttribute('name');
  50. if (!$itemName) {
  51. throw new \InvalidArgumentException('Attribute "name" of "item" does not exist');
  52. }
  53. /** @var \DOMNodeList $renderers */
  54. $renderers = $item->getElementsByTagName('renderer');
  55. /** @var \DOMElement $renderer */
  56. foreach ($renderers as $renderer) {
  57. $rendererName = $renderer->getAttribute('name');
  58. if (!$rendererName) {
  59. throw new \InvalidArgumentException('Attribute "name" of "renderer" does not exist');
  60. }
  61. $rendererArray[$rendererName] = $renderer->getAttribute('instance');
  62. }
  63. $itemArray = [
  64. 'instance' => $item->getAttribute('instance'),
  65. 'sort_order' => $item->getAttribute('sort_order'),
  66. 'renderers' => $rendererArray,
  67. ];
  68. $groupArray[$itemName] = $itemArray;
  69. }
  70. $sectionArray[$groupName] = $groupArray;
  71. }
  72. $output[$sectionName] = $sectionArray;
  73. }
  74. $order = $source->getElementsByTagName('order')->item(0);
  75. $availableProductTypes = [];
  76. /** @var \DOMElement $order */
  77. if ($order) {
  78. /** @var \DOMNodeList $types */
  79. $types = $order->getElementsByTagName('available_product_type');
  80. /** @var \DOMElement $type */
  81. foreach ($types as $type) {
  82. $availableProductTypes[] = $type->getAttribute('name');
  83. }
  84. $output['order']['available_product_types'] = $availableProductTypes;
  85. }
  86. return $output;
  87. }
  88. }