diff --git a/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldTest.php b/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldTest.php index 01d16807c6..4549aebe69 100644 --- a/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldTest.php +++ b/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldTest.php @@ -114,6 +114,16 @@ public function testFields() { $this->assertSame('entity_reference', $field_storage->getType()); $this->assertSame('user', $field_storage->getSetting('target_type')); + // Node reference to entity reference migration. + $field_storage = FieldStorageConfig::load('node.field_node_reference'); + $this->assertIdentical('entity_reference', $field_storage->getType()); + $this->assertIdentical('node', $field_storage->getSetting('target_type')); + + // User reference to entity reference migration. + $field_storage = FieldStorageConfig::load('node.field_user_reference'); + $this->assertIdentical('entity_reference', $field_storage->getType()); + $this->assertIdentical('user', $field_storage->getSetting('target_type')); + // Validate that the source count and processed count match up. /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */ $migration = $this->getMigration('d6_field'); diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php deleted file mode 100644 index de8c4f5095..0000000000 --- a/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php +++ /dev/null @@ -1,37 +0,0 @@ - 'sub_process', - 'source' => $field_name, - 'process' => [ - 'target_id' => [ - 'plugin' => 'get', - 'source' => 'nid', - ], - ], - ]; - $migration->setProcessOfProperty($field_name, $process); - } - -} diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/ReferenceBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/ReferenceBase.php new file mode 100644 index 0000000000..96d5325991 --- /dev/null +++ b/core/modules/migrate_drupal/src/Plugin/migrate/field/ReferenceBase.php @@ -0,0 +1,66 @@ +getMigrationDependencies(); + array_push($migration_dependencies['required'], $this->getEntityTypeMigrationId()); + $migration_dependencies['required'] = array_unique($migration_dependencies['required']); + $migration->set('migration_dependencies', $migration_dependencies); + } + + /** + * {@inheritdoc} + */ + public function defineValueProcessPipeline(MigrationInterface $migration, $field_name, $data) { + $process = [ + 'plugin' => 'sub_process', + 'source' => $field_name, + 'process' => ['target_id' => $this->entityId()], + ]; + $migration->setProcessOfProperty($field_name, $process); + } + + /** + * {@inheritdoc} + */ + public function getFieldWidgetMap() { + return [ + $this->pluginId . '_select' => 'options_select', + $this->pluginId . '_buttons' => 'options_buttons', + $this->pluginId . '_autocomplete' => 'entity_reference_autocomplete_tags', + ]; + } + +} diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/d6/NodeReference.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/d6/NodeReference.php new file mode 100644 index 0000000000..b133165749 --- /dev/null +++ b/core/modules/migrate_drupal/src/Plugin/migrate/field/d6/NodeReference.php @@ -0,0 +1,45 @@ +nodeTypeMigration; + } + + /** + * {@inheritdoc} + */ + protected function entityId() { + return 'nid'; + } + +} diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/d6/UserReference.php similarity index 55% rename from core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php rename to core/modules/migrate_drupal/src/Plugin/migrate/field/d6/UserReference.php index 4a60f450de..b389f8b0b1 100644 --- a/core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php +++ b/core/modules/migrate_drupal/src/Plugin/migrate/field/d6/UserReference.php @@ -1,10 +1,13 @@ userTypeMigration; + } + + /** + * {@inheritdoc} + */ + protected function entityId() { + return 'uid'; + } /** * {@inheritdoc} diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php index a6e4ab7610..b871338654 100644 --- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php +++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php @@ -2337,6 +2337,89 @@ 'delta' => '1', )) ->execute(); +$connection->schema()->createTable('content_field_node_reference', array( + 'fields' => array( + 'vid' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'nid' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'delta' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'field_node_reference_nid' => array( + 'type' => 'int', + 'not null' => FALSE, + 'size' => 'normal', + 'unsigned' => TRUE, + ), + ), + 'primary key' => array( + 'vid', + 'delta', + ), + 'indexes' => array( + 'nid' => array( + 'nid', + ), + 'field_node_reference_nid' => array( + 'field_node_reference_nid', + ), + ), + 'mysql_character_set' => 'utf8', +)); + +$connection->insert('content_field_node_reference') +->fields(array( + 'vid', + 'nid', + 'delta', + 'field_node_reference_nid', +)) +->values(array( + 'vid' => '1', + 'nid' => '1', + 'delta' => '0', + 'field_node_reference_nid' => NULL, +)) +->values(array( + 'vid' => '2', + 'nid' => '1', + 'delta' => '0', + 'field_node_reference_nid' => NULL, +)) +->values(array( + 'vid' => '3', + 'nid' => '2', + 'delta' => '0', + 'field_node_reference_nid' => '1', +)) +->values(array( + 'vid' => '5', + 'nid' => '2', + 'delta' => '0', + 'field_node_reference_nid' => NULL, +)) +->values(array( + 'vid' => '12', + 'nid' => '9', + 'delta' => '0', + 'field_node_reference_nid' => '2', +)) +->execute(); $connection->schema()->createTable('content_field_test', array( 'fields' => array( 'vid' => array( @@ -2564,6 +2647,89 @@ 'field_test_two_value' => '20', )) ->execute(); +$connection->schema()->createTable('content_field_user_reference', array( + 'fields' => array( + 'vid' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'nid' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'delta' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'field_user_reference_uid' => array( + 'type' => 'int', + 'not null' => FALSE, + 'size' => 'normal', + 'unsigned' => TRUE, + ), + ), + 'primary key' => array( + 'vid', + 'delta', + ), + 'indexes' => array( + 'nid' => array( + 'nid', + ), + 'field_user_reference_uid' => array( + 'field_user_reference_uid', + ), + ), + 'mysql_character_set' => 'utf8', +)); + +$connection->insert('content_field_user_reference') +->fields(array( + 'vid', + 'nid', + 'delta', + 'field_user_reference_uid', +)) +->values(array( + 'vid' => '1', + 'nid' => '1', + 'delta' => '0', + 'field_user_reference_uid' => NULL, +)) +->values(array( + 'vid' => '2', + 'nid' => '1', + 'delta' => '0', + 'field_user_reference_uid' => NULL, +)) +->values(array( + 'vid' => '3', + 'nid' => '2', + 'delta' => '0', + 'field_user_reference_uid' => NULL, +)) +->values(array( + 'vid' => '5', + 'nid' => '2', + 'delta' => '0', + 'field_user_reference_uid' => NULL, +)) +->values(array( + 'vid' => '12', + 'nid' => '9', + 'delta' => '0', + 'field_user_reference_uid' => NULL, +)) +->execute(); $connection->schema()->createTable('content_group', array( 'fields' => array( 'group_type' => array( @@ -2778,6 +2944,30 @@ 'active' => '1', 'locked' => '0', )) +->values(array( + 'field_name' => 'field_node_reference', + 'type' => 'nodereference', + 'global_settings' => 'a:1:{s:19:"referenceable_types";a:9:{s:7:"article";i:0;s:7:"company";i:0;s:8:"employee";i:0;s:10:"test_event";i:0;s:9:"test_page";i:0;s:11:"test_planet";i:0;s:10:"test_story";i:0;s:7:"sponsor";i:0;s:5:"story";i:0;}}', + 'required' => '0', + 'multiple' => '1', + 'db_storage' => '0', + 'module' => 'nodereference', + 'db_columns' => 'a:1:{s:3:"nid";a:4:{s:4:"type";s:3:"int";s:8:"unsigned";b:1;s:8:"not null";b:0;s:5:"index";b:1;}}', + 'active' => '1', + 'locked' => '0', +)) +->values(array( + 'field_name' => 'field_node_reference_2', + 'type' => 'nodereference', + 'global_settings' => 'a:1:{s:19:"referenceable_types";a:9:{s:7:"article";s:7:"article";s:7:"company";i:0;s:8:"employee";i:0;s:10:"test_event";i:0;s:9:"test_page";i:0;s:11:"test_planet";i:0;s:10:"test_story";i:0;s:7:"sponsor";i:0;s:5:"story";i:0;}}', + 'required' => '0', + 'multiple' => '0', + 'db_storage' => '1', + 'module' => 'nodereference', + 'db_columns' => 'a:1:{s:3:"nid";a:4:{s:4:"type";s:3:"int";s:8:"unsigned";b:1;s:8:"not null";b:0;s:5:"index";b:1;}}', + 'active' => '1', + 'locked' => '0', +)) ->values(array( 'field_name' => 'field_reference', 'type' => 'nodereference', @@ -3066,6 +3256,30 @@ 'active' => '1', 'locked' => '0', )) +->values(array( + 'field_name' => 'field_user_reference', + 'type' => 'userreference', + 'global_settings' => 'a:2:{s:19:"referenceable_roles";a:4:{i:2;i:0;i:3;i:0;i:4;i:0;i:5;i:0;}s:20:"referenceable_status";s:0:"";}', + 'required' => '0', + 'multiple' => '1', + 'db_storage' => '0', + 'module' => 'userreference', + 'db_columns' => 'a:1:{s:3:"uid";a:4:{s:4:"type";s:3:"int";s:8:"unsigned";b:1;s:8:"not null";b:0;s:5:"index";b:1;}}', + 'active' => '1', + 'locked' => '0', +)) +->values(array( + 'field_name' => 'field_user_reference_2', + 'type' => 'userreference', + 'global_settings' => 'a:2:{s:19:"referenceable_roles";a:4:{i:3;i:3;i:2;i:0;i:4;i:0;i:5;i:0;}s:20:"referenceable_status";s:1:"1";}', + 'required' => '0', + 'multiple' => '0', + 'db_storage' => '1', + 'module' => 'userreference', + 'db_columns' => 'a:1:{s:3:"uid";a:4:{s:4:"type";s:3:"int";s:8:"unsigned";b:1;s:8:"not null";b:0;s:5:"index";b:1;}}', + 'active' => '1', + 'locked' => '0', +)) ->execute(); $connection->schema()->createTable('content_node_field_instance', array( 'fields' => array( @@ -3207,6 +3421,30 @@ 'widget_module' => 'number', 'widget_active' => '1', )) +->values(array( + 'field_name' => 'field_node_reference', + 'type_name' => 'story', + 'weight' => '21', + 'label' => 'Node reference', + 'widget_type' => 'nodereference_autocomplete', + 'widget_settings' => 'a:4:{s:18:"autocomplete_match";s:8:"contains";s:4:"size";s:2:"60";s:13:"default_value";a:1:{i:0;a:2:{s:3:"nid";N;s:14:"_error_element";s:55:"default_value_widget][field_node_reference][0][nid][nid";}}s:17:"default_value_php";N;}', + 'display_settings' => 'a:5:{s:5:"label";a:2:{s:6:"format";s:5:"above";s:7:"exclude";i:0;}i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}', + 'description' => '', + 'widget_module' => 'nodereference', + 'widget_active' => '1', +)) +->values(array( + 'field_name' => 'field_node_reference_2', + 'type_name' => 'story', + 'weight' => '23', + 'label' => 'Node reference 2', + 'widget_type' => 'nodereference_select', + 'widget_settings' => 'a:4:{s:18:"autocomplete_match";s:8:"contains";s:4:"size";i:60;s:13:"default_value";a:1:{i:0;a:1:{s:3:"nid";s:0:"";}}s:17:"default_value_php";N;}', + 'display_settings' => 'a:5:{s:5:"label";a:2:{s:6:"format";s:5:"above";s:7:"exclude";i:0;}i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}', + 'description' => '', + 'widget_module' => 'nodereference', + 'widget_active' => '1', +)) ->values(array( 'field_name' => 'field_reference', 'type_name' => 'page', @@ -3519,6 +3757,30 @@ 'widget_module' => 'number', 'widget_active' => '1', )) +->values(array( + 'field_name' => 'field_user_reference', + 'type_name' => 'story', + 'weight' => '20', + 'label' => 'User reference', + 'widget_type' => 'userreference_autocomplete', + 'widget_settings' => 'a:5:{s:18:"autocomplete_match";s:8:"contains";s:4:"size";s:2:"60";s:12:"reverse_link";i:0;s:13:"default_value";a:1:{i:0;a:2:{s:3:"uid";N;s:14:"_error_element";s:55:"default_value_widget][field_user_reference][0][uid][uid";}}s:17:"default_value_php";N;}', + 'display_settings' => 'a:5:{s:5:"label";a:2:{s:6:"format";s:5:"above";s:7:"exclude";i:0;}i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}', + 'description' => '', + 'widget_module' => 'userreference', + 'widget_active' => '1', +)) +->values(array( + 'field_name' => 'field_user_reference_2', + 'type_name' => 'story', + 'weight' => '21', + 'label' => 'User reference 2', + 'widget_type' => 'userreference_select', + 'widget_settings' => 'a:5:{s:18:"autocomplete_match";s:8:"contains";s:4:"size";i:60;s:12:"reverse_link";i:0;s:13:"default_value";a:1:{i:0;a:1:{s:3:"uid";s:0:"";}}s:17:"default_value_php";N;}', + 'display_settings' => 'a:5:{s:5:"label";a:2:{s:6:"format";s:5:"above";s:7:"exclude";i:0;}i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}', + 'description' => '', + 'widget_module' => 'userreference', + 'widget_active' => '1', +)) ->execute(); $connection->schema()->createTable('content_type_employee', array( 'fields' => array( @@ -3862,6 +4124,18 @@ 'not null' => FALSE, 'size' => 'big', ), + 'field_user_reference_2_uid' => array( + 'type' => 'int', + 'not null' => FALSE, + 'size' => 'normal', + 'unsigned' => TRUE, + ), + 'field_node_reference_2_nid' => array( + 'type' => 'int', + 'not null' => FALSE, + 'size' => 'normal', + 'unsigned' => TRUE, + ), ), 'primary key' => array( 'vid', @@ -3870,6 +4144,12 @@ 'nid' => array( 'nid', ), + 'field_user_reference_2_uid' => array( + 'field_user_reference_2_uid', + ), + 'field_node_reference_2_nid' => array( + 'field_node_reference_2_nid', + ), ), 'mysql_character_set' => 'utf8', )); @@ -3906,6 +4186,8 @@ 'field_test_datestamp_value2', 'field_test_datetime_value2', 'field_test_string_selectlist_value', + 'field_user_reference_2_uid', + 'field_node_reference_2_nid', )) ->values(array( 'nid' => '1', @@ -3938,6 +4220,8 @@ 'field_test_datestamp_value2' => NULL, 'field_test_datetime_value2' => NULL, 'field_test_string_selectlist_value' => NULL, + 'field_user_reference_2_uid' => NULL, + 'field_node_reference_2_nid' => NULL, )) ->values(array( 'nid' => '1', @@ -3970,6 +4254,8 @@ 'field_test_datestamp_value2' => NULL, 'field_test_datetime_value2' => NULL, 'field_test_string_selectlist_value' => NULL, + 'field_user_reference_2_uid' => NULL, + 'field_node_reference_2_nid' => NULL, )) ->values(array( 'nid' => '2', @@ -4002,6 +4288,8 @@ 'field_test_datestamp_value2' => NULL, 'field_test_datetime_value2' => NULL, 'field_test_string_selectlist_value' => NULL, + 'field_user_reference_2_uid' => NULL, + 'field_node_reference_2_nid' => NULL, )) ->values(array( 'nid' => '2', @@ -4034,6 +4322,8 @@ 'field_test_datestamp_value2' => NULL, 'field_test_datetime_value2' => NULL, 'field_test_string_selectlist_value' => NULL, + 'field_user_reference_2_uid' => NULL, + 'field_node_reference_2_nid' => NULL, )) ->values(array( 'nid' => '9', @@ -4066,6 +4356,8 @@ 'field_test_datestamp_value2' => '1391357160', 'field_test_datetime_value2' => '2015-03-04 06:07:00', 'field_test_string_selectlist_value' => NULL, + 'field_user_reference_2_uid' => NULL, + 'field_node_reference_2_nid' => NULL, )) ->execute(); $connection->schema()->createTable('content_type_test_page', array( diff --git a/core/modules/migrate_drupal/tests/src/Kernel/d6/FieldDiscoveryTest.php b/core/modules/migrate_drupal/tests/src/Kernel/d6/FieldDiscoveryTest.php index 83ae30e908..412646ed77 100644 --- a/core/modules/migrate_drupal/tests/src/Kernel/d6/FieldDiscoveryTest.php +++ b/core/modules/migrate_drupal/tests/src/Kernel/d6/FieldDiscoveryTest.php @@ -187,8 +187,12 @@ public function addAllFieldProcessesAltersData() { 'options/type' => [ 'type' => [ 'map' => [ - 'userreference' => 'userreference_default', - 'nodereference' => 'nodereference_default', + 'userreference_select' => 'options_select', + 'userreference_buttons' => 'options_buttons', + 'userreference_autocomplete' => 'entity_reference_autocomplete_tags', + 'nodereference_select' => 'options_select', + 'nodereference_buttons' => 'options_buttons', + 'nodereference_autocomplete' => 'entity_reference_autocomplete_tags', 'email_textfield' => 'email_default', 'text_textfield' => 'text_textfield', 'date' => 'datetime_default', @@ -269,9 +273,11 @@ public function testAddFields() { public function testGetAllFields() { $field_discovery_test = new FieldDiscoveryTestClass($this->fieldPluginManager, $this->migrationPluginManager, $this->logger); $actual_fields = $field_discovery_test->getAllFields('6'); + $actual_node_types = array_keys($actual_fields['node']); + sort($actual_node_types); $this->assertSame(['node'], array_keys($actual_fields)); - $this->assertSame(['employee', 'test_planet', 'page', 'story', 'test_page'], array_keys($actual_fields['node'])); - $this->assertSame(21, count($actual_fields['node']['story'])); + $this->assertSame(['employee', 'page', 'story', 'test_page', 'test_planet'], $actual_node_types); + $this->assertSame(25, count($actual_fields['node']['story'])); foreach ($actual_fields['node'] as $bundle => $fields) { foreach ($fields as $field_name => $field_info) { $this->assertArrayHasKey('type', $field_info); diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php index 7d8822d5d1..1aa6f6ab68 100644 --- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php +++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php @@ -85,8 +85,8 @@ protected function getEntityCounts() { 'contact_message' => 0, 'configurable_language' => 5, 'editor' => 2, - 'field_config' => 95, - 'field_storage_config' => 66, + 'field_config' => 99, + 'field_storage_config' => 70, 'file' => 7, 'filter_format' => 7, 'image_style' => 5,