diff --git a/core/modules/migrate_drupal/migrate_drupal.module b/core/modules/migrate_drupal/migrate_drupal.module index a5ab2e023d..41ba404d01 100644 --- a/core/modules/migrate_drupal/migrate_drupal.module +++ b/core/modules/migrate_drupal/migrate_drupal.module @@ -47,7 +47,7 @@ function migrate_drupal_migration_plugins_alter(&$definitions) { ]; $vocabulary_migration = \Drupal::service('plugin.manager.migration')->createStubMigration($vocabulary_migration_definition); $module_handler = \Drupal::service('module_handler'); - $translation_active = $module_handler->moduleExists('config_translation') && $module_handler->moduleExists('content_translation'); + $translation_active = $module_handler->moduleExists('config_translation'); try { $source_plugin = $vocabulary_migration->getSourcePlugin(); @@ -66,20 +66,18 @@ function migrate_drupal_migration_plugins_alter(&$definitions) { if ($translation_active) { $plugin_ids[] = 'd6_term_node_translation:' . $source_vid; } - foreach ($plugin_ids as $plugin_id) { - if (isset($definitions[$plugin_id])) { - // Match the field name derivation in d6_vocabulary_field.yml. - $field_name = substr('field_' . $row->getDestinationProperty('vid'), 0, 32); + foreach (array_intersect($plugin_ids, array_keys($definitions)) as $plugin_id) { + // Match the field name derivation in d6_vocabulary_field.yml. + $field_name = substr('field_' . $row->getDestinationProperty('vid'), 0, 32); - // The Forum module is expecting 'taxonomy_forums' as the field name - // for the forum nodes. The 'forum_vocabulary' source property is - // evaluated in Drupal\taxonomy\Plugin\migrate\source\d6\Vocabulary - // and is set to true if the vocabulary vid being migrated is the - // same as the one in the 'forum_nav_vocabulary' variable on the - // source site. - $destination_vid = $row->getSourceProperty('forum_vocabulary') ? 'taxonomy_forums' : $field_name; - $definitions[$plugin_id]['process'][$destination_vid] = 'tid'; - } + // The Forum module is expecting 'taxonomy_forums' as the field name + // for the forum nodes. The 'forum_vocabulary' source property is + // evaluated in Drupal\taxonomy\Plugin\migrate\source\d6\Vocabulary + // and is set to true if the vocabulary vid being migrated is the + // same as the one in the 'forum_nav_vocabulary' variable on the + // source site. + $destination_vid = $row->getSourceProperty('forum_vocabulary') ? 'taxonomy_forums' : $field_name; + $definitions[$plugin_id]['process'][$destination_vid] = 'tid'; } } } @@ -100,7 +98,7 @@ function migrate_drupal_migration_plugins_alter(&$definitions) { if (_isMultilingualSource($definitions)) { foreach ($definitions as &$definition) { if (!preg_match('/d([67])_(node|node_translation|node_revision)($|:.*)/', $definition['id'])) { - $properties = ['destination', 'migration_dependencies']; + $properties = ['destination', 'process', 'migration_dependencies']; foreach ($properties as $property) { if (isset($definition[$property])) { array_walk_recursive($definition[$property], function (&$value) { @@ -112,59 +110,49 @@ function migrate_drupal_migration_plugins_alter(&$definitions) { } } } + if (preg_match('/d6_term_node($|:.*)/', $definition['id'])) { + $definition['process']['nid'][2] = [ + 'plugin' => 'node_master_node_lookup', + ]; + } + if (preg_match('/d6_term_node_revision($|:.*)/', $definition['id'])) { + $definition['process']['nid'][2] = [ + 'plugin' => 'node_master_node_revision_lookup', + ]; + } + if (preg_match('/d6_term_node_translation($|:.*)/', $definition['id'])) { + $definition['process']['dest_nid'][2] = [ + 'plugin' => 'node_master_node_translation_lookup', + ]; + } } if (isset($definitions['d6_comment'])) { - $tmp = $definitions['d6_comment']['process']['entity_id'][0]['migration']; - $definitions['d6_comment']['process']['entity_id'][0]['migration'] = _insert_migration($tmp); - } - if (isset($definitions['d6_term_node'])) { - $tmp = $definitions['d6_term_node']['process']['nid'][0]['migration']; - $definitions['d6_term_node']['process']['nid'][0]['migration'] = _insert_migration($tmp); - } - if (isset($definitions['d6_term_node_revision'])) { - $tmp = $definitions['d6_term_node_revision']['process']['vid'][0]['migration']; - $definitions['d6_term_node_revision']['process']['vid'][0]['migration'] = _insert_migration($tmp); - } - if (isset($definitions['d6_term_node_translation'])) { - $tmp = $definitions['d6_term_node_translation']['process']['dest_nid'][0]['migration']; - $definitions['d6_term_node_translation']['process']['dest_nid'][0]['migration'] = _insert_migration($tmp); + $definitions['d6_comment']['process']['entity_id'][2] = [ + 'plugin' => 'node_master_node_lookup', + ]; } if (isset($definitions['d6_url_alias'])) { - $tmp = $definitions['d6_url_alias']['process']['node_translation'][2]['migration']; - $definitions['d6_url_alias']['process']['node_translation'][2]['migration'] = _insert_migration($tmp); + $definitions['d6_url_alias']['process']['node_translation'][3] = [ + 'plugin' => 'node_master_node_translation_lookup', + ]; } - if (isset($definitions['d7_comment'])) { - $tmp = $definitions['d7_comment']['process']['entity_id'][0]['migration']; - $definitions['d7_comment']['process']['entity_id'][0]['migration'] = _insert_migration($tmp); + $definitions['d7_comment']['process']['entity_id'][2] = [ + 'plugin' => 'node_master_node_lookup', + ]; } if (isset($definitions['d7_url_alias'])) { - $tmp = $definitions['d7_url_alias']['process']['node_translation'][2]['migration']; - $definitions['d7_url_alias']['process']['node_translation'][2]['migration'] = _insert_migration($tmp); + $definitions['d7_url_alias']['process']['node_translation'][3] = [ + 'plugin' => 'node_master_node_translation_lookup', + ]; } - if (isset($definitions['statistics_node_counter'])) { - $tmp = $definitions['statistics_node_counter']['process']['nid'][0]['migration']; - $definitions['statistics_node_counter']['process']['nid'][0]['migration'] = _insert_migration($tmp); + $definitions['statistics_node_counter']['process']['nid'][2] = [ + 'plugin' => 'node_master_node_lookup', + ]; } } - -} - -/** - * Implements hook_aggregator_fetcher_info_alter(). - */ -function _insert_migration($migrations) { - if (!is_array($migrations)) { - $migrations = [$migrations]; - } - $new_migration_list = []; - foreach ($migrations as $migration) { - $tmp = substr($migration, 0, 2) . '_node_master'; - array_unshift($new_migration_list, $tmp, $migration); - } - return array_unique($new_migration_list); } /** diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/MigrationLookupNode.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/MigrationLookupNode.php deleted file mode 100644 index 4e76c45732..0000000000 --- a/core/modules/migrate_drupal/src/Plugin/migrate/process/MigrationLookupNode.php +++ /dev/null @@ -1,38 +0,0 @@ -configuration; - $configuration['migration'] = preg_replace('/d([67])_(node|node_translation|node_revision)($|:.*)/', 'd$1_node_master$3', $configuration['migration']); - $ml = new MigrationLookup($configuration, $this->pluginId, $this->pluginDefinition, $this->migration, $this->migrationPluginManager); - $master_value = $ml->transform($value, $migrate_executable, $row, $destination_property); - $node_value = ($master_value) ?? $master_value[0]; - } - return $node_value; - } - -} diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeMasterNodeLookup.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeMasterNodeLookup.php new file mode 100644 index 0000000000..898612c659 --- /dev/null +++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeMasterNodeLookup.php @@ -0,0 +1,36 @@ +