Issue #2213451 by andypost, bdone, benjy, penyaskito, chx, claudiu.cristea, damiankloip, gregboggs, InternetDevels, jessehs, jhedstrom, marvil07, mikeryan, pcambra, Xano, YesCT: Update Migrate API in core
2014-03-19 18:56:48 +00:00
<?php
2015-04-18 14:41:40 +00:00
/**
* @file
* Provides migration from other Drupal sites.
*/
2019-04-16 05:38:27 +00:00
use Drupal\Core\Url;
2016-03-14 12:16:40 +00:00
use Drupal\Core\Database\DatabaseExceptionWrapper;
2015-04-18 14:41:40 +00:00
use Drupal\Core\Routing\RouteMatchInterface;
2016-03-14 12:16:40 +00:00
use Drupal\migrate\Exception\RequirementsException;
use Drupal\migrate\MigrateExecutable;
use Drupal\migrate\Plugin\RequirementsInterface;
2015-04-18 14:41:40 +00:00
/**
* Implements hook_help().
*/
function migrate_drupal_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'help.page.migrate_drupal':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
2019-04-16 05:38:27 +00:00
$output .= '<p>' . t('The Migrate Drupal module provides a framework based on the <a href=":migrate">Migrate module</a> to facilitate migration from a Drupal (6, 7, or 8) site to your website. It does not provide a user interface. For more information, see the <a href=":migrate_drupal">online documentation for the Migrate Drupal module</a>.', [':migrate' => Url::fromRoute('help.page', ['name' => 'migrate'])->toString(), ':migrate_drupal' => 'https://www.drupal.org/documentation/modules/migrate_drupal']) . '</p>';
2015-04-18 14:41:40 +00:00
return $output;
}
}
2016-03-14 12:16:40 +00:00
/**
* Implements hook_migration_plugins_alter().
*/
function migrate_drupal_migration_plugins_alter(&$definitions) {
// This is why the deriver can't do this: the 'd6_taxonomy_vocabulary'
// definition is not available to the deriver as it is running inside
// getDefinitions().
if (isset($definitions['d6_taxonomy_vocabulary'])) {
$vocabulary_migration_definition = [
'source' => [
'ignore_map' => TRUE,
'plugin' => 'd6_taxonomy_vocabulary',
],
'destination' => [
'plugin' => 'null',
],
2018-01-08 02:06:25 +00:00
'idMap' => [
'plugin' => 'null',
],
2016-03-14 12:16:40 +00:00
];
2016-03-24 12:19:01 +00:00
$vocabulary_migration = \Drupal::service('plugin.manager.migration')->createStubMigration($vocabulary_migration_definition);
Issue #2746541 by quietone, alexpott, maxocub, Wim Leers, mikelutz, jofitz, masipila, firewaller, Madhura BK, Gábor Hojtsy, catch, heddn, plach, hchonov: Migrate D6 and D7 node revision translations to D8
2020-03-12 12:00:10 +00:00
$module_handler = \Drupal::service('module_handler');
$translation_active = $module_handler->moduleExists('content_translation');
2016-03-14 12:16:40 +00:00
try {
$source_plugin = $vocabulary_migration->getSourcePlugin();
if ($source_plugin instanceof RequirementsInterface) {
$source_plugin->checkRequirements();
}
2017-09-18 18:25:10 +00:00
$executable = new MigrateExecutable($vocabulary_migration);
2016-03-14 12:16:40 +00:00
$process = ['vid' => $definitions['d6_taxonomy_vocabulary']['process']['vid']];
foreach ($source_plugin as $row) {
$executable->processRow($row, $process);
$source_vid = $row->getSourceProperty('vid');
2019-05-02 16:22:52 +00:00
$plugin_ids = [
'd6_term_node:' . $source_vid,
'd6_term_node_revision:' . $source_vid,
];
if ($translation_active) {
$plugin_ids[] = 'd6_term_node_translation:' . $source_vid;
}
2019-10-08 13:00:06 +00:00
foreach (array_intersect($plugin_ids, array_keys($definitions)) as $plugin_id) {
2017-08-05 09:00:17 +00:00
// Match the field name derivation in d6_vocabulary_field.yml.
$field_name = substr('field_' . $row->getDestinationProperty('vid'), 0, 32);
2017-08-18 05:52:47 +00:00
// 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';
2016-03-14 12:16:40 +00:00
}
}
}
catch (RequirementsException $e) {
// This code currently runs whenever the definitions are being loaded and
// if you have a Drupal 7 source site then the requirements will not be
// met for the d6_taxonomy_vocabulary migration.
}
catch (DatabaseExceptionWrapper $e) {
// When the definitions are loaded it is possible the tables will not
// exist.
}
}
}