content_sync-8.x-2.x-dev/src/Normalizer/TimestampItemNormalizer.php
src/Normalizer/TimestampItemNormalizer.php
<?php
namespace Drupal\content_sync\Normalizer;
use Drupal\Core\Field\Plugin\Field\FieldType\TimestampItem;
use Drupal\Core\TypedData\Plugin\DataType\Timestamp;
use Drupal\serialization\Normalizer\TimestampItemNormalizer as BaseTimestampItemNormalizer;
/**
* Converts values for TimestampItem to and from common formats.
*
* Overrides FieldItemNormalizer and
* \Drupal\serialization\Normalizer\TimestampNormalizer
* to use
* \Drupal\content_sync\Normalizer\TimestampNormalizer
*
* Overrides FieldItemNormalizer to
* - during denormalization consider more than one value
* ie. for custom modules as smart_date
*/
class TimestampItemNormalizer extends BaseTimestampItemNormalizer {
/**
* {@inheritdoc}
*/
protected function constructValue($data, $context) {
if (!empty($data['format'])) {
$context['datetime_allowed_formats'] = [$data['format']];
}
$field_item = $context['target_instance'];
$denormalized_data = [];
foreach( $field_item->getProperties() as $item_key => $item){
if(isset($data[$item_key])){
$item_class = $item->getDataDefinition()->getClass();
if ($this->serializer->supportsDenormalization($data[$item_key], $item_class, NULL, $context)) {
$denormalized_data[$item_key] = $this->serializer->denormalize($data[$item_key],$item_class, NULL, $context );
}else{
$denormalized_data[$item_key] = $data[$item_key];
}
}
}
return $denormalized_data;
}
}