Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 44 |
| EntityReferenceItemNormalizer | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
132 | |
0.00% |
0 / 44 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| normalize | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 24 |
|||
| constructValue | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
| getUuid | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 8 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\hal\Normalizer\EntityReferenceItemNormalizer. | |
| */ | |
| namespace Drupal\hal\Normalizer; | |
| use Drupal\Core\Entity\FieldableEntityInterface; | |
| use Drupal\rest\LinkManager\LinkManagerInterface; | |
| use Drupal\serialization\EntityResolver\EntityResolverInterface; | |
| use Drupal\serialization\EntityResolver\UuidReferenceInterface; | |
| /** | |
| * Converts the Drupal entity reference item object to HAL array structure. | |
| */ | |
| class EntityReferenceItemNormalizer extends FieldItemNormalizer implements UuidReferenceInterface { | |
| /** | |
| * The interface or class that this Normalizer supports. | |
| * | |
| * @var string | |
| */ | |
| protected $supportedInterfaceOrClass = 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem'; | |
| /** | |
| * The hypermedia link manager. | |
| * | |
| * @var \Drupal\rest\LinkManager\LinkManagerInterface | |
| */ | |
| protected $linkManager; | |
| /** | |
| * The entity resolver. | |
| * | |
| * @var \Drupal\serialization\EntityResolver\EntityResolverInterface | |
| */ | |
| protected $entityResolver; | |
| /** | |
| * Constructs an EntityReferenceItemNormalizer object. | |
| * | |
| * @param \Drupal\rest\LinkManager\LinkManagerInterface $link_manager | |
| * The hypermedia link manager. | |
| * @param \Drupal\serialization\EntityResolver\EntityResolverInterface $entity_Resolver | |
| * The entity resolver. | |
| */ | |
| public function __construct(LinkManagerInterface $link_manager, EntityResolverInterface $entity_Resolver) { | |
| $this->linkManager = $link_manager; | |
| $this->entityResolver = $entity_Resolver; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function normalize($field_item, $format = NULL, array $context = array()) { | |
| /** @var $field_item \Drupal\Core\Field\FieldItemInterface */ | |
| $target_entity = $field_item->get('entity')->getValue(); | |
| // If this is not a content entity, let the parent implementation handle it, | |
| // only content entities are supported as embedded resources. | |
| if (!($target_entity instanceof FieldableEntityInterface)) { | |
| return parent::normalize($field_item, $format, $context); | |
| } | |
| // If the parent entity passed in a langcode, unset it before normalizing | |
| // the target entity. Otherwise, untranslatable fields of the target entity | |
| // will include the langcode. | |
| $langcode = isset($context['langcode']) ? $context['langcode'] : NULL; | |
| unset($context['langcode']); | |
| $context['included_fields'] = array('uuid'); | |
| // Normalize the target entity. | |
| $embedded = $this->serializer->normalize($target_entity, $format, $context); | |
| $link = $embedded['_links']['self']; | |
| // If the field is translatable, add the langcode to the link relation | |
| // object. This does not indicate the language of the target entity. | |
| if ($langcode) { | |
| $embedded['lang'] = $link['lang'] = $langcode; | |
| } | |
| // The returned structure will be recursively merged into the normalized | |
| // entity so that the items are properly added to the _links and _embedded | |
| // objects. | |
| $field_name = $field_item->getParent()->getName(); | |
| $entity = $field_item->getEntity(); | |
| $field_uri = $this->linkManager->getRelationUri($entity->getEntityTypeId(), $entity->bundle(), $field_name, $context); | |
| return array( | |
| '_links' => array( | |
| $field_uri => array($link), | |
| ), | |
| '_embedded' => array( | |
| $field_uri => array($embedded), | |
| ), | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function constructValue($data, $context) { | |
| $field_item = $context['target_instance']; | |
| $field_definition = $field_item->getFieldDefinition(); | |
| $target_type = $field_definition->getSetting('target_type'); | |
| $id = $this->entityResolver->resolve($this, $data, $target_type); | |
| if (isset($id)) { | |
| return array('target_id' => $id); | |
| } | |
| return NULL; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getUuid($data) { | |
| if (isset($data['uuid'])) { | |
| $uuid = $data['uuid']; | |
| // The value may be a nested array like $uuid[0]['value']. | |
| if (is_array($uuid) && isset($uuid[0]['value'])) { | |
| $uuid = $uuid[0]['value']; | |
| } | |
| return $uuid; | |
| } | |
| } | |
| } |