1
0
mirror of synced 2024-12-05 03:36:05 +03:00
bitrix-module/intaro.retailcrm/lib/component/json/strategy/serialize/entitystrategy.php
Neur0toxine 5f69051859
Программа лояльности
* New module structure (refactoring)
* Simple serializer and deserializer with models, new architecture
* Move logic to strategies
* Partial api client facade implementation (full implementation is not necessary for now)
* Loyalty feature installer
* Sms verification order (#167)
* Make updater self-sufficient
* Fix for order submit & fix for incorrect component rendering in the constructor
* Fix for loyalty personal area error handling
* Fix for cart component identity
* Fix for softlock when customer cannot be registered in loyalty

Co-authored-by: Сергей Чазов <45812598+Chazovs@users.noreply.github.com>
Co-authored-by: Sergey Chazov <oitv18@gmail.com>
2021-11-16 10:48:26 +03:00

90 lines
2.7 KiB
PHP

<?php
/**
* PHP version 7.1
*
* @category Integration
* @package Intaro\RetailCrm\Component\Json\Strategy\Serialize
* @author RetailCRM <integration@retailcrm.ru>
* @license MIT
* @link http://retailcrm.ru
* @see http://retailcrm.ru/docs
*/
namespace Intaro\RetailCrm\Component\Json\Strategy\Serialize;
use Intaro\RetailCrm\Component\Json\PropertyAnnotations;
use Intaro\RetailCrm\Component\Json\Strategy\IsNoTransformTrait;
use Intaro\RetailCrm\Component\Json\Mapping\Accessor;
use Intaro\RetailCrm\Component\Json\Mapping\SerializedName;
use Intaro\RetailCrm\Component\Json\Mapping\Type;
use Intaro\RetailCrm\Component\Json\Strategy\StrategyFactory;
/**
* Class EntityStrategy
*
* @package Intaro\RetailCrm\Component\Json\Strategy\Serialize
*/
class EntityStrategy implements SerializeStrategyInterface
{
use InnerTypeTrait;
use IsNoTransformTrait;
/**
* @inheritDoc
* @throws \ReflectionException
*/
public function serialize($value, $annotations = null)
{
if (empty($value)) {
return null;
}
$result = [];
$reflection = new \ReflectionClass(get_class($value));
if (!$reflection->isUserDefined()) {
return (array) $value;
}
foreach ($reflection->getProperties() as $property) {
static::serializeProperty($value, $property, $result);
}
return $result;
}
/**
* @param object $object
* @param \ReflectionProperty $property
* @param array $result
*/
protected static function serializeProperty($object, \ReflectionProperty $property, array &$result): void
{
$annotations = new PropertyAnnotations(static::annotationReader()->getPropertyAnnotations($property));
if (!($annotations->serializedName instanceof SerializedName)) {
return;
}
if ($annotations->accessor instanceof Accessor && !empty($annotations->accessor->getter)) {
$value = $object->{$annotations->accessor->getter}();
} else {
$property->setAccessible(true);
$value = $property->getValue($object);
}
if (static::isNoTransform($property)) {
$result[$annotations->serializedName->name] = $value;
} else {
if ($annotations->type instanceof Type) {
$result[$annotations->serializedName->name] =
StrategyFactory::serializeStrategyByType($annotations->type->type)->serialize($value, $annotations);
} else {
$result[$annotations->serializedName->name] =
StrategyFactory::serializeStrategyByType(gettype($value))->serialize($value, $annotations);
}
}
}
}