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