diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php index 2df2e0d..43b6eb6 100644 --- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php +++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php @@ -2,6 +2,7 @@ namespace Drupal\migrate_drupal\Plugin; +use Drupal\migrate\Plugin\MigrationInterface; /** * Provides an interface for all CCK field type plugins. @@ -9,4 +10,18 @@ * @deprecated in Drupal 8.2.x, to be removed before Drupal 9.0.x. Use * \Drupal\migrate_drupal\Annotation\MigrateField instead. */ -interface MigrateCckFieldInterface extends MigrateFieldInterface { } +interface MigrateCckFieldInterface extends MigrateFieldInterface { + + /** + * Apply any custom processing to the cck bundle migrations. + * + * @param \Drupal\migrate\Plugin\MigrationInterface $migration + * The migration entity. + * @param string $field_name + * The field name we're processing the value for. + * @param array $data + * The array of field data from CckFieldValues::fieldData(). + */ + public function processCckFieldValues(MigrationInterface $migration, $field_name, $data); + +} diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php b/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php index 5f91153..14def10 100644 --- a/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php +++ b/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php @@ -2,6 +2,10 @@ namespace Drupal\migrate_drupal\Plugin\migrate; +use Drupal\migrate\Plugin\MigrateDestinationPluginManager; +use Drupal\migrate\Plugin\MigratePluginManager; +use Drupal\migrate\Plugin\MigrationPluginManagerInterface; +use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -18,6 +22,48 @@ class CckMigration extends FieldMigration { const PLUGIN_METHOD = 'cck_plugin_method'; /** + * Already-instantiated cckfield plugins, keyed by ID. + * + * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface[] + */ + protected $cckPluginCache; + + /** + * The cckfield plugin manager. + * + * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface + */ + protected $cckPluginManager; + + /** + * Constructs a CckMigration. + * + * @param array $configuration + * Plugin configuration. + * @param string $plugin_id + * The plugin ID. + * @param mixed $plugin_definition + * The plugin definition. + * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface $cck_manager + * The cckfield plugin manager. + * @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migration_plugin_manager + * The migration plugin manager. + * @param \Drupal\migrate\Plugin\MigratePluginManager $source_plugin_manager + * The source migration plugin manager. + * @param \Drupal\migrate\Plugin\MigratePluginManager $process_plugin_manager + * The process migration plugin manager. + * @param \Drupal\migrate\Plugin\MigrateDestinationPluginManager $destination_plugin_manager + * The destination migration plugin manager. + * @param \Drupal\migrate\Plugin\MigratePluginManager $idmap_plugin_manager + * The ID map migration plugin manager. + * {@inheritdoc} + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrateCckFieldPluginManagerInterface $cck_manager, MigrationPluginManagerInterface $migration_plugin_manager, MigratePluginManager $source_plugin_manager, MigratePluginManager $process_plugin_manager, MigrateDestinationPluginManager $destination_plugin_manager, MigratePluginManager $idmap_plugin_manager) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $cck_manager, $migration_plugin_manager, $source_plugin_manager, $process_plugin_manager, $destination_plugin_manager, $idmap_plugin_manager); + $this->cckPluginManager = $cck_manager; + } + + /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { diff --git a/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php b/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php index 55877a9..f3e7996 100644 --- a/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php +++ b/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php @@ -23,10 +23,6 @@ class MigrateFieldPluginManagerTest extends MigrateDrupalTestBase { public function testPluginSelection() { $plugin_manager = $this->container->get('plugin.manager.migrate.field'); - $configuration = ['core' => 6]; - $plugin_id = $plugin_manager->getPluginIdFromFieldType('filefield', $configuration); - $this->assertInstanceOf(FileField::class, $plugin_manager->createInstance($plugin_id, $configuration)); - try { // If this test passes, getPluginIdFromFieldType will raise a // PluginNotFoundException and we'll never reach fail(). @@ -37,13 +33,8 @@ public function testPluginSelection() { $this->assertIdentical($e->getMessage(), "Plugin ID 'filefield' was not found."); } - $this->assertIdentical('image', $plugin_manager->getPluginIdFromFieldType('image', ['core' => 7])); - $this->assertIdentical('file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 7])); $this->assertIdentical('d6_file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 6])); - $this->assertIdentical('text', $plugin_manager->getPluginIdFromFieldType('text', ['core' => 6])); - $this->assertIdentical('text', $plugin_manager->getPluginIdFromFieldType('text', ['core' => 7])); - // Test fallback when no core version is specified. $this->assertIdentical('d6_no_core_version_specified', $plugin_manager->getPluginIdFromFieldType('d6_no_core_version_specified', ['core' => 6]));