$migration) { // Add the default class where empty. if (empty($migration['class'])) { $migrations[$id]['class'] = 'Drupal\migrate\Plugin\Migration'; } // For derived configuration entity-based migrations, strip the deriver // prefix so we can reference migrations by the IDs they specify (i.e., // the migration that specifies "id: temp" can be referenced as "temp" // rather than "migration_config_deriver:temp"). $prefix = 'migration_config_deriver:'; if (strpos($id, $prefix) === 0) { $new_id = substr($id, strlen($prefix)); $migrations[$new_id] = $migrations[$id]; unset($migrations[$id]); $id = $new_id; } // Integrate shared group configuration into the migration. if (empty($migration['migration_group'])) { $migration['migration_group'] = 'default'; } $group = MigrationGroup::load($migration['migration_group']); if (empty($group)) { // If the specified group does not exist, create it. Provide a little more // for the 'default' group. $group_properties = []; $group_properties['id'] = $migration['migration_group']; if ($migration['migration_group'] == 'default') { $group_properties['label'] = 'Default'; $group_properties['description'] = 'A container for any migrations not explicitly assigned to a group.'; } else { $group_properties['label'] = $group_properties['id']; $group_properties['description'] = ''; } $group = MigrationGroup::create($group_properties); $group->save(); } $shared_configuration = $group->get('shared_configuration'); if (empty($shared_configuration)) { continue; } foreach ($shared_configuration as $key => $group_value) { $migration_value = $migration[$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); $migrations[$id][$key] = $merged_values; } // Where the group provides a value the migration doesn't, use the group // value. elseif (is_null($migration_value)) { $migrations[$id][$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)); }