Upgraded drupal core with security updates
[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    * The formats that the Normalizer can handle.
15    *
16    * @var array
17    */
18   protected $format = ['hal_json'];
19
20   /**
21    * {@inheritdoc}
22    */
23   public function normalize($field, $format = NULL, array $context = []) {
24     $normalized_field_items = [];
25
26     // Get the field definition.
27     $entity = $field->getEntity();
28     $field_name = $field->getName();
29     $field_definition = $field->getFieldDefinition();
30
31     // If this field is not translatable, it can simply be normalized without
32     // separating it into different translations.
33     if (!$field_definition->isTranslatable()) {
34       $normalized_field_items = $this->normalizeFieldItems($field, $format, $context);
35     }
36     // Otherwise, the languages have to be extracted from the entity and passed
37     // in to the field item normalizer in the context. The langcode is appended
38     // to the field item values.
39     else {
40       foreach ($entity->getTranslationLanguages() as $language) {
41         $context['langcode'] = $language->getId();
42         $translation = $entity->getTranslation($language->getId());
43         $translated_field = $translation->get($field_name);
44         $normalized_field_items = array_merge($normalized_field_items, $this->normalizeFieldItems($translated_field, $format, $context));
45       }
46     }
47
48     // Merge deep so that links set in entity reference normalizers are merged
49     // into the links property.
50     $normalized = NestedArray::mergeDeepArray($normalized_field_items);
51     return $normalized;
52   }
53
54   /**
55    * Helper function to normalize field items.
56    *
57    * @param \Drupal\Core\Field\FieldItemListInterface $field
58    *   The field object.
59    * @param string $format
60    *   The format.
61    * @param array $context
62    *   The context array.
63    *
64    * @return array
65    *   The array of normalized field items.
66    */
67   protected function normalizeFieldItems($field, $format, $context) {
68     $normalized_field_items = [];
69     if (!$field->isEmpty()) {
70       foreach ($field as $field_item) {
71         $normalized_field_items[] = $this->serializer->normalize($field_item, $format, $context);
72       }
73     }
74     return $normalized_field_items;
75   }
76
77 }