public static function ContentEntitySource::getEmbeddableFields in Translation Management Tool 8
Returns fields that should be embedded into the data for the given entity.
Includes explicitly enabled fields and composite entities that are implicitly included to the translatable data.
Parameters
\Drupal\Core\Entity\ContentEntityInterface $entity: The entity to get the translatable data from.
Return value
\Drupal\Core\Field\FieldDefinitionInterface[] $embeddable_fields A list of field definitions that can be embedded.
3 calls to ContentEntitySource::getEmbeddableFields()
- ContentEntitySource::doSaveTranslations in sources/
content/ src/ Plugin/ tmgmt/ Source/ ContentEntitySource.php - Saves translation data in an entity translation.
- ContentEntitySource::extractTranslatableData in sources/
content/ src/ Plugin/ tmgmt/ Source/ ContentEntitySource.php - Extracts translatable data from an entity.
- tmgmt_content_tmgmt_source_suggestions in sources/
content/ tmgmt_content.module - Implements hook_tmgmt_source_suggestions().
File
- sources/
content/ src/ Plugin/ tmgmt/ Source/ ContentEntitySource.php, line 343
Class
- ContentEntitySource
- Content entity source plugin controller.
Namespace
Drupal\tmgmt_content\Plugin\tmgmt\SourceCode
public static function getEmbeddableFields(ContentEntityInterface $entity) {
// Get the configurable embeddable references.
$field_definitions = $entity
->getFieldDefinitions();
$embeddable_field_names = \Drupal::config('tmgmt_content.settings')
->get('embedded_fields');
$embeddable_fields = array_filter($field_definitions, function (FieldDefinitionInterface $field_definition) use ($embeddable_field_names) {
return isset($embeddable_field_names[$field_definition
->getTargetEntityTypeId()][$field_definition
->getName()]);
});
// Get always embedded references.
$content_translation_manager = \Drupal::service('content_translation.manager');
foreach ($field_definitions as $field_name => $field_definition) {
$storage_definition = $field_definition
->getFieldStorageDefinition();
$property_definitions = $storage_definition
->getPropertyDefinitions();
foreach ($property_definitions as $property_definition) {
// Look for entity_reference properties where the storage definition
// has a target type setting.
if (in_array($property_definition
->getDataType(), [
'entity_reference',
'entity_revision_reference',
]) && ($target_type_id = $storage_definition
->getSetting('target_type'))) {
$is_target_type_enabled = $content_translation_manager
->isEnabled($target_type_id);
$target_entity_type = \Drupal::entityTypeManager()
->getDefinition($target_type_id);
// Include current entity reference field that is considered a
// composite and translatable or if the parent entity is considered a
// composite as well. This allows to embed nested untranslatable
// fields (For example: Paragraphs).
if ($target_entity_type
->get('entity_revision_parent_type_field') && ($is_target_type_enabled || $entity
->getEntityType()
->get('entity_revision_parent_type_field'))) {
$embeddable_fields[$field_name] = $field_definition;
}
}
}
}
return $embeddable_fields;
}