You are here

protected function MigrationConfigurationTrait::getMigrations in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/migrate_drupal/src/MigrationConfigurationTrait.php \Drupal\migrate_drupal\MigrationConfigurationTrait::getMigrations()
  2. 10 core/modules/migrate_drupal/src/MigrationConfigurationTrait.php \Drupal\migrate_drupal\MigrationConfigurationTrait::getMigrations()

Gets the migrations for import.

Parameters

string $database_state_key: The state key.

int $drupal_version: The version of Drupal we're getting the migrations for.

Return value

\Drupal\migrate\Plugin\MigrationInterface[] The migrations for import.

1 call to MigrationConfigurationTrait::getMigrations()
CredentialForm::setupMigrations in core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
Gets and stores information for this migration in temporary store.

File

core/modules/migrate_drupal/src/MigrationConfigurationTrait.php, line 122

Class

MigrationConfigurationTrait
Configures the appropriate migrations for a given source Drupal database.

Namespace

Drupal\migrate_drupal

Code

protected function getMigrations($database_state_key, $drupal_version) {
  $version_tag = 'Drupal ' . $drupal_version;

  /** @var \Drupal\migrate\Plugin\MigrationInterface[] $all_migrations */
  $all_migrations = $this
    ->getMigrationPluginManager()
    ->createInstancesByTag($version_tag);

  // Unset the node migrations that should not run based on the type of node
  // migration. That is, if this is a complete node migration then unset the
  // classic node migrations and if this is a classic node migration then
  // unset the complete node migrations.
  $type = NodeMigrateType::getNodeMigrateType(\Drupal::database(), $drupal_version);
  switch ($type) {
    case NodeMigrateType::NODE_MIGRATE_TYPE_COMPLETE:
      $patterns = '/(d' . $drupal_version . '_node:)|(d' . $drupal_version . '_node_translation:)|(d' . $drupal_version . '_node_revision:)|(d7_node_entity_translation:)/';
      break;
    case NodeMigrateType::NODE_MIGRATE_TYPE_CLASSIC:
      $patterns = '/(d' . $drupal_version . '_node_complete:)/';
      break;
  }
  foreach ($all_migrations as $key => $migrations) {
    if (preg_match($patterns, $key)) {
      unset($all_migrations[$key]);
    }
  }
  $migrations = [];
  foreach ($all_migrations as $migration) {

    // Skip migrations tagged with any of the follow-up migration tags. They
    // will be derived and executed after the migrations on which they depend
    // have been successfully executed.
    // @see Drupal\migrate_drupal\Plugin\MigrationWithFollowUpInterface
    if (!empty(array_intersect($migration
      ->getMigrationTags(), $this
      ->getFollowUpMigrationTags()))) {
      continue;
    }
    try {

      // @todo https://drupal.org/node/2681867 We should be able to validate
      //   the entire migration at this point.
      $source_plugin = $migration
        ->getSourcePlugin();
      if ($source_plugin instanceof RequirementsInterface) {
        $source_plugin
          ->checkRequirements();
      }
      $destination_plugin = $migration
        ->getDestinationPlugin();
      if ($destination_plugin instanceof RequirementsInterface) {
        $destination_plugin
          ->checkRequirements();
      }
      $migrations[] = $migration;
    } catch (RequirementsException $e) {

      // Migrations which are not applicable given the source and destination
      // site configurations (e.g., what modules are enabled) will be silently
      // ignored.
    }
  }
  return $migrations;
}