You are here

protected function EntityNormalizerTrait::prepareInput in JSON:API Extras 8.2

Same name and namespace in other branches
  1. 8 src/Normalizer/EntityNormalizerTrait.php \Drupal\jsonapi_extras\Normalizer\EntityNormalizerTrait::prepareInput()

Prepares the input data to create the entity.

Parameters

array $data: The input data to modify.

\Drupal\jsonapi\ResourceType\ResourceType $resource_type: Contains the info about the resource type.

Return value

array The modified input data.

1 method overrides EntityNormalizerTrait::prepareInput()
ConfigEntityNormalizer::prepareInput in src/Normalizer/ConfigEntityNormalizer.php
Prepares the input data to create the entity.

File

src/Normalizer/EntityNormalizerTrait.php, line 23

Class

EntityNormalizerTrait
Common code for entity normalizers.

Namespace

Drupal\jsonapi_extras\Normalizer

Code

protected function prepareInput(array $data, ResourceType $resource_type) {

  /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_storage_definitions */
  $field_storage_definitions = \Drupal::service('entity_field.manager')
    ->getFieldStorageDefinitions($resource_type
    ->getEntityTypeId());
  $data_internal = [];

  /** @var \Drupal\jsonapi_extras\ResourceType\ConfigurableResourceType $resource_type */

  // Translate the public fields into the entity fields.
  foreach ($data as $public_field_name => $field_value) {

    // Skip any disabled field.
    $internal_name = $resource_type
      ->getInternalName($public_field_name);
    if (!$resource_type
      ->isFieldEnabled($internal_name)) {
      continue;
    }
    $enhancer = $resource_type
      ->getFieldEnhancer($public_field_name, 'publicName');
    if (isset($field_storage_definitions[$internal_name])) {
      $field_storage_definition = $field_storage_definitions[$internal_name];
      if ($field_storage_definition
        ->getCardinality() === 1) {
        try {
          $field_value = $enhancer ? $enhancer
            ->transform($field_value) : $field_value;
        } catch (\TypeError $exception) {
          $field_value = NULL;
        }
      }
      elseif (is_array($field_value)) {
        foreach ($field_value as $key => $individual_field_value) {
          try {
            $field_value[$key] = $enhancer ? $enhancer
              ->transform($individual_field_value) : $individual_field_value;
          } catch (\TypeError $exception) {
            $field_value[$key] = NULL;
          }
        }
      }
    }
    $data_internal[$internal_name] = $field_value;
  }
  return parent::prepareInput($data_internal, $resource_type);
}