Issue #3245553 by quietone, danflanagan8: Fix migration of localized D6 menu links
parent
74b25722ac
commit
53783642d7
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue