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

8.4.x
Alex Pott 2017-03-07 16:29:27 +00:00
parent c42dd18966
commit 28afba24f8
5 changed files with 275 additions and 0 deletions

View File

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

View File

@ -0,0 +1,27 @@
id: d6_i18n_taxonomy_vocabulary
label: Taxonomy vocabularies
migration_tags:
- Drupal 6
source:
plugin: d6_i18n_taxonomy_vocabulary
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,66 @@
<?php
namespace Drupal\taxonomy\Plugin\migrate\source\d6;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
/**
* Profile field source from database.
*
* @MigrateSource(
* id = "d6_i18n_taxonomy_vocabulary",
* source_provider = "taxonomy"
* )
*/
class I18nTaxonomyVocabulary extends DrupalSqlBase {
/**
* The source table containing profile field info.
*
* @var string
*/
protected $fieldTable;
/**
* The source table containing the profile values.
*
* @var string
*/
protected $valueTable;
/**
* {@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');
$query->join('i18n_strings', 'i18n', 'i18n.objectid = v.vid');
$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 MigrateI18nTaxonomyVocabularyTest extends MigrateDrupal6TestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['language', 'taxonomy'];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->executeMigrations([
'd6_taxonomy_vocabulary',
'd6_i18n_taxonomy_vocabulary',
]);
}
/**
* Tests the Drupal 6 i18n taxonomy vocabularies to Drupal 8 migration.
*/
public function testI18nTaxonomyVocabulary() {
$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,131 @@
<?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\I18nTaxonomyVocabulary
* @group taxonomy
*/
class I18nVocabularyTest extends MigrateSqlSourceTestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['taxonomy', 'migrate_drupal'];
protected $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,
],
];
protected $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,
],
];
protected $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' => ''
],
];
protected $expectedResults = [
[
'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',
],
];
/**
* {@inheritdoc}
*/
public function providerSource() {
$tests = [];
$tests[0][0]['i18n_strings'] = $this->i18n_strings;
$tests[0][0]['locales_target'] = $this->locales_target;
$tests[0][0]['vocabulary'] = $this->vocabulary;
$tests[0][1] = $this->expectedResults;
return $tests;
}
}