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
Loading
Loading
Loading
Loading
+69 −0
Original line number Diff line number Diff line
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
+8 −0
Original line number Diff line number Diff line
@@ -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
+14 −0
Original line number Diff line number Diff line
@@ -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');
+59 −0
Original line number Diff line number Diff line
<?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);
  }

}
+0 −3
Original line number Diff line number Diff line
@@ -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);
  }

}
Loading