Skip to content
Snippets Groups Projects
Verified Commit 53783642 authored by Alex Pott's avatar Alex Pott
Browse files

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

parent 74b25722
No related branches found
No related tags found
37 merge requests!12227Issue #3181946 by jonmcl, mglaman,!7471uncessary 5 files are moved from media-library folder to misc folder,!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2853#3274419 Makes BaseFieldOverride inherit the internal property from the base field.,!2719Issue #3110137: Remove Classy from core.,!2437Issue #3238257 by hooroomoo, Wim Leers: Fragment link pointing to <textarea>...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
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 @@ public function prepareRow(Row $row) {
$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');
......
<?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 @@ public function testMenuLinks() {
$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 @@ public function testMenuLinks() {
$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());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment