ExtensibleDataObjectConverter.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Api;
  7. use Magento\Framework\Convert\ConvertArray;
  8. use Magento\Framework\Reflection\DataObjectProcessor;
  9. /**
  10. * Class to convert Extensible Data Object array to flat array
  11. */
  12. class ExtensibleDataObjectConverter
  13. {
  14. /**
  15. * @var DataObjectProcessor
  16. */
  17. protected $dataObjectProcessor;
  18. /**
  19. * @param DataObjectProcessor $dataObjectProcessor
  20. */
  21. public function __construct(DataObjectProcessor $dataObjectProcessor)
  22. {
  23. $this->dataObjectProcessor = $dataObjectProcessor;
  24. }
  25. /**
  26. * Convert AbstractExtensibleObject into a nested array.
  27. *
  28. * @param ExtensibleDataInterface $dataObject
  29. * @param string[] $skipAttributes
  30. * @param string $dataObjectType
  31. * @return array
  32. */
  33. public function toNestedArray(
  34. ExtensibleDataInterface $dataObject,
  35. $skipAttributes = [],
  36. $dataObjectType = null
  37. ) {
  38. if ($dataObjectType == null) {
  39. $dataObjectType = get_class($dataObject);
  40. }
  41. $dataObjectArray = $this->dataObjectProcessor->buildOutputDataArray($dataObject, $dataObjectType);
  42. //process custom attributes if present
  43. if (!empty($dataObjectArray[AbstractExtensibleObject::CUSTOM_ATTRIBUTES_KEY])) {
  44. /** @var AttributeValue[] $customAttributes */
  45. $customAttributes = $dataObjectArray[AbstractExtensibleObject::CUSTOM_ATTRIBUTES_KEY];
  46. unset($dataObjectArray[AbstractExtensibleObject::CUSTOM_ATTRIBUTES_KEY]);
  47. foreach ($customAttributes as $attributeValue) {
  48. if (!in_array($attributeValue[AttributeValue::ATTRIBUTE_CODE], $skipAttributes)) {
  49. $dataObjectArray[$attributeValue[AttributeValue::ATTRIBUTE_CODE]]
  50. = $attributeValue[AttributeValue::VALUE];
  51. }
  52. }
  53. }
  54. if (!empty($dataObjectArray[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY])) {
  55. /** @var array $extensionAttributes */
  56. $extensionAttributes = $dataObjectArray[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY];
  57. unset($dataObjectArray[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]);
  58. foreach ($extensionAttributes as $attributeKey => $attributeValue) {
  59. if (!in_array($attributeKey, $skipAttributes)) {
  60. $dataObjectArray[$attributeKey] = $attributeValue;
  61. }
  62. }
  63. }
  64. return $dataObjectArray;
  65. }
  66. /**
  67. * Convert AbstractExtensibleObject into flat array.
  68. *
  69. * @param ExtensibleDataInterface $dataObject
  70. * @param string[] $skipCustomAttributes
  71. * @param string $dataObjectType
  72. * @return array
  73. */
  74. public function toFlatArray(
  75. ExtensibleDataInterface $dataObject,
  76. $skipCustomAttributes = [],
  77. $dataObjectType = null
  78. ) {
  79. $dataObjectArray = $this->toNestedArray($dataObject, $skipCustomAttributes, $dataObjectType);
  80. return ConvertArray::toFlatArray($dataObjectArray);
  81. }
  82. /**
  83. * Convert Extensible Data Object custom attributes in sequential array format.
  84. *
  85. * @param array $extensibleObjectData
  86. * @return array
  87. */
  88. public static function convertCustomAttributesToSequentialArray($extensibleObjectData)
  89. {
  90. $extensibleObjectData[AbstractExtensibleObject::CUSTOM_ATTRIBUTES_KEY] = array_values(
  91. $extensibleObjectData[AbstractExtensibleObject::CUSTOM_ATTRIBUTES_KEY]
  92. );
  93. return $extensibleObjectData;
  94. }
  95. }