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; | |
} | |
} | |
} |