diff --git a/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php index c3deba5..0dbd5ba 100644 --- a/core/modules/migrate/src/Plugin/MigrationPluginManager.php +++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php @@ -22,7 +22,6 @@ class MigrationPluginManager extends DefaultPluginManager implements MigrationPluginManagerInterface, MigrateBuildDependencyInterface, CategorizingPluginManagerInterface { use CategorizingPluginManagerTrait { - getSortedDefinitions as traitGetSortedDefinitions; getGroupedDefinitions as traitGetGroupedDefinitions; } @@ -277,19 +276,34 @@ public function getCategories() { return $categories; } + /** * {@inheritdoc} */ public function getSortedDefinitions(array $definitions = NULL) { - // Sort the plugins first by category, then by label. - return $this->traitGetSortedDefinitions($this->getPluginDefinitions()); + $definitions = $this->getPluginDefinitions($definitions); + + // Obtain a list of sort items. + $categories = []; + $labels = []; + $ids = []; + foreach ($definitions as $key => $row) { + $categories[$key] = $row['category']; + $labels[$key] = $row['label']; + $ids[$key] = $row['id']; + } + // Sort the plugins first by category, then by label, then id. + // Add $definitions as the last parameter, to sort by the common key. + array_multisort($categories, SORT_ASC, SORT_NATURAL|SORT_FLAG_CASE, $labels, SORT_ASC, SORT_NATURAL|SORT_FLAG_CASE, $ids, SORT_ASC, SORT_NATURAL|SORT_FLAG_CASE, $definitions); + + return $definitions; } /** * {@inheritdoc} */ public function getGroupedDefinitions(array $definitions = NULL) { - return $this->traitGetGroupedDefinitions($this->getPluginDefinitions()); + return $this->traitGetGroupedDefinitions($this->getPluginDefinitions($definitions)); } /** @@ -299,14 +313,15 @@ public function getGroupedDefinitions(array $definitions = NULL) { * The plugin definition, as returned by the createStubMigration in the * plugin manager. */ - protected function getPluginDefinitions() { - $definitions = []; - foreach ($this->getDefinitions() as $definition) { + protected function getPluginDefinitions(array $definitions = NULL) { + $definitions = isset($definitions) ? $definitions : $this->getDefinitions(); + $stubDefinitions = []; + foreach ($definitions as $definition) { $stubDefinition = $this->createStubMigration($definition)->getPluginDefinition(); - $definitions[$stubDefinition['id']] = $stubDefinition; + $stubDefinitions[$stubDefinition['id']] = $stubDefinition; } - return $definitions; + return $stubDefinitions; } } diff --git a/core/modules/migrate/tests/src/Kernel/Plugin/CategoryTest.php b/core/modules/migrate/tests/src/Kernel/Plugin/CategoryTest.php index c30f4bf..d0d937f 100644 --- a/core/modules/migrate/tests/src/Kernel/Plugin/CategoryTest.php +++ b/core/modules/migrate/tests/src/Kernel/Plugin/CategoryTest.php @@ -83,19 +83,19 @@ public function providerMigrationCategoriesSorted() { [ 'all sorted' => [ 'action_settings', - 'd7_action', 'd6_action', + 'd7_action', 'd6_aggregator_settings', 'd7_aggregator_settings', 'block_content_body_field', 'block_content_type', - 'd7_block', 'd6_block', + 'd7_block', 'block_content_entity_display', 'block_content_entity_form_display', 'd6_book_settings', - 'd7_comment_entity_display', 'd6_comment_entity_display', + 'd7_comment_entity_display', 'd6_comment_field', 'd7_comment_field', 'd6_comment_entity_form_display', @@ -111,8 +111,8 @@ public function providerMigrationCategoriesSorted() { 'd7_contact_settings', 'd6_system_cron', 'd7_global_theme_settings', - 'd7_dblog_settings', 'd6_dblog_settings', + 'd7_dblog_settings', 'd6_date_formats', 'default_language', 'd6_language_content_settings', @@ -129,8 +129,8 @@ public function providerMigrationCategoriesSorted() { 'd7_field', 'd6_field_formatter_settings', 'd7_field_formatter_settings', - 'd7_field_instance', 'd6_field_instance', + 'd7_field_instance', 'd6_field_instance_widget_settings', 'd7_field_instance_widget_settings', 'file_settings', @@ -148,16 +148,16 @@ public function providerMigrationCategoriesSorted() { 'd7_language_negotiation_settings', 'language_prefixes_and_domains', 'language', - 'd7_language_types', 'd6_language_types', + 'd7_language_types', 'locale_settings', - 'system_maintenance', 'd6_i18n_system_maintenance', + 'system_maintenance', 'd6_menu', 'd7_menu', 'menu_settings', - 'd7_node_settings', 'd6_node_settings', + 'd7_node_settings', 'd7_node_title_label', 'd6_node_setting_promote', 'd6_node_setting_status', @@ -180,19 +180,19 @@ public function providerMigrationCategoriesSorted() { 'd6_syslog_settings', 'system_logging', 'taxonomy_settings', - 'd7_taxonomy_vocabulary', 'd6_taxonomy_vocabulary', + 'd7_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', + 'd6_user_settings', 'd7_user_flood', - 'd6_user_mail', 'd6_i18n_user_mail', + 'd6_user_mail', 'd7_user_mail', 'user_picture_entity_display', 'user_picture_field', @@ -213,14 +213,14 @@ public function providerMigrationCategoriesSorted() { 'd6_vocabulary_entity_form_display', 'd6_aggregator_feed', 'd7_aggregator_feed', - 'd7_aggregator_item', 'd6_aggregator_item', + 'd7_aggregator_item', 'd7_blocked_ips', 'd6_book', - 'd7_comment', 'd6_comment', - 'd7_custom_block', + 'd7_comment', 'd6_custom_block', + 'd7_custom_block', 'd7_theme_settings', 'd6_file', 'd7_file', @@ -235,8 +235,8 @@ public function providerMigrationCategoriesSorted() { 'd7_tracker_user', 'd6_url_alias', 'd7_url_alias', - 'd7_user', 'd6_user', + 'd7_user', 'd6_user_contact_settings', 'd6_user_picture_file', ], @@ -253,19 +253,19 @@ public function providerMigrationCategoriesGrouped() { 'all migrations' => [ MigrateDestination::CATEGORY_CONFIGURATION => [ 'action_settings', - 'd7_action', 'd6_action', + 'd7_action', 'd6_aggregator_settings', 'd7_aggregator_settings', 'block_content_body_field', 'block_content_type', - 'd7_block', 'd6_block', + 'd7_block', 'block_content_entity_display', 'block_content_entity_form_display', 'd6_book_settings', - 'd7_comment_entity_display', 'd6_comment_entity_display', + 'd7_comment_entity_display', 'd6_comment_field', 'd7_comment_field', 'd6_comment_entity_form_display', @@ -281,8 +281,8 @@ public function providerMigrationCategoriesGrouped() { 'd7_contact_settings', 'd6_system_cron', 'd7_global_theme_settings', - 'd7_dblog_settings', 'd6_dblog_settings', + 'd7_dblog_settings', 'd6_date_formats', 'default_language', 'd6_language_content_settings', @@ -299,8 +299,8 @@ public function providerMigrationCategoriesGrouped() { 'd7_field', 'd6_field_formatter_settings', 'd7_field_formatter_settings', - 'd7_field_instance', 'd6_field_instance', + 'd7_field_instance', 'd6_field_instance_widget_settings', 'd7_field_instance_widget_settings', 'file_settings', @@ -318,16 +318,16 @@ public function providerMigrationCategoriesGrouped() { 'd7_language_negotiation_settings', 'language_prefixes_and_domains', 'language', - 'd7_language_types', 'd6_language_types', + 'd7_language_types', 'locale_settings', - 'system_maintenance', 'd6_i18n_system_maintenance', + 'system_maintenance', 'd6_menu', 'd7_menu', 'menu_settings', - 'd7_node_settings', 'd6_node_settings', + 'd7_node_settings', 'd7_node_title_label', 'd6_node_setting_promote', 'd6_node_setting_status', @@ -350,19 +350,19 @@ public function providerMigrationCategoriesGrouped() { 'd6_syslog_settings', 'system_logging', 'taxonomy_settings', - 'd7_taxonomy_vocabulary', 'd6_taxonomy_vocabulary', + 'd7_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', + 'd6_user_settings', 'd7_user_flood', - 'd6_user_mail', 'd6_i18n_user_mail', + 'd6_user_mail', 'd7_user_mail', 'user_picture_entity_display', 'user_picture_field', @@ -385,14 +385,14 @@ public function providerMigrationCategoriesGrouped() { MigrateDestination::CATEGORY_CONTENT => [ 'd6_aggregator_feed', 'd7_aggregator_feed', - 'd7_aggregator_item', 'd6_aggregator_item', + 'd7_aggregator_item', 'd7_blocked_ips', 'd6_book', - 'd7_comment', 'd6_comment', - 'd7_custom_block', + 'd7_comment', 'd6_custom_block', + 'd7_custom_block', 'd7_theme_settings', 'd6_file', 'd7_file', @@ -407,8 +407,8 @@ public function providerMigrationCategoriesGrouped() { 'd7_tracker_user', 'd6_url_alias', 'd7_url_alias', - 'd7_user', 'd6_user', + 'd7_user', 'd6_user_contact_settings', 'd6_user_picture_file', ],