Issue #3245553 by quietone, danflanagan8: Fix migration of localized D6 menu links

merge-requests/2348/head
Alex Pott 2022-05-23 10:04:25 +01:00
parent 74b25722ac
commit 53783642d7
No known key found for this signature in database
GPG Key ID: BDA67E7EE836E5CE
6 changed files with 150 additions and 21 deletions

View File

@ -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

View File

@ -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

View File

@ -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');

View File

@ -0,0 +1,59 @@
<?php
namespace Drupal\Tests\menu_link_content\Kernel\Migrate\d6;
use Drupal\Tests\menu_link_content\Kernel\Migrate\MigrateMenuLinkTestTrait;
use Drupal\Tests\node\Kernel\Migrate\d6\MigrateNodeTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
/**
* Tests Menu link localized translation migration.
*
* @group migrate_drupal_6
*/
class MigrateMenuLinkLocalizedTest extends MigrateNodeTestBase {
use MigrateMenuLinkTestTrait;
use UserCreationTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'content_translation',
'language',
'link',
'menu_link_content',
'menu_ui',
];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->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);
}
}

View File

@ -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);
}
}

View File

@ -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());
}
}