Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / hal / src / Normalizer / FieldNormalizer.php
1 <?php
2
3 namespace Drupal\hal\Normalizer;
4
5 use Drupal\Component\Utility\NestedArray;
6 use Drupal\serialization\Normalizer\FieldNormalizer as SerializationFieldNormalizer;
7
8 /**
9  * Converts the Drupal field structure to HAL array structure.
10  */
11 class FieldNormalizer extends SerializationFieldNormalizer {
12
13   /**
14    * {@inheritdoc}
15    */
16   protected $format = ['hal_json'];
17
18   /**
19    * {@inheritdoc}
20    */
21   public function normalize($field_items, $format = NULL, array $context = []) {
22     $normalized_field_items = [];
23
24     // Get the field definition.
25     $entity = $field_items->getEntity();
26     $field_name = $field_items->getName();
27     $field_definition = $field_items->getFieldDefinition();
28
29     // If this field is not translatable, it can simply be normalized without
30     // separating it into different translations.
31     if (!$field_definition->isTranslatable()) {
32       $normalized_field_items = $this->normalizeFieldItems($field_items, $format, $context);
33     }
34     // Otherwise, the languages have to be extracted from the entity and passed
35     // in to the field item normalizer in the context. The langcode is appended
36     // to the field item values.
37     else {
38       foreach ($entity->getTranslationLanguages() as $language) {
39         $context['langcode'] = $language->getId();
40         $translation = $entity->getTranslation($language->getId());
41         $translated_field_items = $translation->get($field_name);
42         $normalized_field_items = array_merge($normalized_field_items, $this->normalizeFieldItems($translated_field_items, $format, $context));
43       }
44     }
45
46     // Merge deep so that links set in entity reference normalizers are merged
47     // into the links property.
48     return NestedArray::mergeDeepArray($normalized_field_items);
49   }
50
51   /**
52    * Helper function to normalize field items.
53    *
54    * @param \Drupal\Core\Field\FieldItemListInterface $field_items
55    *   The field item list object.
56    * @param string $format
57    *   The format.
58    * @param array $context
59    *   The context array.
60    *
61    * @return array
62    *   The array of normalized field items.
63    */
64   protected function normalizeFieldItems($field_items, $format, $context) {
65     $normalized_field_items = [];
66     if (!$field_items->isEmpty()) {
67       foreach ($field_items as $field_item) {
68         $normalized_field_items[] = $this->serializer->normalize($field_item, $format, $context);
69       }
70     }
71     return $normalized_field_items;
72   }
73
74 }