diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php index 069d20d..80b283f 100644 --- a/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php +++ b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php @@ -7,7 +7,10 @@ namespace Drupal\Core\Field\Plugin\migrate\cckfield; -use Drupal\Core\Session\AccountInterface; +use Drupal\migrate\Entity\Migration; +use Drupal\migrate\Entity\MigrationInterface; +use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Row; use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase; @@ -52,6 +55,17 @@ public function transformFieldStorageSettings(Row $row) { /** * {@inheritdoc} */ + public function processFieldInstance(MigrationInterface $migration) { + parent::processFieldInstance($migration); + + $migration_dependencies = $migration->get('migration_dependencies'); + $migration_dependencies['required'][] = 'd6_user_role'; + $migration->set('migration_dependencies', $migration_dependencies); + } + + /** + * {@inheritdoc} + */ public function transformFieldInstanceSettings(Row $row) { $source_settings = $row->getSourceProperty('global_settings'); $settings['handler'] = 'default:user'; @@ -63,11 +77,41 @@ public function transformFieldInstanceSettings(Row $row) { $roles = array_filter($source_settings['referenceable_roles']); if (!empty($roles)) { $settings['handler_settings']['filter']['type'] = 'role'; - $settings['handler_settings']['filter']['role'] = $roles; + $settings['handler_settings']['filter']['role'] = $this->migrateUserRoles($roles); } - return $settings; } + /** + * Look up migrated role IDs from the d6_user_role migration. + * + * @param $source_roles + * The source role IDs. + * + * @return array + * The migrated role IDs. + */ + protected function migrateUserRoles($source_roles) { + // Configure the migration process plugin to look up migrated IDs from + // the d6_user_role migration. + $migration_plugin_configuration = [ + 'source' => ['id'], + 'migration' => 'd6_user_role', + ]; + + $migration = Migration::create(); + $executable = new MigrateExecutable($migration, new MigrateMessage()); + $row = new Row([], []); + + $migrationPlugin = \Drupal::service('plugin.manager.migrate.process') + ->createInstance('migration', $migration_plugin_configuration, $migration); + + $roles = []; + foreach ($source_roles as $role) { + $roles[] = $migrationPlugin->transform($role, $executable, $row, NULL); + } + return array_combine($roles, $roles); + } + } diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php index 8ccc3ad..f4b5bef 100644 --- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php +++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php @@ -81,56 +81,8 @@ public function transform($value, MigrateExecutableInterface $migrate_executable $settings['prefix'] = $field_settings['prefix']; $settings['suffix'] = $field_settings['suffix']; break; - - case 'link': - // $settings['url'] = $widget_settings['default_value'][0]['url']; - // D6 has optional, required, value and none. D8 only has disabled (0) - // optional (1) and required (2). - $map = array('disabled' => 0, 'optional' => 1, 'required' => 2); - $settings['title'] = $map[$field_settings['title']]; - break; - - case 'filefield_widget': - $settings['file_extensions'] = $widget_settings['file_extensions']; - $settings['file_directory'] = $widget_settings['file_path']; - $settings['description_field'] = $field_settings['description_field']; - $settings['max_filesize'] = $this->convertSizeUnit($widget_settings['max_filesize_per_file']); - break; - - case 'imagefield_widget': - $settings['file_extensions'] = $widget_settings['file_extensions']; - $settings['file_directory'] = 'public://'; - $settings['max_filesize'] = $this->convertSizeUnit($widget_settings['max_filesize_per_file']); - $settings['alt_field'] = $widget_settings['alt']; - $settings['alt_field_required'] = $widget_settings['custom_alt']; - $settings['title_field'] = $widget_settings['title']; - $settings['title_field_required'] = $widget_settings['custom_title']; - $settings['max_resolution'] = $widget_settings['max_resolution']; - $settings['min_resolution'] = $widget_settings['min_resolution']; - break; - } return $settings; } - /** - * Convert file size strings into their D8 format. - * - * D6 stores file size using a "K" for kilobytes and "M" for megabytes where - * as D8 uses "KB" and "MB" respectively. - * - * @param string $size_string - * The size string, eg 10M - * - * @return string - * The D8 version of the size string. - */ - protected function convertSizeUnit($size_string) { - $size_unit = substr($size_string, strlen($size_string) - 1); - if ($size_unit == "M" || $size_unit == "K") { - return $size_string . "B"; - } - return $size_string; - } - } diff --git a/core/modules/file/src/Plugin/migrate/cckfield/FileField.php b/core/modules/file/src/Plugin/migrate/cckfield/FileField.php index 022f01e..659f215 100644 --- a/core/modules/file/src/Plugin/migrate/cckfield/FileField.php +++ b/core/modules/file/src/Plugin/migrate/cckfield/FileField.php @@ -59,4 +59,64 @@ public function getFieldType(Row $row) { return $row->getSourceProperty('widget_type') == 'imagefield_widget' ? 'image' : 'file'; } + /** + * {@inheritdoc} + */ + public function transformFieldStorageSettings(Row $row) { + return parent::transformFieldStorageSettings($row); // TODO: Change the autogenerated stub + } + + /** + * {@inheritdoc} + */ + public function transformFieldInstanceSettings(Row $row) { + $widget_type = $row->getSourceProperty('widget_type'); + $widget_settings = $row->getSourceProperty('widget_settings'); + $field_settings = $row->getSourceProperty('global_settings'); + $settings = []; + + switch ($widget_type) { + case 'filefield_widget': + $settings['file_extensions'] = $widget_settings['file_extensions']; + $settings['file_directory'] = $widget_settings['file_path']; + $settings['description_field'] = $field_settings['description_field']; + $settings['max_filesize'] = $this->convertSizeUnit($widget_settings['max_filesize_per_file']); + break; + + case 'imagefield_widget': + $settings['file_extensions'] = $widget_settings['file_extensions']; + $settings['file_directory'] = 'public://'; + $settings['max_filesize'] = $this->convertSizeUnit($widget_settings['max_filesize_per_file']); + $settings['alt_field'] = $widget_settings['alt']; + $settings['alt_field_required'] = $widget_settings['custom_alt']; + $settings['title_field'] = $widget_settings['title']; + $settings['title_field_required'] = $widget_settings['custom_title']; + $settings['max_resolution'] = $widget_settings['max_resolution']; + $settings['min_resolution'] = $widget_settings['min_resolution']; + break; + } + + return $settings; + } + + /** + * Convert file size strings into their D8 format. + * + * D6 stores file size using a "K" for kilobytes and "M" for megabytes where + * as D8 uses "KB" and "MB" respectively. + * + * @param string $size_string + * The size string, eg 10M + * + * @return string + * The D8 version of the size string. + */ + protected function convertSizeUnit($size_string) { + $size_unit = substr($size_string, strlen($size_string) - 1); + if ($size_unit == "M" || $size_unit == "K") { + return $size_string . "B"; + } + return $size_string; + } + } diff --git a/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php b/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php index 327cbda..cd9761b 100644 --- a/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php +++ b/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php @@ -8,6 +8,7 @@ namespace Drupal\link\Plugin\migrate\cckfield; use Drupal\migrate\Entity\MigrationInterface; +use Drupal\migrate\Row; use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase; /** @@ -46,4 +47,24 @@ public function processCckFieldValues(MigrationInterface $migration, $field_name $migration->mergeProcessOfProperty($field_name, $process); } + /** + * {@inheritdoc} + */ + public function transformFieldStorageSettings(Row $row) { + return parent::transformFieldStorageSettings($row); // TODO: Change the autogenerated stub + } + + /** + * {@inheritdoc} + */ + public function transformFieldInstanceSettings(Row $row) { + $field_settings = $row->getSourceProperty('global_settings'); + // $settings['url'] = $widget_settings['default_value'][0]['url']; + // D6 has optional, required, value and none. D8 only has disabled (0) + // optional (1) and required (2). + $map = array('disabled' => 0, 'optional' => 1, 'required' => 2); + $settings['title'] = $map[$field_settings['title']]; + return $settings; + } + } diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php index 1d8f5f4..602f63b 100644 --- a/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php +++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php @@ -90,6 +90,8 @@ protected function migrateFields() { 'd6_field_formatter_settings', 'd6_upload_field', 'd6_upload_field_instance', + 'd6_user_role', + 'd6_filter_format' ]); }