diff --git a/core/modules/migrate_drupal/migration_templates/d7_entity_reference_transaltion.yml b/core/modules/migrate_drupal/migration_templates/d7_entity_reference_transaltion.yml new file mode 100644 index 0000000..e2947c2 --- /dev/null +++ b/core/modules/migrate_drupal/migration_templates/d7_entity_reference_transaltion.yml @@ -0,0 +1,13 @@ +id: d7_entity_reference_translation +label: Entity reference translations +migration_tags: + - Drupal 7 +deriver: Drupal\migrate_drupal\Plugin\migrate\D7EntityReferenceTranslationDeriver +target_types: + node: + source: d7_node + dependency: d7_node_translation +source: + plugin: empty +destination: + plugin: entity diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/D7EntityReferenceTranslationDeriver.php b/core/modules/migrate_drupal/src/Plugin/migrate/D7EntityReferenceTranslationDeriver.php new file mode 100644 index 0000000..85b7f26 --- /dev/null +++ b/core/modules/migrate_drupal/src/Plugin/migrate/D7EntityReferenceTranslationDeriver.php @@ -0,0 +1,63 @@ +getSourceProperty('type'); + $settings = $row->getSourceProperty('settings'); + $storage = $row->getSourceProperty('storage'); + if ($type == 'entityreference' && isset($target_types[$settings['target_type']]) && $storage['type'] == 'field_sql_storage') { + $field_name = $row->getSourceProperty('field_name'); + foreach ($row->getSourceProperty('instances') as $instance) { + $derivative = $instance['entity_type'] . '__' . $instance['bundle']; + if (!isset($this->derivatives[$derivative])) { + $this->derivatives[$derivative] = $base_plugin_definition; + $this->derivatives[$derivative]['source'] = [ + 'plugin' => $target_types[$instance['entity_type']['source'], + ]; + + $source_migration = \Drupal::service('plugin.manager.migration')->createInstance($target_types[$instance['entity_type']['source']); + $this->derivatives[$derivative]['process'] = $source_migration->getProcess(); + + $this->derivatives[$derivative]['destination'] = [ + 'plugin' => 'entity:' . $instance['entity_type'], + 'default_bundle' => $instance['bundle'], + ]; + + $this->derivatives[$derivative]['migration_dependencies'] = [ + 'required' => [ + $taget_types[$instance['entity_type']['dependency'], + ], + ]; + } + + $this->derivatives[$derivative]['process'][$field_name] = [ + 'plugin' => 'migration_lookup', + 'source' => $field_name, + 'migration' => $taget_types[$instance['entity_type']['dependency'], + ]; + } + } + } + return $this->derivatives; + } + +}