You are here

public function SchemataSchemaNormalizer::normalize in JSON:API Extras 8

Same name and namespace in other branches
  1. 8.3 src/Normalizer/SchemataSchemaNormalizer.php \Drupal\jsonapi_extras\Normalizer\SchemataSchemaNormalizer::normalize()
  2. 8.2 src/Normalizer/SchemataSchemaNormalizer.php \Drupal\jsonapi_extras\Normalizer\SchemataSchemaNormalizer::normalize()

Overrides SchemataSchemaNormalizer::normalize

File

src/Normalizer/SchemataSchemaNormalizer.php, line 33

Class

SchemataSchemaNormalizer
Applies JSONAPI Extras attribute overrides to entity schemas.

Namespace

Drupal\jsonapi_extras\Normalizer

Code

public function normalize($entity, $format = NULL, array $context = []) {
  $normalized = parent::normalize($entity, $format, $context);

  // Load the resource type for this entity type and bundle.
  $resource_type = $this->resourceTypeRepository
    ->get($entity
    ->getEntityTypeId(), $entity
    ->getBundleId());
  if (!$resource_type) {
    return $normalized;
  }

  // Alter the attributes according to the resource config.
  foreach ([
    'attributes',
    'relationships',
  ] as $property_type) {
    foreach ($normalized['properties'][$property_type]['properties'] as $fieldname => $schema) {
      $properties =& $normalized['properties'][$property_type]['properties'];
      unset($properties[$fieldname]);
      if (!$resource_type
        ->isFieldEnabled($fieldname)) {

        // If the field is disabled, do nothing after removal.
        continue;
      }
      else {

        // Otherwise, substitute the public name.
        $public_name = $resource_type
          ->getPublicName($fieldname);
        $properties[$public_name] = $schema;
      }
    }
  }
  return $normalized;
}