Issue #2225781 by quietone, Jo Fitzgerald, Gábor Hojtsy, mikeryan: Migrate D6 i18n taxonomy vocabularies
parent
c42dd18966
commit
28afba24f8
|
@ -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',
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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'));
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue