class EntityReferenceFieldDiffParser in Entity Share 8.3
Plugin to diff entity reference fields.
Plugin annotation
@DiffGenerator(
id = "entity_reference_field_diff_parser",
label = @Translation("Entity Reference Field Parser"),
field_types = {
"entity_reference"
},
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\entity_share_diff\DiffGenerator\DiffGeneratorPluginBase implements ContainerFactoryPluginInterface, DiffGeneratorInterface uses StringTranslationTrait
- class \Drupal\entity_share_diff\Plugin\DiffGenerator\EntityReferenceFieldDiffParser
- class \Drupal\entity_share_diff\DiffGenerator\DiffGeneratorPluginBase implements ContainerFactoryPluginInterface, DiffGeneratorInterface uses StringTranslationTrait
Expanded class hierarchy of EntityReferenceFieldDiffParser
File
- modules/
entity_share_diff/ src/ Plugin/ DiffGenerator/ EntityReferenceFieldDiffParser.php, line 23
Namespace
Drupal\entity_share_diff\Plugin\DiffGeneratorView source
class EntityReferenceFieldDiffParser extends DiffGeneratorPluginBase {
/**
* {@inheritdoc}
*/
public function build(FieldItemListInterface $field_items, array $remote_field_data = []) {
$result = [];
// Case of local entity:
// Every item from $field_items is of type FieldItemInterface.
if (!$this
->getRemote()) {
foreach ($field_items as $field_key => $field_item) {
if (!$field_item
->isEmpty()) {
// Compare entity label.
if ($field_item->entity) {
$entity = $field_item->entity;
// Should we go into recursion and embed the referenced entity?
// If the entity has already been processed, don't embed,
// to avoid infinite loop.
// If the referenced entity type is not Paragraph or Media,
// don't embed.
if ($this->entityParser
->referenceEmbeddable($entity
->getEntityTypeId()) && $this->entityParser
->validateNeedToProcess($entity
->uuid(), FALSE)) {
$result[$field_key] = $this->entityParser
->prepareLocalEntity($entity);
}
else {
$result[$field_key] = $entity
->label() . ' (' . $entity
->uuid() . ')';
}
}
}
}
}
elseif (!empty($remote_field_data['data'])) {
$detailed_response = $this->remoteManager
->jsonApiRequest($this
->getRemote(), 'GET', $remote_field_data['links']['related']['href']);
$entities_json = Json::decode((string) $detailed_response
->getBody());
if (!empty($entities_json['data'])) {
$data = EntityShareUtility::prepareData($entities_json['data']);
}
else {
$data = [];
}
foreach ($remote_field_data['data'] as $field_key => $remote_item_data) {
$uuid = $data[$field_key]['id'];
list($referenced_entity_type, ) = explode('--', $remote_item_data['type']);
if ($this->entityParser
->referenceEmbeddable($referenced_entity_type) && $this->entityParser
->validateNeedToProcess($uuid, TRUE)) {
$result[$field_key] = $this->entityParser
->prepareRemoteEntity($data[$field_key], $this
->getRemote());
}
elseif (isset($data[$field_key])) {
$public_title_key = $this->entityParser
->getPublicFieldName('title', $data[$field_key]);
$title = $data[$field_key]['attributes'][$public_title_key] ?? '';
$uuid = $remote_item_data['id'];
$result[$field_key] = "{$title} ({$uuid})";
}
}
}
return $result;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DiffGeneratorPluginBase:: |
protected | property | The entity parser service. | |
DiffGeneratorPluginBase:: |
protected | property | The entity type manager. | |
DiffGeneratorPluginBase:: |
protected | property | The 'Remote' entity. | |
DiffGeneratorPluginBase:: |
protected | property | The remote manager service. | |
DiffGeneratorPluginBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
DiffGeneratorPluginBase:: |
public | function | Returns Remote entity. | |
DiffGeneratorPluginBase:: |
public static | function |
Returns if the plugin can be used for the provided field. Overrides DiffGeneratorInterface:: |
|
DiffGeneratorPluginBase:: |
public | function | Sets Remote entity. | |
DiffGeneratorPluginBase:: |
public | function |
Constructs a DiffManagerBase object. Overrides PluginBase:: |
|
EntityReferenceFieldDiffParser:: |
public | function |
Builds an array of strings. Overrides DiffGeneratorInterface:: |
1 |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |