protected function LayoutBuilderCopyWidget::cloneEntity in Layout Builder Asymmetric Translation 8.2
Replicate an entity.
Parameters
$entity_type_id:
$entity_id:
Return value
\Drupal\Core\Entity\EntityInterface|NULL
1 call to LayoutBuilderCopyWidget::cloneEntity()
- LayoutBuilderCopyWidget::extractFormValues in src/
Plugin/ Field/ FieldWidget/ LayoutBuilderCopyWidget.php - Extract form values.
File
- src/
Plugin/ Field/ FieldWidget/ LayoutBuilderCopyWidget.php, line 301
Class
- LayoutBuilderCopyWidget
- A widget to display the copy widget form.
Namespace
Drupal\layout_builder_at\Plugin\Field\FieldWidgetCode
protected function cloneEntity($entity_type_id, $entity_id) {
$clone = NULL;
try {
/** @var \Drupal\Core\Entity\EntityInterface $entity */
/** @var \Drupal\Core\Entity\EntityInterface $clone */
$entity = \Drupal::service('entity_type.manager')
->getStorage($entity_type_id)
->load($entity_id);
$clone = $entity
->createDuplicate();
/** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_definitions */
$field_definitions = \Drupal::service('entity_field.manager')
->getFieldDefinitions($entity
->getEntityTypeId(), $entity
->bundle());
foreach ($field_definitions as $definition) {
// Support for Entity reference revisions.
if ($definition
->getFieldStorageDefinition()
->getType() == 'entity_reference_revisions') {
$new_values = [];
$target_type = $definition
->getFieldStorageDefinition()
->getSetting('target_type');
$values = $clone
->get($definition
->getName())
->getValue();
if (!empty($values)) {
foreach ($values as $value) {
/** @var \Drupal\Core\Entity\EntityInterface $reference */
/** @var \Drupal\Core\Entity\EntityInterface $reference_clone */
$reference = \Drupal::service('entity_type.manager')
->getStorage($target_type)
->load($value['target_id']);
$reference_clone = $reference
->createDuplicate();
$reference_clone
->save();
$new_values[] = [
'target_id' => $reference_clone
->id(),
'target_revision_id' => $reference_clone
->getRevisionId(),
];
}
if (!empty($new_values)) {
$clone
->set($definition
->getName(), $new_values);
}
}
}
}
} catch (\Exception $e) {
\Drupal::logger('layout_builder_at')
->error('Error cloning entity: @message', [
'@message' => $e
->getMessage(),
]);
}
return $clone;
}