You are here

migrate_plus.module in Migrate Plus 8

Provides enhancements for implementing and managing migrations.

File

migrate_plus.module
View source
<?php

/**
 * @file
 * Provides enhancements for implementing and managing migrations.
 */
use Drupal\migrate\Entity\MigrationInterface;
use Drupal\migrate\Plugin\MigrateSourceInterface;
use Drupal\migrate\Row;
use Drupal\migrate_plus\Entity\MigrationGroup;
use Drupal\migrate_plus\Event\MigrateEvents;
use Drupal\migrate_plus\Event\MigratePrepareRowEvent;

/**
 * Implements hook_ENTITY_TYPE_load().
 */
function migrate_plus_migration_load($migrations) {

  /** @var MigrationInterface $migration */
  foreach ($migrations as $migration) {

    // If we are pointing to a valid group, merge its properties into ours.
    $migration_group = $migration
      ->getThirdPartySetting('migrate_plus', 'migration_group');
    if (empty($migration_group)) {
      $migration_group = 'default';
    }
    $group = MigrationGroup::load($migration_group);
    if (empty($group)) {
      continue;
    }
    $shared_configuration = $group
      ->get('shared_configuration');
    if (empty($shared_configuration)) {
      continue;
    }
    foreach ($shared_configuration as $key => $group_value) {
      $migration_value = $migration
        ->get($key);

      // Where both the migration and the group provide arrays,
      // replace recursively (so each key collision is resolved in favor
      // of the migration).
      if (is_array($migration_value) && is_array($group_value)) {
        $merged_values = array_replace_recursive($group_value, $migration_value);
        $migration
          ->set($key, $merged_values);
      }
      elseif (is_null($migration_value)) {
        $migration
          ->set($key, $group_value);
      }

      // Otherwise, the existing migration value overrides the group
      // value.
    }
  }
}

/**
 * Implements hook_migrate_prepare_row().
 */
function migrate_plus_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
  \Drupal::service('event_dispatcher')
    ->dispatch(MigrateEvents::PREPARE_ROW, new MigratePrepareRowEvent($row, $source, $migration));
}