diff --git a/core/modules/content_translation/migrations/d6_menu_links_localized.yml b/core/modules/content_translation/migrations/d6_menu_links_localized.yml new file mode 100644 index 00000000000..08ca820ef8a --- /dev/null +++ b/core/modules/content_translation/migrations/d6_menu_links_localized.yml @@ -0,0 +1,69 @@ +id: d6_menu_links_localized +label: Menu links localized +migration_tags: + - Drupal 6 + - Content + - Multilingual +source: + plugin: menu_link + constants: + bundle: menu_link_content +process: + skip_not_localized: + plugin: skip_on_empty + source: is_localized + method: row + id: mlid + title: link_title + description: description + langcode: language + menu_name: + - + plugin: migration_lookup + # The menu migration is in the system module. + migration: d6_menu + source: menu_name + - + plugin: skip_on_empty + method: row + - + plugin: static_map + map: + management: admin + bypass: true + 'link/uri': + plugin: link_uri + source: link_path + 'link/options': + plugin: link_options + source: options + route: + plugin: route + source: + - link_path + - options + route_name: '@route/route_name' + route_parameters: '@route/route_parameters' + url: '@route/url' + options: '@route/options' + external: external + weight: weight + expanded: expanded + enabled: enabled + parent: + plugin: menu_link_parent + source: + - plid + - '@menu_name' + - parent_link_path + changed: updated +destination: + plugin: entity:menu_link_content + no_stub: true + translations: true + destination_module: content_translation +migration_dependencies: + required: + - language + - d6_language_content_menu_settings + - d6_menu_links diff --git a/core/modules/menu_link_content/migrations/d6_menu_links.yml b/core/modules/menu_link_content/migrations/d6_menu_links.yml index 48faf0e28b1..2f613c14f19 100644 --- a/core/modules/menu_link_content/migrations/d6_menu_links.yml +++ b/core/modules/menu_link_content/migrations/d6_menu_links.yml @@ -7,6 +7,14 @@ migration_tags: source: plugin: menu_link process: + skip_localized: + - + plugin: callback + callable: is_null + source: is_localized + - + plugin: skip_on_empty + method: row id: mlid title: link_title description: description diff --git a/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php b/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php index 1101ce6be64..f4309c131ca 100644 --- a/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php +++ b/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php @@ -141,6 +141,20 @@ class MenuLink extends DrupalSqlBase { $row->setSourceProperty('skip_translation', FALSE); } } + // In Drupal 6 the language for the menu is in the options array. Set + // property 'is_localized' so that the process pipeline can determine if + // the menu link is localize or not. + $row->setSourceProperty('is_localized', NULL); + $default_language = $this->variableGet('language_default', (object) ['language' => 'und']); + $default_language = $default_language->language; + $options = unserialize($row->getSourceProperty('options')); + if (isset($options['langcode'])) { + if ($options['langcode'] != $default_language) { + $row->setSourceProperty('language', $options['langcode']); + $row->setSourceProperty('is_localized', 'localized'); + } + } + $row->setSourceProperty('options', unserialize($row->getSourceProperty('options'))); $row->setSourceProperty('enabled', !$row->getSourceProperty('hidden')); $description = $row->getSourceProperty('options/attributes/title'); diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkLocalizedTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkLocalizedTest.php new file mode 100644 index 00000000000..9ad274dca56 --- /dev/null +++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkLocalizedTest.php @@ -0,0 +1,59 @@ +setUpCurrentUser(); + $this->installEntitySchema('menu_link_content'); + $this->executeMigrations([ + 'language', + 'd6_language_content_menu_settings', + 'd6_menu', + 'd6_menu_links', + 'd6_menu_links_localized', + ]); + } + + /** + * Tests migration of menu link localized translations. + */ + public function testMenuLinkLocalized() { + // A localized menu link. + $this->assertEntity('463', 'fr', 'fr - Test 1', 'secondary-links', 'fr - Test menu link 1', TRUE, FALSE, [ + 'attributes' => ['title' => 'fr - Test menu link 1'], + 'langcode' => 'fr', + 'alter' => TRUE, + ], 'internal:/user/login', -49, 0); + } + +} diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php index c21a085fd5b..6a13ac954f6 100644 --- a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php +++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php @@ -98,9 +98,6 @@ class MigrateMenuLinkTest extends MigrateNodeTestBase { $this->assertEntity('460', 'Le Vrai McCoy', 'primary-links', NULL, TRUE, FALSE, ['attributes' => ['title' => ''], 'alter' => TRUE], 'entity:node/10', 0); $this->assertEntity('461', 'Abantu zulu', 'primary-links', NULL, TRUE, FALSE, ['attributes' => ['title' => ''], 'alter' => TRUE], 'entity:node/12', 0); $this->assertEntity('462', 'The Zulu People', 'primary-links', NULL, TRUE, FALSE, ['attributes' => ['title' => ''], 'alter' => TRUE], 'entity:node/12', 0); - - // Test the migration of menu links translation. - $this->assertEntity('463', 'fr - Test 1', 'secondary-links', 'fr - Test menu link 1', TRUE, FALSE, ['attributes' => ['title' => 'fr - Test menu link 1'], 'langcode' => 'fr', 'alter' => TRUE], 'internal:/user/login', -49); } } diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php index cedcfbb8fdf..0aa56777243 100644 --- a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php +++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php @@ -78,24 +78,6 @@ class MigrateMenuLinkTranslationTest extends MigrateDrupal6TestBase { $this->assertSame(['attributes' => ['title' => '']], $menu_link->link->options); $this->assertSame('https://www.drupal.org', $menu_link->link->uri); $this->assertSame(-50, $menu_link->getWeight()); - - $menu_link = MenuLinkContent::load(463); - $this->assertInstanceOf(MenuLinkContent::class, $menu_link); - $this->assertSame('fr - Test 1', $menu_link->getTitle()); - $this->assertSame('fr - Test menu link 1', $menu_link->getDescription()); - $this->assertSame('secondary-links', $menu_link->getMenuName()); - $this->assertTrue($menu_link->isEnabled()); - $this->assertFalse($menu_link->isExpanded()); - $attributes = [ - 'attributes' => [ - 'title' => 'fr - Test menu link 1', - ], - 'langcode' => 'fr', - 'alter' => TRUE, - ]; - $this->assertSame($attributes, $menu_link->link->options); - $this->assertSame('internal:/user/login', $menu_link->link->uri); - $this->assertSame(-49, $menu_link->getWeight()); } }