|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / dev2.destoffenstraat.com / vendor / magento / framework / Reflection / |
Filename | /home/dev2.destoffenstraat.com/vendor/magento/framework/Reflection/CustomAttributesProcessor.php |
Size | 3.15 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 17-Aug-2025 10:26 |
Last modified | 07-Jan-2021 21:08 |
Last accessed | 22-Aug-2025 14:41 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Reflection;
use Magento\Framework\Api\AttributeInterface;
use Magento\Framework\Api\AttributeValue;
use Magento\Framework\Api\CustomAttributesDataInterface;
use Magento\Framework\Api\AttributeTypeResolverInterface;
/**
* Processes custom attributes and produces an array for the data.
*/
class CustomAttributesProcessor
{
/**
* @var DataObjectProcessor
*/
private $dataObjectProcessor;
/**
* @var AttributeTypeResolverInterface
*/
private $attributeTypeResolver;
/**
* @param DataObjectProcessor $dataObjectProcessor
* @param AttributeTypeResolverInterface $typeResolver
*/
public function __construct(
DataObjectProcessor $dataObjectProcessor,
AttributeTypeResolverInterface $typeResolver
) {
$this->dataObjectProcessor = $dataObjectProcessor;
$this->attributeTypeResolver = $typeResolver;
}
/**
* Writes out the custom attributes for a given object into an array.
*
* @param CustomAttributesDataInterface $objectWithCustomAttributes
* @param string $dataObjectType
* @return array
*/
public function buildOutputDataArray(CustomAttributesDataInterface $objectWithCustomAttributes, $dataObjectType)
{
$customAttributes = $objectWithCustomAttributes->getCustomAttributes();
$result = [];
foreach ($customAttributes as $customAttribute) {
$result[] = $this->convertCustomAttribute($customAttribute, $dataObjectType);
}
return $result;
}
/**
* Convert custom_attribute object to use flat array structure
*
* @param AttributeInterface $customAttribute
* @param string $dataObjectType
* @return array
*/
private function convertCustomAttribute(AttributeInterface $customAttribute, $dataObjectType)
{
$data = [];
$data[AttributeValue::ATTRIBUTE_CODE] = $customAttribute->getAttributeCode();
$value = $customAttribute->getValue();
if (is_object($value)) {
$type = $this->attributeTypeResolver->resolveObjectType(
$customAttribute->getAttributeCode(),
$value,
$dataObjectType
);
$value = $this->dataObjectProcessor->buildOutputDataArray($value, $type);
} elseif (is_array($value)) {
$valueResult = [];
foreach ($value as $singleValue) {
if (is_object($singleValue)) {
$type = $this->attributeTypeResolver->resolveObjectType(
$customAttribute->getAttributeCode(),
$singleValue,
$dataObjectType
);
$singleValue = $this->dataObjectProcessor->buildOutputDataArray($singleValue, $type);
}
// Cannot cast to a type because the type is unknown
$valueResult[] = $singleValue;
}
$value = $valueResult;
}
$data[AttributeValue::VALUE] = $value;
return $data;
}
}
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Reflection;
use Magento\Framework\Api\AttributeInterface;
use Magento\Framework\Api\AttributeValue;
use Magento\Framework\Api\CustomAttributesDataInterface;
use Magento\Framework\Api\AttributeTypeResolverInterface;
/**
* Processes custom attributes and produces an array for the data.
*/
class CustomAttributesProcessor
{
/**
* @var DataObjectProcessor
*/
private $dataObjectProcessor;
/**
* @var AttributeTypeResolverInterface
*/
private $attributeTypeResolver;
/**
* @param DataObjectProcessor $dataObjectProcessor
* @param AttributeTypeResolverInterface $typeResolver
*/
public function __construct(
DataObjectProcessor $dataObjectProcessor,
AttributeTypeResolverInterface $typeResolver
) {
$this->dataObjectProcessor = $dataObjectProcessor;
$this->attributeTypeResolver = $typeResolver;
}
/**
* Writes out the custom attributes for a given object into an array.
*
* @param CustomAttributesDataInterface $objectWithCustomAttributes
* @param string $dataObjectType
* @return array
*/
public function buildOutputDataArray(CustomAttributesDataInterface $objectWithCustomAttributes, $dataObjectType)
{
$customAttributes = $objectWithCustomAttributes->getCustomAttributes();
$result = [];
foreach ($customAttributes as $customAttribute) {
$result[] = $this->convertCustomAttribute($customAttribute, $dataObjectType);
}
return $result;
}
/**
* Convert custom_attribute object to use flat array structure
*
* @param AttributeInterface $customAttribute
* @param string $dataObjectType
* @return array
*/
private function convertCustomAttribute(AttributeInterface $customAttribute, $dataObjectType)
{
$data = [];
$data[AttributeValue::ATTRIBUTE_CODE] = $customAttribute->getAttributeCode();
$value = $customAttribute->getValue();
if (is_object($value)) {
$type = $this->attributeTypeResolver->resolveObjectType(
$customAttribute->getAttributeCode(),
$value,
$dataObjectType
);
$value = $this->dataObjectProcessor->buildOutputDataArray($value, $type);
} elseif (is_array($value)) {
$valueResult = [];
foreach ($value as $singleValue) {
if (is_object($singleValue)) {
$type = $this->attributeTypeResolver->resolveObjectType(
$customAttribute->getAttributeCode(),
$singleValue,
$dataObjectType
);
$singleValue = $this->dataObjectProcessor->buildOutputDataArray($singleValue, $type);
}
// Cannot cast to a type because the type is unknown
$valueResult[] = $singleValue;
}
$value = $valueResult;
}
$data[AttributeValue::VALUE] = $value;
return $data;
}
}