Browse Source

onthologie -> thesaurus migration ok

Bachir Soussi Chiadmi 5 years ago
parent
commit
9b34ac0357

+ 3 - 3
modules/custom/materio_migrate/config/install/migrate_plus.migration.d7_taxonomy_term_thesaurus.yml

@@ -22,6 +22,7 @@ process:
   vid:
     plugin: default_value
     default_value: thesaurus
+  # langcode: language
   name: name
   'description/value': description
   'description/format': format
@@ -39,13 +40,12 @@ process:
     plugin: default_value
     default_value: 0
     source: '@parent_id'
-  forum_container: is_container
   changed: timestamp
 
   #synonyms
-  field_synonyms: synonyms
+  field_synonyms: synonyms_synonym
 
   # used on advanced search
-  field_used_on_advanced_search: advanced_search
+  field_used_on_advanced_search: field_used_on_advanced_search
 
   # TODO translation

+ 41 - 0
modules/custom/materio_migrate/config/install/migrate_plus.migration.d7_taxonomy_term_thesaurus_i18n.yml

@@ -0,0 +1,41 @@
+id: d7_taxonomy_term_thesaurus_i18n
+label: Taxonomy terms Thesaurus i18n
+migration_group: d7_materio
+audit: true
+migration_tags:
+  - Drupal 7
+  - Content
+  - Materio
+deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
+
+source:
+  plugin: d7_taxonomy_term_thesaurus_i18n
+  bundle: onthologie
+  translations: true
+
+destination:
+  plugin: entity:taxonomy_term
+  translations: true
+
+process:
+  # If you are using this file to build a custom migration consider removing
+  # the tid field to allow incremental migrations.
+  tid:
+    plugin: migration
+    source: tid
+    migration: d7_taxonomy_term_thesaurus
+  vid:
+    plugin: default_value
+    default_value: thesaurus
+  langcode: language
+
+  name: name
+
+  'description/value': description
+  'description/format': format
+
+  field_synonyms: synonyms_synonym
+
+migration_dependencies:
+  required:
+    - d7_taxonomy_term_thesaurus

+ 3 - 0
modules/custom/materio_migrate/src/Plugin/migrate/source/D7TaxonomyTermShowroom.php

@@ -88,6 +88,9 @@ class D7TaxonomyTermShowroom extends FieldableEntity {
       }
     }
 
+    // TODO: tode node showroom
+
+
     return parent::prepareRow($row);
   }
 

+ 26 - 64
modules/custom/materio_migrate/src/Plugin/migrate/source/D7TaxonomyTermThesaurus.php

