123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?php
- /**
- * Copyright © Magento, Inc. 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;
- }
- }
|