Issue #2225781 by quietone, alexpott, Jo Fitzgerald, RajeevK, mikeryan, Gábor Hojtsy, mpp, xjm: Migrate D6 i18n taxonomy vocabularies

8.4.x
Gabor Hojtsy 2017-05-30 11:50:21 +02:00
parent 40e14fc215
commit bf014a9443
5 changed files with 260 additions and 0 deletions

View File

@ -534,6 +534,10 @@ class MigrateUpgradeForm extends ConfirmFormBase {
'source_module' => 'taxonomy',
'destination_module' => 'taxonomy',
],
'd6_taxonomy_vocabulary_translation' => [
'source_module' => 'i18n',
'destination_module' => 'taxonomy',
],
'd6_term_node' => [
'source_module' => 'taxonomy',
'destination_module' => 'taxonomy',

View File

@ -0,0 +1,27 @@
id: d6_taxonomy_vocabulary_translation
label: Taxonomy vocabularies
migration_tags:
- Drupal 6
source:
plugin: d6_taxonomy_vocabulary_translation
process:
vid:
-
plugin: machine_name
source: name
-
plugin: substr
length: 32
langcode: language
property:
plugin: static_map
source: property
map:
name: name
description: description
translation: translation
destination:
plugin: entity:taxonomy_vocabulary
migration_dependencies:
required:
- d6_taxonomy_vocabulary

View File

@ -0,0 +1,57 @@
<?php
namespace Drupal\taxonomy\Plugin\migrate\source\d6;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
/**
* Drupal 6 vocabulary translations from source database.
*
* @MigrateSource(
* id = "d6_taxonomy_vocabulary_translation",
* source_provider = "taxonomy"
* )
*/
class VocabularyTranslation extends DrupalSqlBase {
/**
* {@inheritdoc}
*/
public function query() {
$query = $this->select('vocabulary', 'v')
->fields('v', ['vid', 'name', 'description'])
->fields('i18n', ['lid', 'type', 'property', 'objectid'])
->fields('lt', ['lid', 'translation'])
->condition('i18n.type', 'vocabulary');
$query->addField('lt', 'language', 'language');
// The i18n_strings table has two columns containing the object ID, objectid
// and objectindex. The objectid column is a text field. Therefore, for the
// join to work in PostgreSQL, use the objectindex field as this is numeric
// like the vid field.
$query->join('i18n_strings', 'i18n', 'v.vid = i18n.objectindex');
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
return $query;
}
/**
* {@inheritdoc}
*/
public function fields() {
return [
'vid' => $this->t('The vocabulary ID.'),
'language' => $this->t('Language for this field.'),
'property' => $this->t('Name of property being translated.'),
'translation' => $this->t('Translation of either the title or explanation.'),
];
}
/**
* {@inheritdoc}
*/
public function getIds() {
$ids['vid']['type'] = 'integer';
return $ids;
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace Drupal\Tests\taxonomy\Kernel\Migrate\d6;
use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
/**
* Migrate taxonomy vocabularies to taxonomy.vocabulary.*.yml.
*
* @group migrate_drupal_6
*/
class MigrateTaxonomyVocabularyTranslationTest extends MigrateDrupal6TestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['language', 'taxonomy'];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->executeMigrations([
'd6_taxonomy_vocabulary',
'd6_taxonomy_vocabulary_translation',
]);
}
/**
* Tests the Drupal 6 i18n taxonomy vocabularies to Drupal 8 migration.
*/
public function testTaxonomyVocabularyTranslation() {
$language_manager = \Drupal::service('language_manager');
$config = $language_manager->getLanguageConfigOverride('fr', 'taxonomy.vocabulary.vocabulary_1_i_0_');
$this->assertSame('fr - vocabulary 1 (i=0)', $config->get('name'));
$config = $language_manager->getLanguageConfigOverride('fr', 'taxonomy.vocabulary.vocabulary_2_i_1_');
$this->assertSame('fr - vocabulary 2 (i=1)', $config->get('name'));
$config = $language_manager->getLanguageConfigOverride('fr', 'taxonomy.vocabulary.vocabulary_3_i_2_');
$this->assertSame('fr - vocabulary 3 (i=2)', $config->get('name'));
$config = $language_manager->getLanguageConfigOverride('fr', 'taxonomy.vocabulary.vocabulary_name_much_longer_than');
$this->assertSame('Nom de vocabulaire beaucoup plus long que trente-deux caractères', $config->get('name'));
$config = $language_manager->getLanguageConfigOverride('fr', 'taxonomy.vocabulary.tags');
$this->assertSame('fr - Tags', $config->get('name'));
}
}

View File

@ -0,0 +1,125 @@
<?php
namespace Drupal\Tests\taxonomy\Kernel\Plugin\migrate\source\d6;
use Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase;
/**
* Tests D6 i18n vocabulary source plugin.
*
* @covers \Drupal\taxonomy\Plugin\migrate\source\d6\VocabularyTranslation
* @group taxonomy
*/
class VocabularyTranslationTest extends MigrateSqlSourceTestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['taxonomy', 'migrate_drupal'];
/**
* {@inheritdoc}
*/
public function providerSource() {
$tests = [];
// The source data.
$tests[0][0]['i18n_strings'] = [
[
'lid' => 1,
'objectid' => 1,
'type' => 'vocabulary',
'property' => 'name',
'objectindex' => 1,
'format' => 0,
],
[
'lid' => 2,
'objectid' => 2,
'type' => 'vocabulary',
'property' => 'name',
'objectindex' => 2,
'format' => 0,
],
];
$tests[0][0]['locales_target'] = [
[
'lid' => 1,
'language' => 'fr',
'translation' => 'fr - vocabulary 1',
'plid' => 0,
'plural' => 0,
'i18n_status' => 0,
],
[
'lid' => 2,
'language' => 'fr',
'translation' => 'fr - vocabulary 2',
'plid' => 0,
'plural' => 0,
'i18n_status' => 0,
],
];
$tests[0][0]['vocabulary'] = [
[
'vid' => 1,
'name' => 'vocabulary 1',
'description' => 'description of vocabulary 1',
'help' => 1,
'relations' => 1,
'hierarchy' => 1,
'multiple' => 0,
'required' => 0,
'tags' => 0,
'module' => 'taxonomy',
'weight' => 4,
'language' => '',
],
[
'vid' => 2,
'name' => 'vocabulary 2',
'description' => 'description of vocabulary 2',
'help' => 1,
'relations' => 1,
'hierarchy' => 1,
'multiple' => 0,
'required' => 0,
'tags' => 0,
'module' => 'taxonomy',
'weight' => 5,
'language' => '',
],
];
$tests[0]['expected_results'] = [
[
'vid' => 1,
'name' => 'vocabulary 1',
'description' => 'description of vocabulary 1',
'lid' => '1',
'type' => 'vocabulary',
'property' => 'name',
'objectid' => '1',
'lt_lid' => '1',
'translation' => 'fr - vocabulary 1',
'language' => 'fr',
],
[
'vid' => 2,
'name' => 'vocabulary 2',
'description' => 'description of vocabulary 2',
'lid' => '2',
'type' => 'vocabulary',
'property' => 'name',
'objectid' => '2',
'lt_lid' => '2',
'translation' => 'fr - vocabulary 2',
'language' => 'fr',
],
];
return $tests;
}
}