@@ -21,8 +21,13 @@ class D7TaxonomyTermThesaurus extends FieldableEntity {
   public function query() {
     $query = $this->select('taxonomy_term_data', 'td')
       ->fields('td')
-      ->distinct()
+      ->condition('et.entity_type', 'taxonomy_term')
+      ->condition('et.source', '')
       ->orderBy('tid');
+
+    $query->innerJoin('entity_translation', 'et', 'et.entity_id = td.tid');
+    $query->fields('et');
+
     $query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
     $query->addField('tv', 'machine_name');
 
@@ -48,6 +53,9 @@ class D7TaxonomyTermThesaurus extends FieldableEntity {
       'format' => $this->t("Format of the term description."),
       'synonyms' => $this->t("Term's Synonyms (field : synonyms_synonym)"),
       'displayed_on_advanced_search' => $this->t("field_used_on_advanced_search"),
+      'revision_id' => $this->t('Revision ID'),
+      'language' => $this->t('Term translation language'),
+      'source' => $this->t('Term translation source language'),
     ];
     return $fields;
   }
@@ -57,16 +65,20 @@ class D7TaxonomyTermThesaurus extends FieldableEntity {
    * {@inheritdoc}
    */
   public function prepareRow(Row $row) {
-    print("\n\n".'-- prepareRow -- '.$row->getSourceProperty('tid')." -- ".$row->getSourceProperty('name')." -- ".$row->getSourceProperty('weight')."\n");
+    $language = $row->getSourceProperty('language');
+    drush_print('-- '.$language.' -- '.$row->getSourceProperty('tid')." -- ".$row->getSourceProperty('name')." -- ".$row->getSourceProperty('weight'));
+
+    $tid = $row->getSourceProperty('tid');
+    // vocabulary machine name
+    $machine_name = $row->getSourceProperty('machine_name');
+    $revid = $row->getSourceProperty('revision_id');
 
     // Get Field API field values.
-    // foreach (array_keys($this->getFields('taxonomy_term', $row->getSourceProperty('machine_name'))) as $field) {
-    //   $tid = $row->getSourceProperty('tid');
-    //   $row->setSourceProperty($field, $this->getFieldValues('taxonomy_term', $field, $tid));
-    //   print("field: ".$field."\n");
-    //   print_r($this->getFieldValues('taxonomy_term', $field, $tid));
-    //   print("-\n");
-    // }
+    foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
+      // Ensure we're using the right language if the entity is translatable.
+      $field_language = $field['translatable'] ? $language : NULL;
+      $row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
+    }
 
     // Find parents for this row.
     $parents = $this->select('taxonomy_term_hierarchy', 'th')
@@ -75,66 +87,16 @@ class D7TaxonomyTermThesaurus extends FieldableEntity {
       ->execute()
       ->fetchCol();
     $row->setSourceProperty('parent', $parents);
-    // print_r($parents);
-
-    // get the english term name as defaut
-    $query = $this->select('entity_translation', 'et')
-      // ->fields('et', [
-      //   'entity_id',
-      //   'revision_id',
-      //   'language',
-      //   'source',
-      //   'uid',
-      //   'status',
-      //   'created',
-      //   'changed',
-      // ])
-      // ->distinct()
-      ->condition('et.entity_type', 'taxonomy_term')
-      ->condition('et.language', 'en')
-      ->condition('rnf.language', 'en')
-      ->condition('et.entity_id', $row->getSourceProperty('tid'));
-    $query->innerjoin('field_revision_name_field', 'rnf', 'rnf.revision_id = et.revision_id');
-    $query->fields('rnf', ['name_field_value']);
-    $name_field_en = $query->execute()->fetchField();
 
-    print($name_field_en);
-
-    if($name_field_en != NULL && $name_field_en != ""){
-      $row->setSourceProperty('name', $name_field_en);
-    }
-
-    // If the term name or term description were replaced by real fields using
-    // the Drupal 7 Title module, use the fields value instead of the term name
-    // or term description.
-    // if ($this->moduleExists('title')) {
-    //   $name_field = $row->getSourceProperty('name_field');
-    //   // print_r($name_field);
-    //   if (isset($name_field[0]['value'])) {
-    //     $row->setSourceProperty('name', $name_field[0]['value']);
-    //   }
-    //   $description_field = $row->getSourceProperty('description_field');
-    //   if (isset($description_field[0]['value'])) {
-    //     $row->setSourceProperty('description', $description_field[0]['value']);
-    //   }
-    // }
-
-    // Synonyms
+    // If the node title was replaced by a real field using the Drupal 7 Title
+    // module, use the field value instead of the node title.
     if ($this->moduleExists('title')) {
-      $synonyms = $row->getSourceProperty('synonyms_synonym');
-      // print_r($synonyms);
-      if(!empty($synonyms)){
-        $row->setSourceProperty('synonyms', $synonyms);
+      $name_field = $row->getSourceProperty('name_field');
+      if (isset($name_field[0]['value'])) {
+        $row->setSourceProperty('name', $name_field[0]['value']);
       }
     }
 
-    // displayed_on_advanced_search
-    $advanced_search = $row->getSourceProperty('field_used_on_advanced_search');
-    // print_r($advanced_search);
-    if(!empty($advanced_search)){
-      $row->setSourceProperty('advanced_search', $advanced_search);
-    }
-
     return parent::prepareRow($row);
   }
 

+ 99 - 0
modules/custom/materio_migrate/src/Plugin/migrate/source/D7TaxonomyTermThesaurusI18n.php

@@ -0,0 +1,99 @@
+<?php
+
+namespace Drupal\materio_migrate\Plugin\migrate\source;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
+
+/**
+ * Taxonomy term source from database.
+ *
+ * @MigrateSource(
+ *   id = "d7_taxonomy_term_thesaurus_i18n",
+ *   source_module = "taxonomy"
+ * )
+ */
+class D7TaxonomyTermThesaurusI18n extends FieldableEntity {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('taxonomy_term_data', 'td')
+      ->fields('td')
+      ->condition('et.entity_type', 'taxonomy_term')
+      ->condition('et.source', '', '<>')
+      ->orderBy('tid');
+
+    $query->innerJoin('entity_translation', 'et', 'et.entity_id = td.tid');
+    $query->fields('et');
+    $query->leftJoin('taxonomy_vocabulary', 'tv', 'tv.vid = td.vid');
+    $query->fields('tv', ['machine_name']);
+
+    if (isset($this->configuration['bundle'])) {
+      $query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
+    }
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    $fields = [
+      'tid' => $this->t('The term ID.'),
+      'vid' => $this->t('Existing term VID'),
+      'machine_name' => $this->t('Vocabulary machine name'),
+      'name' => $this->t('The name of the term.'),
+      'revision_id' => $this->t('Revision ID'),
+      'language' => $this->t('Term translation language'),
+      'source' => $this->t('Term translation source language'),
+      'description' => $this->t('The term description.'),
+      'weight' => $this->t('Weight'),
+      'parent' => $this->t("The Drupal term IDs of the term's parents."),
+      'format' => $this->t("Format of the term description."),
+    ];
+    return $fields;
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $language = $row->getSourceProperty('language');
+    drush_print('-- '. $language .' -- '.$row->getSourceProperty('tid')." -- ".$row->getSourceProperty('name')." -- ".$row->getSourceProperty('weight'));
+
+    $tid = $row->getSourceProperty('tid');
+    // vocabulary machine name
+    $machine_name = $row->getSourceProperty('machine_name');
+    $revid = $row->getSourceProperty('revision_id');
+
+    // Get Field API field values.
+    foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
+      // Ensure we're using the right language if the entity is translatable.
+      $field_language = $field['translatable'] ? $language : NULL;
+      $row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
+    }
+
+    // If the node title was replaced by a real field using the Drupal 7 Title
+    // module, use the field value instead of the node title.
+    if ($this->moduleExists('title')) {
+      $name_field = $row->getSourceProperty('name_field');
+      if (isset($name_field[0]['value'])) {
+        $row->setSourceProperty('name', $name_field[0]['value']);
+      }
+    }
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['tid']['type'] = 'integer';
+    return $ids;
+  }
+
+}