summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2017-03-07 16:29:27 (GMT)
committerAlex Pott2017-03-07 16:29:27 (GMT)
commit28afba24f8ec3233dd3c82ada7c2f793d27d47bb (patch)
treea7efbc624b571042a8a521faca5970299c37815f
parentc42dd1896656a367c1537dc8c773751e5ebf5b4e (diff)
Issue #2225781 by quietone, Jo Fitzgerald, Gábor Hojtsy, mikeryan: Migrate D6 i18n taxonomy vocabularies
-rw-r--r--core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php4
-rw-r--r--core/modules/taxonomy/migration_templates/d6_i18n_taxonomy_vocabulary.yml27
-rw-r--r--core/modules/taxonomy/src/Plugin/migrate/source/d6/I18nTaxonomyVocabulary.php66
-rw-r--r--core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateI18nTaxonomyVocabularyTest.php47
-rw-r--r--core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d6/I18nVocabularyTest.php131
5 files changed, 275 insertions, 0 deletions
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index 6b1fc1b..322b356 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -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',
diff --git a/core/modules/taxonomy/migration_templates/d6_i18n_taxonomy_vocabulary.yml b/core/modules/taxonomy/migration_templates/d6_i18n_taxonomy_vocabulary.yml
new file mode 100644
index 0000000..2e44019
--- /dev/null
+++ b/core/modules/taxonomy/migration_templates/d6_i18n_taxonomy_vocabulary.yml
@@ -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
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/I18nTaxonomyVocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/I18nTaxonomyVocabulary.php
new file mode 100644
index 0000000..1a102a9
--- /dev/null
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/I18nTaxonomyVocabulary.php
@@ -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;
+ }
+
+}
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateI18nTaxonomyVocabularyTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateI18nTaxonomyVocabularyTest.php
new file mode 100644
index 0000000..02218c3
--- /dev/null
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateI18nTaxonomyVocabularyTest.php
@@ -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'));
+ }
+
+}
diff --git a/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d6/I18nVocabularyTest.php b/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d6/I18nVocabularyTest.php
new file mode 100644
index 0000000..09abe2f
--- /dev/null
+++ b/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d6/I18nVocabularyTest.php
@@ -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;
+ }
+
+}