diff -u b/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php --- b/core/modules/migrate/src/Plugin/MigrationPluginManager.php +++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php @@ -3,25 +3,28 @@ namespace Drupal\migrate\Plugin; use Drupal\Component\Graph\Graph; +use Drupal\Component\Plugin\CategorizingPluginManagerInterface; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Language\LanguageManagerInterface; +use Drupal\Core\Plugin\CategorizingPluginManagerTrait; use Drupal\Core\Plugin\DefaultPluginManager; use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator; use Drupal\Core\Plugin\Discovery\YamlDirectoryDiscovery; use Drupal\Core\Plugin\Factory\ContainerFactory; use Drupal\migrate\MigrateBuildDependencyInterface; use Drupal\migrate\Plugin\Discovery\ProviderFilterDecorator; -use Drupal\migrate\Plugin\migrate\destination\ComponentEntityDisplayBase; -use Drupal\migrate\Plugin\migrate\destination\Config; -use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase; -use Drupal\user\Plugin\migrate\destination\UserData; /** * Plugin manager for migration plugins. */ -class MigrationPluginManager extends DefaultPluginManager implements MigrationPluginManagerInterface, MigrateBuildDependencyInterface { +class MigrationPluginManager extends DefaultPluginManager implements MigrationPluginManagerInterface, MigrateBuildDependencyInterface, CategorizingPluginManagerInterface { + + use CategorizingPluginManagerTrait { + getSortedDefinitions as traitGetSortedDefinitions; + getGroupedDefinitions as traitGetGroupedDefinitions; + } /** * Provides default values for migrations. @@ -66,40 +69,6 @@ /** * {@inheritdoc} */ - public function processDefinition(&$definition, $plugin_id) { - parent::processDefinition($definition, $plugin_id); - - // Loop over each of the definitions and tag it as config or content. - /** @var \Drupal\migrate\Plugin\MigratePluginManagerInterface $migrate_plugin_manager */ - $migrate_plugin_manager = \Drupal::getContainer()->get('plugin.manager.migrate.destination'); - $destination = $migrate_plugin_manager->getDefinition($definition['destination']['plugin'], FALSE); - if (!empty($destination['class'])) { - $definition += [ - 'migration_tags' => [], - ]; - $configuration_classes = [ - EntityConfigBase::class, - Config::class, - UserData::class, - ComponentEntityDisplayBase::class, - ]; - if ($this->classInArray($destination['class'], $configuration_classes) - && !in_array('Content', $definition['migration_tags']) - && !in_array('Configuration', $definition['migration_tags']) - ) { - $definition['migration_tags'][] = 'Configuration'; - } - // Default to content. - elseif (!in_array('Content', $definition['migration_tags']) - && !in_array('Configuration', $definition['migration_tags'])) { - $definition['migration_tags'][] = 'Content'; - } - } - } - - /** - * {@inheritdoc} - */ protected function getDiscovery() { if (!isset($this->discovery)) { $directories = array_map(function($directory) { @@ -297,23 +266,47 @@ } /** - * Determine if a class is in list of class names. - * - * @param $plugin_class - * Class name of plugin. - * @param array $classes + * {@inheritdoc} + */ + public function getCategories() { + // Fetch all categories from definitions and remove duplicates. + $categories = array_unique(array_values(array_map(function ($definition) { + return $this->createStubMigration($definition)->getPluginDefinition()['category']; + }, $this->getDefinitions()))); + natcasesort($categories); + return $categories; + } + + /** + * {@inheritdoc} + */ + public function getSortedDefinitions(array $definitions = NULL) { + // Sort the plugins first by category, then by label. + return $this->traitGetSortedDefinitions($this->getPluginDefinitions()); + } + + /** + * {@inheritdoc} + */ + public function getGroupedDefinitions(array $definitions = NULL) { + return $this->traitGetGroupedDefinitions($this->getPluginDefinitions()); + } + + /** + * Gets the definitions of the plugin implementations. * - * @return bool - * TRUE if it is a class in the list or else FALSE. + * @return array + * The plugin definition, as returned by the createStubMigration in the + * plugin manager. */ - protected function classInArray($plugin_class, array $classes) { - foreach ($classes as $class) { - if (is_a($plugin_class, $class, TRUE)) { - return TRUE; - } + protected function getPluginDefinitions() { + $definitions = []; + foreach ($this->getDefinitions() as $definition) { + $stubDefinition = $this->createStubMigration($definition)->getPluginDefinition(); + $definitions[$stubDefinition['id']] = $stubDefinition; } - return FALSE; + return $definitions; } } reverted: --- b/core/modules/migrate/tests/modules/migrate_tagging_test/migrate_tagging_test.info.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: 'Migrate tagging test' -type: module -package: Testing -version: VERSION -core: 8.x reverted: --- b/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/configuration_url_alias.yml +++ /dev/null @@ -1,22 +0,0 @@ -id: configuration_url_alias -label: Configuration URL aliases -migration_tags: - - Configuration -source: - plugin: d7_url_alias - constants: - slash: '/' -process: - source: - plugin: concat - source: - - constants/slash - - source - alias: - plugin: concat - source: - - constants/slash - - alias - langcode: language -destination: - plugin: url_alias reverted: --- b/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/content_date_formats.yml +++ /dev/null @@ -1,21 +0,0 @@ -id: content_date_formats -label: Configuration date format configuration -migration_tags: - - Content -source: - plugin: variable_multirow - variables: - - date_format_long - - date_format_medium - - date_format_short -process: - id: - plugin: static_map - source: name - map: - date_format_long: long - date_format_short: short - date_format_medium: medium - pattern: value -destination: - plugin: entity:date_format reverted: --- b/core/modules/migrate/tests/src/Kernel/Plugin/DestinationCategoryTest.php +++ /dev/null @@ -1,230 +0,0 @@ -installConfig($this->modules); - } - - /** - * Tests tagging migrations as configuration or content. - */ - public function testTaggedConfigurationContentAlter() { - /** @var \Drupal\migrate\Plugin\MigrationPluginManager $migrationManager */ - $migrationManager = \Drupal::service('plugin.manager.migration'); - $tags = ['Configuration', 'Content']; - $migrations['Configuration'] = [ - 'configuration_url_alias', - 'action_settings', - 'block_content_body_field', - 'block_content_type', - 'contact_category', - 'd6_action', - 'd6_aggregator_settings', - 'd6_block', - 'd6_book_settings', - 'd6_comment_entity_display', - 'd6_comment_entity_form_display', - 'd6_comment_entity_form_display_subject', - 'd6_comment_field', - 'd6_comment_field_instance', - 'd6_comment_type', - 'd6_contact_settings', - 'd6_date_formats', - 'd6_dblog_settings', - 'd6_field', - 'd6_field_formatter_settings', - 'd6_field_instance', - 'd6_field_instance_widget_settings', - 'd6_filter_format', - 'd6_forum_settings', - 'd6_i18n_system_maintenance', - 'd6_i18n_system_site', - 'd6_i18n_user_mail', - 'd6_i18n_user_settings', - 'd6_imagecache_presets', - 'd6_language_content_settings', - 'd6_menu', - 'd6_node_setting_promote', - 'd6_node_setting_status', - 'd6_node_setting_sticky', - 'd6_node_settings', - 'd6_node_type', - 'd6_search_settings', - 'd6_syslog_settings', - 'd6_system_cron', - 'd6_system_date', - 'd6_system_file', - 'd6_system_performance', - 'd6_taxonomy_vocabulary', - 'd6_upload_entity_display', - 'd6_upload_entity_form_display', - 'd6_upload_field', - 'd6_upload_field_instance', - 'd6_user_contact_settings', - 'd6_user_mail', - 'd6_user_role', - 'd6_user_settings', - 'd6_view_modes', - 'd6_vocabulary_entity_display', - 'd6_vocabulary_entity_form_display', - 'd6_vocabulary_field', - 'd6_vocabulary_field_instance', - 'd7_action', - 'd7_aggregator_settings', - 'd7_block', - 'd7_comment_entity_display', - 'd7_comment_entity_form_display', - 'd7_comment_entity_form_display_subject', - 'd7_comment_field', - 'd7_comment_field_instance', - 'd7_comment_type', - 'd7_contact_settings', - 'd7_dblog_settings', - 'd7_field', - 'd7_field_formatter_settings', - 'd7_field_instance', - 'd7_field_instance_widget_settings', - 'd7_filter_format', - 'd7_forum_settings', - 'd7_image_settings', - 'd7_image_styles', - 'd7_language_content_settings', - 'd7_language_negotiation_settings', - 'd7_menu', - 'd7_node_settings', - 'd7_node_title_label', - 'd7_node_type', - 'd7_search_settings', - 'd7_shortcut_set', - 'd7_syslog_settings', - 'd7_system_authorize', - 'd7_system_cron', - 'd7_system_date', - 'd7_system_file', - 'd7_system_mail', - 'd7_system_performance', - 'd7_taxonomy_vocabulary', - 'd7_tracker_settings', - 'd7_user_flood', - 'd7_user_mail', - 'd7_user_role', - 'd7_view_modes', - 'default_language', - 'file_settings', - 'language', - 'locale_settings', - 'menu_settings', - 'search_page', - 'statistics_settings', - 'system_image', - 'system_image_gd', - 'system_logging', - 'system_maintenance', - 'system_rss', - 'system_site', - 'taxonomy_settings', - 'text_settings', - 'user_picture_entity_display', - 'user_picture_entity_form_display', - 'user_picture_field', - 'user_picture_field_instance', - 'user_profile_entity_display', - 'user_profile_entity_form_display', - 'user_profile_field', - 'user_profile_field_instance', - ]; - $migrations['Content'] = [ - 'content_date_formats', - 'd6_aggregator_feed', - 'd6_aggregator_item', - 'd6_book', - 'd6_comment', - 'd6_custom_block', - 'd6_file', - 'd6_menu_links', - 'd6_profile_values', - 'd6_taxonomy_term', - 'd6_upload', - 'd6_url_alias', - 'd6_user', - 'd6_user_picture_file', - 'd7_aggregator_feed', - 'd7_aggregator_item', - 'd7_blocked_ips', - 'd7_comment', - 'd7_custom_block', - 'd7_file', - 'd7_menu_links', - 'd7_shortcut', - 'd7_shortcut_set_users', - 'd7_tracker_node', - 'd7_tracker_user', - 'd7_url_alias', - 'd7_user', - ]; - - foreach ($tags as $tag) { - $instances = array_filter($migrationManager->getDefinitions(), function ($migration) use ($tag) { - return !empty($migration['migration_tags']) && in_array($tag, $migration['migration_tags']); - }); - foreach ($migrations[$tag] as $migration) { - $this->assertArrayHasKey($migration, $instances); - } - } - } - -} only in patch2: unchanged: --- a/core/modules/migrate/src/Annotation/MigrateDestination.php +++ b/core/modules/migrate/src/Annotation/MigrateDestination.php @@ -13,7 +13,7 @@ * \Drupal\migrate\Plugin\migrate\destination\UrlAlias * * @see \Drupal\migrate\Plugin\MigrateDestinationInterface - * @see \Drupal\migrate\Plugin\destination\DestinationBase + * @see \Drupal\migrate\Plugin\migrate\destination\DestinationBase * @see \Drupal\migrate\Plugin\MigrateDestinationPluginManager * @see \Drupal\migrate\Annotation\MigrateSource * @see \Drupal\migrate\Annotation\MigrateProcessPlugin @@ -25,6 +25,10 @@ */ class MigrateDestination extends Plugin { + const CATEGORY_CONFIGURATION = 'Configuration'; + + const CATEGORY_CONTENT = 'Content'; + /** * A unique identifier for the process plugin. * @@ -43,4 +47,14 @@ class MigrateDestination extends Plugin { */ public $requirements_met = TRUE; + /** + * The category of the destination. Typically "Content" or "Configuration". + * + * It would be set to content if the destination is pure content or + * configuration if the destination is for configuration. + * + * @var string + */ + public $category; + } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/MigrateDestinationInterface.php +++ b/core/modules/migrate/src/Plugin/MigrateDestinationInterface.php @@ -11,7 +11,7 @@ * Destinations are responsible for persisting source data into the destination * Drupal. * - * @see \Drupal\migrate\Plugin\destination\DestinationBase + * @see \Drupal\migrate\Plugin\migrate\destination\DestinationBase * @see \Drupal\migrate\Plugin\MigrateDestinationPluginManager * @see \Drupal\migrate\Annotation\MigrateDestination * @see plugin_api only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/MigrateDestinationPluginManager.php +++ b/core/modules/migrate/src/Plugin/MigrateDestinationPluginManager.php @@ -10,7 +10,7 @@ * Plugin manager for migrate destination plugins. * * @see \Drupal\migrate\Plugin\MigrateDestinationInterface - * @see \Drupal\migrate\Plugin\destination\DestinationBase + * @see \Drupal\migrate\Plugin\migrate\destination\DestinationBase * @see \Drupal\migrate\Annotation\MigrateDestination * @see plugin_api * only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/Migration.php +++ b/core/modules/migrate/src/Plugin/Migration.php @@ -155,6 +155,13 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn protected $migration_tags = []; /** + * The category of the migration. Typically "Content" or "Configuration". + * + * @var string + */ + protected $category; + + /** * These migrations, if run, must be executed before this migration. * * These are different from the configuration dependencies. Migration @@ -639,6 +646,9 @@ public function getPluginDefinition() { foreach (parent::getPluginDefinition() as $key => $value) { $definition[$key] = isset($this->$key) ? $this->$key : $value; } + + $definition['category'] = $this->getCategory(); + return $definition; } @@ -677,4 +687,11 @@ public function getMigrationTags() { return $this->migration_tags; } + /** + * {@inheritdoc} + */ + public function getCategory() { + return $this->getDestinationPlugin()->getPluginDefinition()['category']; + } + } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/MigrationInterface.php +++ b/core/modules/migrate/src/Plugin/MigrationInterface.php @@ -322,4 +322,11 @@ public function getDestinationIds(); */ public function getMigrationTags(); + /** + * The category of the migration. Typically "Content" or "Configuration". + * + * @return string + */ + public function getCategory(); + } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/migrate/destination/ComponentEntityDisplayBase.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/ComponentEntityDisplayBase.php @@ -2,6 +2,7 @@ namespace Drupal\migrate\Plugin\migrate\destination; +use Drupal\migrate\Annotation\MigrateDestination; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Row; @@ -66,4 +67,14 @@ public function fields(MigrationInterface $migration = NULL) { */ protected abstract function getEntity($entity_type, $bundle, $mode); + + /** + * {@inheritdoc} + */ + public function getPluginDefinition() { + $definition = parent::getPluginDefinition(); + $definition['category'] = MigrateDestination::CATEGORY_CONFIGURATION; + return $definition; + } + } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/migrate/destination/Config.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/Config.php @@ -7,6 +7,7 @@ use Drupal\Core\Entity\DependencyTrait; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\migrate\Annotation\MigrateDestination; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Row; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -195,4 +196,13 @@ public function rollback(array $destination_identifier) { } } + /** + * {@inheritdoc} + */ + public function getPluginDefinition() { + $definition = parent::getPluginDefinition(); + $definition['category'] = MigrateDestination::CATEGORY_CONFIGURATION; + return $definition; + } + } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php @@ -3,6 +3,7 @@ namespace Drupal\migrate\Plugin\migrate\destination; use Drupal\Core\Plugin\PluginBase; +use Drupal\migrate\Annotation\MigrateDestination; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\Plugin\MigrateDestinationInterface; @@ -110,4 +111,16 @@ protected function setRollbackAction(array $id_map, $update_action = MigrateIdMa } } + /** + * {@inheritdoc} + */ + public function getPluginDefinition() { + $definition = parent::getPluginDefinition(); + + // Default all migration destinations to Content. + $definition['category'] = MigrateDestination::CATEGORY_CONTENT; + + return $definition; + } + } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php @@ -8,6 +8,7 @@ use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\language\ConfigurableLanguageManager; +use Drupal\migrate\Annotation\MigrateDestination; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\MigrateIdMapInterface; @@ -287,4 +288,13 @@ public function rollback(array $destination_identifier) { } } + /** + * {@inheritdoc} + */ + public function getPluginDefinition() { + $definition = parent::getPluginDefinition(); + $definition['category'] = MigrateDestination::CATEGORY_CONFIGURATION; + return $definition; + } + } only in patch2: unchanged: --- /dev/null +++ b/core/modules/migrate/tests/src/Kernel/Plugin/CategoryTest.php @@ -0,0 +1,420 @@ +migrationManager = \Drupal::service('plugin.manager.migration'); + } + + /** + * We cannot call enableModules in setup, so this is broken out. + */ + protected function enableAllModules() { + // Install all available modules. + $module_handler = $this->container->get('module_handler'); + $modules = $this->coreModuleListDataProvider(); + $modules_enabled = $module_handler->getModuleList(); + $modules_to_enable = array_keys(array_diff_key($modules, $modules_enabled)); + $this->enableModules($modules_to_enable); + $this->installConfig($modules_to_enable); + } + + /** + * @covers ::getCategories + */ + public function testGetCategories() { + $this->enableAllModules(); + $expected = [MigrateDestination::CATEGORY_CONFIGURATION, MigrateDestination::CATEGORY_CONTENT]; + $categories = $this->migrationManager->getCategories(); + $this->assertEquals($expected, $categories); + } + + /** + * @covers ::getSortedDefinitions + * + * @dataProvider providerMigrationCategoriesSorted + */ + public function testGetSortedDefinitions($expected) { + $this->enableAllModules(); + $actual = $this->migrationManager->getSortedDefinitions(); + $this->assertEquals($expected, array_keys($actual)); + } + + /** + * @covers ::getGroupedDefinitions + * + * @dataProvider providerMigrationCategoriesGrouped + */ + public function testGetGroupedDefinitions($groupedMigrations) { + $this->enableAllModules(); + $definitions = $this->migrationManager->getGroupedDefinitions(); + $this->assertEquals(array_keys($groupedMigrations), array_keys($definitions)); + foreach ($groupedMigrations as $category => $migrations) { + $this->assertArrayHasKey($category, $definitions); + $this->assertEquals($migrations, array_keys($definitions[$category])); + } + } + + /** + * Provides test data for category testing. + */ + public function providerMigrationCategoriesSorted() { + return [ + [ + 'all sorted' => [ + 'action_settings', + 'd7_action', + 'd6_action', + 'd6_aggregator_settings', + 'd7_aggregator_settings', + 'block_content_body_field', + 'block_content_type', + 'd7_block', + 'd6_block', + 'block_content_entity_display', + 'block_content_entity_form_display', + 'd6_book_settings', + 'd7_comment_entity_display', + 'd6_comment_entity_display', + 'd6_comment_field', + 'd7_comment_field', + 'd6_comment_entity_form_display', + 'd7_comment_entity_form_display', + 'd6_comment_field_instance', + 'd7_comment_field_instance', + 'd6_comment_entity_form_display_subject', + 'd7_comment_entity_form_display_subject', + 'd6_comment_type', + 'd7_comment_type', + 'contact_category', + 'd6_contact_settings', + 'd7_contact_settings', + 'd6_system_cron', + 'd7_global_theme_settings', + 'd7_dblog_settings', + 'd6_dblog_settings', + 'd6_date_formats', + 'default_language', + 'd6_language_content_settings', + 'd7_system_authorize', + 'd7_system_cron', + 'd7_system_date', + 'd7_system_file', + 'd7_filter_settings', + 'd7_language_content_settings', + 'd7_system_mail', + 'd7_system_performance', + 'text_settings', + 'd6_field', + 'd7_field', + 'd6_field_formatter_settings', + 'd7_field_formatter_settings', + 'd7_field_instance', + 'd6_field_instance', + 'd6_field_instance_widget_settings', + 'd7_field_instance_widget_settings', + 'file_settings', + 'd6_system_file', + 'd6_filter_format', + 'd7_filter_format', + 'd6_forum_settings', + 'd7_forum_settings', + 'd6_imagecache_presets', + 'd7_image_settings', + 'system_image_gd', + 'd7_image_styles', + 'system_image', + 'd6_language_negotiation_settings', + 'd7_language_negotiation_settings', + 'language_prefixes_and_domains', + 'language', + 'd7_language_types', + 'd6_language_types', + 'locale_settings', + 'system_maintenance', + 'd6_i18n_system_maintenance', + 'd6_menu', + 'd7_menu', + 'menu_settings', + 'd7_node_settings', + 'd6_node_settings', + 'd7_node_title_label', + 'd6_node_setting_promote', + 'd6_node_setting_status', + 'd6_node_setting_sticky', + 'd6_node_type', + 'd7_node_type', + 'd6_system_performance', + 'system_rss', + 'd6_search_settings', + 'd7_search_settings', + 'search_page', + 'd7_shortcut_set', + 'd6_simpletest_settings', + 'd7_simpletest_settings', + 'd6_i18n_system_site', + 'system_site', + 'statistics_settings', + 'd7_syslog_settings', + 'd6_system_date', + 'd6_syslog_settings', + 'system_logging', + 'taxonomy_settings', + 'd7_taxonomy_vocabulary', + 'd6_taxonomy_vocabulary', + 'd7_tracker_settings', + 'update_settings', + 'd6_upload_entity_display', + 'd6_upload_field', + 'd6_upload_field_instance', + 'd6_upload_entity_form_display', + 'd6_user_settings', + 'd6_i18n_user_settings', + 'd7_user_flood', + 'd6_user_mail', + 'd6_i18n_user_mail', + 'd7_user_mail', + 'user_picture_entity_display', + 'user_picture_field', + 'user_picture_field_instance', + 'user_picture_entity_form_display', + 'user_profile_entity_display', + 'user_profile_field', + 'd6_i18n_user_profile_field_instance', + 'user_profile_field_instance', + 'user_profile_entity_form_display', + 'd6_user_role', + 'd7_user_role', + 'd6_view_modes', + 'd7_view_modes', + 'd6_vocabulary_entity_display', + 'd6_vocabulary_field', + 'd6_vocabulary_field_instance', + 'd6_vocabulary_entity_form_display', + 'd6_aggregator_feed', + 'd7_aggregator_feed', + 'd7_aggregator_item', + 'd6_aggregator_item', + 'd7_blocked_ips', + 'd6_book', + 'd7_comment', + 'd6_comment', + 'd7_custom_block', + 'd6_custom_block', + 'd7_theme_settings', + 'd6_file', + 'd7_file', + 'd6_upload', + 'd6_menu_links', + 'd7_menu_links', + 'd6_profile_values', + 'd7_shortcut', + 'd7_shortcut_set_users', + 'd6_taxonomy_term', + 'd7_tracker_node', + 'd7_tracker_user', + 'd6_url_alias', + 'd7_url_alias', + 'd7_user', + 'd6_user', + 'd6_user_contact_settings', + 'd6_user_picture_file', + ], + ] + ]; + } + + /** + * Provides test data for category testing. + */ + public function providerMigrationCategoriesGrouped() { + return [ + [ + 'all migrations' => [ + MigrateDestination::CATEGORY_CONFIGURATION => [ + 'action_settings', + 'd7_action', + 'd6_action', + 'd6_aggregator_settings', + 'd7_aggregator_settings', + 'block_content_body_field', + 'block_content_type', + 'd7_block', + 'd6_block', + 'block_content_entity_display', + 'block_content_entity_form_display', + 'd6_book_settings', + 'd7_comment_entity_display', + 'd6_comment_entity_display', + 'd6_comment_field', + 'd7_comment_field', + 'd6_comment_entity_form_display', + 'd7_comment_entity_form_display', + 'd6_comment_field_instance', + 'd7_comment_field_instance', + 'd6_comment_entity_form_display_subject', + 'd7_comment_entity_form_display_subject', + 'd6_comment_type', + 'd7_comment_type', + 'contact_category', + 'd6_contact_settings', + 'd7_contact_settings', + 'd6_system_cron', + 'd7_global_theme_settings', + 'd7_dblog_settings', + 'd6_dblog_settings', + 'd6_date_formats', + 'default_language', + 'd6_language_content_settings', + 'd7_system_authorize', + 'd7_system_cron', + 'd7_system_date', + 'd7_system_file', + 'd7_filter_settings', + 'd7_language_content_settings', + 'd7_system_mail', + 'd7_system_performance', + 'text_settings', + 'd6_field', + 'd7_field', + 'd6_field_formatter_settings', + 'd7_field_formatter_settings', + 'd7_field_instance', + 'd6_field_instance', + 'd6_field_instance_widget_settings', + 'd7_field_instance_widget_settings', + 'file_settings', + 'd6_system_file', + 'd6_filter_format', + 'd7_filter_format', + 'd6_forum_settings', + 'd7_forum_settings', + 'd6_imagecache_presets', + 'd7_image_settings', + 'system_image_gd', + 'd7_image_styles', + 'system_image', + 'd6_language_negotiation_settings', + 'd7_language_negotiation_settings', + 'language_prefixes_and_domains', + 'language', + 'd7_language_types', + 'd6_language_types', + 'locale_settings', + 'system_maintenance', + 'd6_i18n_system_maintenance', + 'd6_menu', + 'd7_menu', + 'menu_settings', + 'd7_node_settings', + 'd6_node_settings', + 'd7_node_title_label', + 'd6_node_setting_promote', + 'd6_node_setting_status', + 'd6_node_setting_sticky', + 'd6_node_type', + 'd7_node_type', + 'd6_system_performance', + 'system_rss', + 'd6_search_settings', + 'd7_search_settings', + 'search_page', + 'd7_shortcut_set', + 'd6_simpletest_settings', + 'd7_simpletest_settings', + 'd6_i18n_system_site', + 'system_site', + 'statistics_settings', + 'd7_syslog_settings', + 'd6_system_date', + 'd6_syslog_settings', + 'system_logging', + 'taxonomy_settings', + 'd7_taxonomy_vocabulary', + 'd6_taxonomy_vocabulary', + 'd7_tracker_settings', + 'update_settings', + 'd6_upload_entity_display', + 'd6_upload_field', + 'd6_upload_field_instance', + 'd6_upload_entity_form_display', + 'd6_user_settings', + 'd6_i18n_user_settings', + 'd7_user_flood', + 'd6_user_mail', + 'd6_i18n_user_mail', + 'd7_user_mail', + 'user_picture_entity_display', + 'user_picture_field', + 'user_picture_field_instance', + 'user_picture_entity_form_display', + 'user_profile_entity_display', + 'user_profile_field', + 'd6_i18n_user_profile_field_instance', + 'user_profile_field_instance', + 'user_profile_entity_form_display', + 'd6_user_role', + 'd7_user_role', + 'd6_view_modes', + 'd7_view_modes', + 'd6_vocabulary_entity_display', + 'd6_vocabulary_field', + 'd6_vocabulary_field_instance', + 'd6_vocabulary_entity_form_display', + ], + MigrateDestination::CATEGORY_CONTENT => [ + 'd6_aggregator_feed', + 'd7_aggregator_feed', + 'd7_aggregator_item', + 'd6_aggregator_item', + 'd7_blocked_ips', + 'd6_book', + 'd7_comment', + 'd6_comment', + 'd7_custom_block', + 'd6_custom_block', + 'd7_theme_settings', + 'd6_file', + 'd7_file', + 'd6_upload', + 'd6_menu_links', + 'd7_menu_links', + 'd6_profile_values', + 'd7_shortcut', + 'd7_shortcut_set_users', + 'd6_taxonomy_term', + 'd7_tracker_node', + 'd7_tracker_user', + 'd6_url_alias', + 'd7_url_alias', + 'd7_user', + 'd6_user', + 'd6_user_contact_settings', + 'd6_user_picture_file', + ], + ], + ], + ]; + } + +} only in patch2: unchanged: --- a/core/modules/system/migration_templates/d7_system_authorize.yml +++ b/core/modules/system/migration_templates/d7_system_authorize.yml @@ -1,4 +1,5 @@ id: d7_system_authorize +label: Drupal 7 authorize settings migration_tags: - Drupal 7 source: only in patch2: unchanged: --- a/core/modules/system/migration_templates/d7_system_date.yml +++ b/core/modules/system/migration_templates/d7_system_date.yml @@ -1,4 +1,5 @@ id: d7_system_date +label: Drupal 7 date settings migration_tags: - Drupal 7 source: only in patch2: unchanged: --- a/core/modules/system/migration_templates/d7_system_mail.yml +++ b/core/modules/system/migration_templates/d7_system_mail.yml @@ -1,4 +1,5 @@ id: d7_system_mail +label: Drupal 7 mail settings migration_tags: - Drupal 7 source: only in patch2: unchanged: --- a/core/modules/user/src/UserData.php +++ b/core/modules/user/src/UserData.php @@ -114,4 +114,13 @@ public function delete($module = NULL, $uid = NULL, $name = NULL) { $query->execute(); } + /** + * {@inheritdoc} + */ + public function getPluginDefinition() { + $definition = parent::getPluginDefinition(); + $definition['category'] = MigrateDestination::CATEGORY_CONFIGURATION; + return $definition; + } + }