2020-10-11 23:29:15 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Drupal\farm_migrate\Plugin\migrate\process;
|
|
|
|
|
2023-06-13 18:53:49 +02:00
|
|
|
use Drupal\migrate\MigrateExecutableInterface;
|
2022-09-12 18:12:43 +02:00
|
|
|
use Drupal\migrate\MigrateLookupInterface;
|
|
|
|
use Drupal\migrate\MigrateStubInterface;
|
2020-10-11 23:29:15 +02:00
|
|
|
use Drupal\migrate\Plugin\migrate\process\MigrationLookup;
|
2022-09-12 18:12:43 +02:00
|
|
|
use Drupal\migrate\Plugin\MigrationInterface;
|
|
|
|
use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
|
2020-10-11 23:29:15 +02:00
|
|
|
use Drupal\migrate\Row;
|
2022-09-12 18:12:43 +02:00
|
|
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
2020-10-11 23:29:15 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Looks up the value of a property based on a previous migration group.
|
|
|
|
*
|
|
|
|
* @MigrateProcessPlugin(
|
|
|
|
* id = "farm_migration_group_lookup"
|
|
|
|
* )
|
|
|
|
*
|
|
|
|
* This extends from the core migration_lookup process plugin, loads a list of
|
|
|
|
* all migrations in the specified migration_group, then passes that to the
|
|
|
|
* parent class, along with all other configuration keys.
|
|
|
|
*
|
|
|
|
* Example:
|
|
|
|
*
|
|
|
|
* @code
|
|
|
|
* process:
|
|
|
|
* uid:
|
|
|
|
* plugin: farm_migration_group_lookup
|
|
|
|
* migration_group: users
|
|
|
|
* source: author
|
|
|
|
* @endcode
|
|
|
|
*
|
2020-11-11 18:40:50 +01:00
|
|
|
* @todo Remove if migrate_plus incorporates this plugin upstream.
|
2020-10-11 23:29:15 +02:00
|
|
|
* See: https://gitlab.com/drupalspoons/migrate_plus/-/issues/240
|
|
|
|
*/
|
|
|
|
class FarmMigrationGroupLookup extends MigrationLookup {
|
|
|
|
|
2022-09-12 18:12:43 +02:00
|
|
|
/**
|
|
|
|
* Migration plugin manager service.
|
|
|
|
*
|
|
|
|
* @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface
|
|
|
|
*/
|
|
|
|
protected $migrationPluginManager;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructs a MigrationLookup object.
|
|
|
|
*
|
|
|
|
* @param array $configuration
|
|
|
|
* A configuration array containing information about the plugin instance.
|
|
|
|
* @param string $plugin_id
|
|
|
|
* The plugin_id for the plugin instance.
|
|
|
|
* @param mixed $plugin_definition
|
|
|
|
* The plugin implementation definition.
|
|
|
|
* @param \Drupal\migrate\Plugin\MigrationInterface $migration
|
|
|
|
* The Migration the plugin is being used in.
|
|
|
|
* @param \Drupal\migrate\MigrateLookupInterface $migrate_lookup
|
|
|
|
* The migrate lookup service.
|
|
|
|
* @param \Drupal\migrate\MigrateStubInterface $migrate_stub
|
|
|
|
* The migrate stub service.
|
|
|
|
* @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migation_plugin_manager
|
|
|
|
* Migration plugin manager service.
|
|
|
|
*/
|
|
|
|
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrateLookupInterface $migrate_lookup, MigrateStubInterface $migrate_stub, MigrationPluginManagerInterface $migation_plugin_manager) {
|
|
|
|
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $migrate_lookup, $migrate_stub);
|
|
|
|
$this->migrationPluginManager = $migation_plugin_manager;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritdoc}
|
|
|
|
*/
|
|
|
|
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
|
|
|
|
return new static(
|
|
|
|
$configuration,
|
|
|
|
$plugin_id,
|
|
|
|
$plugin_definition,
|
|
|
|
$migration,
|
|
|
|
$container->get('migrate.lookup'),
|
|
|
|
$container->get('migrate.stub'),
|
|
|
|
$container->get('plugin.manager.migration'),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2020-10-11 23:29:15 +02:00
|
|
|
/**
|
|
|
|
* {@inheritdoc}
|
|
|
|
*/
|
|
|
|
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
|
|
|
|
|
|
|
// Get the migration group ID from the process configuration.
|
|
|
|
$lookup_migration_group_id = $this->configuration['migration_group'];
|
|
|
|
|
|
|
|
// Load all migrations.
|
2022-09-12 18:12:43 +02:00
|
|
|
$migrations = $this->migrationPluginManager->createInstances([]);
|
2020-10-11 23:29:15 +02:00
|
|
|
|
|
|
|
// Filter by group.
|
|
|
|
$group_migrations = [];
|
|
|
|
foreach ($migrations as $id => $migration) {
|
|
|
|
$definition = $migration->getPluginDefinition();
|
|
|
|
if ($definition['migration_group'] == $lookup_migration_group_id) {
|
|
|
|
$group_migrations[] = $id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set the migration configuration and delegate processing to the parent
|
|
|
|
// MigrationLookup::transform() method.
|
|
|
|
$this->configuration['migration'] = $group_migrations;
|
|
|
|
return parent::transform($value, $migrate_executable, $row, $destination_property);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|