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:
|
source:
|
||||||
plugin: menu_link
|
plugin: menu_link
|
||||||
process:
|
process:
|
||||||
|
skip_localized:
|
||||||
|
-
|
||||||
|
plugin: callback
|
||||||
|
callable: is_null
|
||||||
|
source: is_localized
|
||||||
|
-
|
||||||
|
plugin: skip_on_empty
|
||||||
|
method: row
|
||||||
id: mlid
|
id: mlid
|
||||||
title: link_title
|
title: link_title
|
||||||
description: description
|
description: description
|
||||||
|
|
|
@ -141,6 +141,20 @@ class MenuLink extends DrupalSqlBase {
|
||||||
$row->setSourceProperty('skip_translation', FALSE);
|
$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('options', unserialize($row->getSourceProperty('options')));
|
||||||
$row->setSourceProperty('enabled', !$row->getSourceProperty('hidden'));
|
$row->setSourceProperty('enabled', !$row->getSourceProperty('hidden'));
|
||||||
$description = $row->getSourceProperty('options/attributes/title');
|
$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('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('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);
|
$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(['attributes' => ['title' => '']], $menu_link->link->options);
|
||||||
$this->assertSame('https://www.drupal.org', $menu_link->link->uri);
|
$this->assertSame('https://www.drupal.org', $menu_link->link->uri);
|
||||||
$this->assertSame(-50, $menu_link->getWeight());
|
$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