b374k
m1n1 1.01
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 / a / home / dev2.destoffenstraat.com / vendor / magento / framework / Reflection /
Filename/home/a/home/dev2.destoffenstraat.com/vendor/magento/framework/Reflection/DataObjectProcessor.php
Size4.97 kb
Permissionrw-r--r--
Ownerroot : root
Create time21-Aug-2025 12:26
Last modified07-Jan-2021 21:08
Last accessed22-Aug-2025 21:39
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Reflection;

use Magento\Framework\Api\CustomAttributesDataInterface;
use Magento\Framework\Phrase;

/**
* Data object processor for array serialization using class reflection
*
* @api
* @since 100.0.2
*/
class DataObjectProcessor
{
/**
* @var MethodsMap
*/
private $methodsMapProcessor;

/**
* @var TypeCaster
*/
private $typeCaster;

/**
* @var FieldNamer
*/
private $fieldNamer;

/**
* @var ExtensionAttributesProcessor
*/
private $extensionAttributesProcessor;

/**
* @var CustomAttributesProcessor
*/
private $customAttributesProcessor;

/**
* @var array
*/
private $processors;

/**
* @param MethodsMap $methodsMapProcessor
* @param TypeCaster $typeCaster
* @param FieldNamer $fieldNamer
* @param CustomAttributesProcessor $customAttributesProcessor
* @param ExtensionAttributesProcessor $extensionAttributesProcessor
* @param array $processors
*/
public function __construct(
MethodsMap $methodsMapProcessor,
TypeCaster $typeCaster,
FieldNamer $fieldNamer,
CustomAttributesProcessor $customAttributesProcessor,
ExtensionAttributesProcessor $extensionAttributesProcessor,
array $processors = []
) {
$this->methodsMapProcessor = $methodsMapProcessor;
$this->typeCaster = $typeCaster;
$this->fieldNamer = $fieldNamer;
$this->extensionAttributesProcessor = $extensionAttributesProcessor;
$this->customAttributesProcessor = $customAttributesProcessor;
$this->processors = $processors;
}

/**
* Use class reflection on given data interface to build output data array
*
* @param mixed $dataObject
* @param string $dataObjectType
* @return array
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function buildOutputDataArray($dataObject, $dataObjectType)
{
$methods = $this->methodsMapProcessor->getMethodsMap($dataObjectType);
$outputData = [];

foreach (array_keys($methods) as $methodName) {
if (!$this->methodsMapProcessor->isMethodValidForDataField($dataObjectType, $methodName)) {
continue;
}

$value = $dataObject->{$methodName}();
$isMethodReturnValueRequired = $this->methodsMapProcessor->isMethodReturnValueRequired(
$dataObjectType,
$methodName
);
if ($value === null && !$isMethodReturnValueRequired) {
continue;
}

$returnType = $this->methodsMapProcessor->getMethodReturnType($dataObjectType, $methodName);
$key = $this->fieldNamer->getFieldNameForMethodName($methodName);
if ($key === CustomAttributesDataInterface::CUSTOM_ATTRIBUTES && $value === []) {
continue;
}

if ($key === CustomAttributesDataInterface::CUSTOM_ATTRIBUTES) {
$value = $this->customAttributesProcessor->buildOutputDataArray($dataObject, $dataObjectType);
} elseif ($key === "extension_attributes") {
$value = $this->extensionAttributesProcessor->buildOutputDataArray($value, $returnType);
if (empty($value)) {
continue;
}
} else {
if (is_object($value) && !($value instanceof Phrase)) {
$value = $this->buildOutputDataArray($value, $returnType);
} elseif (is_array($value)) {
$valueResult = [];
$arrayElementType = substr($returnType, 0, -2);
foreach ($value as $singleValue) {
if (is_object($singleValue) && !($singleValue instanceof Phrase)) {
$singleValue = $this->buildOutputDataArray($singleValue, $arrayElementType);
}
$valueResult[] = $this->typeCaster->castValueToType($singleValue, $arrayElementType);
}
$value = $valueResult;
} else {
$value = $this->typeCaster->castValueToType($value, $returnType);
}
}

$outputData[$key] = $value;
}

$outputData = $this->changeOutputArray($dataObject, $outputData);

return $outputData;
}

/**
* Change output array if needed.
*
* @param mixed $dataObject
* @param array $outputData
* @return array
*/
private function changeOutputArray($dataObject, array $outputData): array
{
foreach ($this->processors as $dataObjectClassName => $processor) {
if ($dataObject instanceof $dataObjectClassName) {
$outputData = $processor->execute($dataObject, $outputData);
}
}

return $outputData;
}
}