95 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * @file
 | 
						|
 * Provides migration from other Drupal sites.
 | 
						|
 */
 | 
						|
 | 
						|
use Drupal\Core\Url;
 | 
						|
use Drupal\Core\Database\DatabaseExceptionWrapper;
 | 
						|
use Drupal\Core\Routing\RouteMatchInterface;
 | 
						|
use Drupal\migrate\Exception\RequirementsException;
 | 
						|
use Drupal\migrate\MigrateExecutable;
 | 
						|
use Drupal\migrate\Plugin\RequirementsInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * 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>';
 | 
						|
      $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>';
 | 
						|
      return $output;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 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',
 | 
						|
      ],
 | 
						|
      'idMap' => [
 | 
						|
        'plugin' => 'null',
 | 
						|
      ],
 | 
						|
    ];
 | 
						|
    $vocabulary_migration = \Drupal::service('plugin.manager.migration')->createStubMigration($vocabulary_migration_definition);
 | 
						|
    $translation_active = \Drupal::service('module_handler')->moduleExists('config_translation');
 | 
						|
 | 
						|
    try {
 | 
						|
      $source_plugin = $vocabulary_migration->getSourcePlugin();
 | 
						|
      if ($source_plugin instanceof RequirementsInterface) {
 | 
						|
        $source_plugin->checkRequirements();
 | 
						|
      }
 | 
						|
      $executable = new MigrateExecutable($vocabulary_migration);
 | 
						|
      $process = ['vid' => $definitions['d6_taxonomy_vocabulary']['process']['vid']];
 | 
						|
      foreach ($source_plugin as $row) {
 | 
						|
        $executable->processRow($row, $process);
 | 
						|
        $source_vid = $row->getSourceProperty('vid');
 | 
						|
        $plugin_ids = [
 | 
						|
          'd6_term_node:' . $source_vid,
 | 
						|
          'd6_term_node_revision:' . $source_vid,
 | 
						|
        ];
 | 
						|
        if ($translation_active) {
 | 
						|
          $plugin_ids[] = 'd6_term_node_translation:' . $source_vid;
 | 
						|
        }
 | 
						|
        foreach ($plugin_ids 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';
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    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.
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
}
 |