Pārlūkot izejas kodu

popsu_migrate: D7NodeEvemenent title, programme ok

bach 4 gadi atpakaļ
vecāks
revīzija
7837b6e41e

+ 1 - 1
config/sync/migrate_plus.migration.d7_allpublicfiles.yml

@@ -1,4 +1,4 @@
-uuid: 071e279f-245e-4b84-9923-2af9f39fb8e9
+uuid: d8b54ad5-2208-4425-b723-a887d54c2dbd
 langcode: fr
 status: true
 dependencies: {  }

+ 46 - 0
config/sync/migrate_plus.migration.d7_node_evenement.yml

@@ -0,0 +1,46 @@
+uuid: b499f0ee-400a-4ca6-b840-5f512a654d9f
+langcode: fr
+status: true
+dependencies: {  }
+_core:
+  default_config_hash: PSsiiyyevWgCYzvYGFZ21_JeY4biek3VX8UWRJC84xA
+id: d7_node_evenement
+class: null
+field_plugin_method: null
+cck_plugin_method: null
+migration_tags:
+  - 'Drupal 7'
+  - Content
+  - Popsu
+migration_group: popsu
+label: 'Node evenement'
+source:
+  plugin: d7_node_evenement
+  batch_size: 500
+process:
+  type:
+    plugin: default_value
+    default_value: evenement
+  created: created
+  changed: changed
+  uid:
+    plugin: default_value
+    default_value: 34
+  title: title
+  field_programme:
+    plugin: sub_process
+    source: field_programme
+    process:
+      target_id:
+        plugin: migration_lookup
+        migration: d7_node_programme
+        source: nid
+        no_stub: true
+  field_memo: field_memo
+destination:
+  plugin: 'entity:node'
+migration_dependencies:
+  required:
+    - d7_allpublicfiles
+    - d7_users
+    - d7_taxonomy_term_type_theme

+ 1 - 1
config/sync/migrate_plus.migration.d7_node_programme.yml

@@ -1,4 +1,4 @@
-uuid: 01d9fb31-fab8-4cd4-8baa-952cc5abbac9
+uuid: 3fa15bd5-3513-404f-a196-9803dda7cc19
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration.d7_node_projet.yml

@@ -1,4 +1,4 @@
-uuid: 2d9231da-03d9-4adc-8e76-5daef3f9aab3
+uuid: d52cf24c-ba35-48c8-9953-63aa84ac4b75
 langcode: fr
 status: true
 dependencies: {  }

+ 3 - 3
config/sync/migrate_plus.migration.d7_node_ressource.yml

@@ -1,9 +1,9 @@
-uuid: 507f9a8c-7553-49f1-8ca0-0060a62b4a76
+uuid: 5cc47721-5d98-4633-a864-748cc97d059a
 langcode: fr
 status: true
 dependencies: {  }
 _core:
-  default_config_hash: vaJGqfIaPvzz6PaFSoSw7KbhDXnpq2BHStr--jVZeyY
+  default_config_hash: fCdLwU7_TvP2v3027Kue4K8q7WNPs0u9z4gA8MkV5_U
 id: d7_node_ressource
 class: null
 field_plugin_method: null
@@ -109,4 +109,4 @@ migration_dependencies:
   required:
     - d7_allpublicfiles
     - d7_users
-    - d7_taxonomy_term_type_theme
+    - d7_taxonomy_term_type_doc

+ 1 - 1
config/sync/migrate_plus.migration.d7_node_static.yml

@@ -1,4 +1,4 @@
-uuid: 025b0179-b925-43c1-8b0e-e7826b540622
+uuid: 022db3b4-b28b-4ca0-afc9-bb9b2a1547a5
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration.d7_node_theme.yml

@@ -1,4 +1,4 @@
-uuid: d5376a3b-4a58-4162-8d64-71b37e41e8b1
+uuid: cbfc7e24-8c0d-4fee-9899-c4274ca165c3
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration.d7_taxonomy_term_type_doc.yml

@@ -1,4 +1,4 @@
-uuid: d72d270f-6032-4795-a0ea-cbec93e6e524
+uuid: 28aa4b09-685d-4268-aacc-7db0ac919b95
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration.d7_taxonomy_term_type_theme.yml

@@ -1,4 +1,4 @@
-uuid: a8817166-4585-4e4d-88c1-3179e9fea37e
+uuid: 928d9be5-ae4f-4460-8a6d-400ad5a1c54e
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration.d7_taxonomy_term_ville.yml

@@ -1,4 +1,4 @@
-uuid: 4a99b969-bf9d-41ad-b3cc-4268a57862e4
+uuid: 43e1ab43-efa4-4544-90c5-2ecd7995ede9
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration.d7_users.yml

@@ -1,4 +1,4 @@
-uuid: a0eb7934-fbb3-41d1-8963-1bbffa8b1428
+uuid: faecdc1e-391b-4923-9973-789cab7f3610
 langcode: fr
 status: true
 dependencies: {  }

+ 1 - 1
config/sync/migrate_plus.migration_group.popsu.yml

@@ -1,4 +1,4 @@
-uuid: e38bc46e-5cf1-4397-9f18-b70648397aa8
+uuid: 3c7e2d93-56a7-479e-9e9a-74578d456724
 langcode: fr
 status: true
 dependencies:

+ 131 - 0
web/modules/custom/popsu_migrate/config/install/migrate_plus.migration.d7_node_evenement.yml

@@ -0,0 +1,131 @@
+id: d7_node_evenement
+label: Node evenement
+migration_group: popsu
+audit: true
+migration_tags:
+  - Drupal 7
+  - Content
+  - Popsu
+
+source:
+  plugin: d7_node_evenement
+  batch_size: 500
+  # high_water_property:
+  #   name: changed
+  #   alias: n
+
+destination:
+  plugin: entity:node
+
+process:
+  # nid: nid
+  type:
+    plugin: default_value
+    default_value: evenement
+  created: created
+  changed: changed
+
+  uid:
+    plugin: default_value
+    default_value: 34
+
+  title: title
+
+  field_programme:
+    plugin: sub_process
+    source: field_programme
+    process:
+      target_id:
+        plugin: migration_lookup
+        migration: d7_node_programme
+        source: nid
+        no_stub: true
+  
+  # field_theme:
+  #   plugin: migration_lookup
+  #   migration: d7_node_theme
+  #   source: field_theme
+  #   no_stub: true
+  #
+  # field_projet:
+  #   plugin: migration_lookup
+  #   migration: d7_node_projet
+  #   source: field_projet
+  #   no_stub: true
+  #
+  # field_poid: field_poids
+  #
+  # field_type_de_ressource:
+  #   plugin: migration_lookup
+  #   migration: d7_taxonomy_term_type_doc
+  #   source: field_popsu_doc_type
+  #   no_stub: true
+  #
+  # field_sous_titre:
+  #   plugin: sub_process
+  #   source: field_popsu_publication_soustitr
+  #   process:
+  #     value: value
+  #     # summary: summary
+  #     # format:
+  #     #   plugin: default_value
+  #     #   default_value: wysiwyg
+  #
+  # field_edition:
+  #   plugin: sub_process
+  #   source: field_popsu_doc_source
+  #   process:
+  #     value: value
+  #     summary: summary
+  #     format:
+  #       plugin: default_value
+  #       default_value: wysiwyg
+  #
+  # body:
+  #   plugin: sub_process
+  #   source: body
+  #   process:
+  #     value: value
+  #     summary: summary
+  #     format:
+  #       plugin: default_value
+  #       default_value: wysiwyg
+  #
+  #
+  # field_image:
+  #   plugin: sub_process
+  #   source: field_popsu_publication_cover
+  #   process:
+  #     target_id:
+  #       plugin: migration_lookup
+  #       migration: d7_allpublicfiles
+  #       source: fid
+  #       no_stub: true
+  #     alt: alt
+  #     title: title
+  #
+  # field_fichier:
+  #   plugin: sub_process
+  #   source: field_popsu_doc_files
+  #   process:
+  #     target_id:
+  #       plugin: migration_lookup
+  #       migration: d7_allpublicfiles
+  #       source: fid
+  #       no_stub: true
+  #     display: display
+  #     description: description
+  #
+  # field_ressources_liees:
+  #   plugin: migration_lookup
+  #   migration: d7_node_ressource
+  #   source: field_projet
+  #   no_stub: true
+
+  field_memo: field_memo
+
+migration_dependencies:
+  required:
+    - d7_allpublicfiles
+    - d7_users
+    - d7_taxonomy_term_type_theme

+ 254 - 0
web/modules/custom/popsu_migrate/src/Plugin/migrate/source/D7NodeEvenement.php

@@ -0,0 +1,254 @@
+<?php
+namespace Drupal\popsu_migrate\Plugin\migrate\source;
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
+use Drupal\Core\Database\Query\SelectInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Extension\ModuleHandler;
+use Drupal\Core\State\StateInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
+use Drush\Drush;
+use Drupal\paragraphs\Entity\Paragraph;
+
+// use Drupal\popsu_migrate\Plugin\migrate\source\D7Programme;
+
+/**
+ * Drupal 7 node source from database.
+ *
+ * @MigrateSource(
+ *   id = "d7_node_evenement",
+ *   source_module = "node"
+ * )
+ */
+class D7NodeEvenement extends FieldableEntity {
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * The logger channel.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelInterface
+   */
+  protected $logger;
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityTypeManagerInterface $entity_manager, ModuleHandlerInterface $module_handler,LoggerChannelFactoryInterface $loggerFactory) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
+    $this->moduleHandler = $module_handler;
+    $this->logger = $loggerFactory->get('popsu_migration');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('state'),
+      $container->get('entity_type.manager'),
+      $container->get('module_handler'),
+      $container->get('logger.factory')
+    );
+  }
+
+  /**
+   * The join options between the node and the node_revisions table.
+   */
+  const JOIN = 'n.vid = nr.vid';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    // Select node in its last revision.
+    $query = $this->select('node_revision', 'nr')
+      ->fields('n', [
+        'nid',
+        'type',
+        'uid',
+        'language',
+        'status',
+        'created',
+        'changed',
+      ])
+      ->fields('nr', [
+        'vid',
+        'title',
+        'log',
+        'timestamp',
+      ])
+      ->orderBy('type', 'ASC');
+
+    $query->addField('n', 'uid', 'node_uid');
+    $query->addField('nr', 'uid', 'revision_uid');
+    $query->innerJoin('node', 'n', static::JOIN);
+
+    $query->condition('n.type', ['evenement', 'popsu_colloque'], 'IN');
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $nid = $row->getSourceProperty('nid');
+    $vid = $row->getSourceProperty('vid');
+    $type = $row->getSourceProperty('type');
+    $title = $row->getSourceProperty('title');
+    Drush::output()->writeln('- - - - ' . $title . ' ('.$nid.')'. ' ['.$type.']' . '- - - - ');
+
+    $memo = '';
+    $memo .= "#migration : old nid = ".$nid."\n";
+    $memo .= "#migration : old content type = ".$type."\n";
+
+    // Get Field API field values.
+    foreach ($this->getFields('node', $type) as $field_name => $field) {
+      $field_values = $this->getFieldValues('node', $field_name, $nid, $vid, NULL);
+      $row->setSourceProperty($field_name, $field_values);
+      switch ($field_name) {
+        case 'field_popsu_publication_body':
+        case 'field_popsu_doc_body':
+          $row->setSourceProperty("body", $field_values);
+          break;
+      }
+    }
+
+    if ($type === "popsu_colloque") {
+      // programme
+      $field_programme = $row->getSourceProperty('field_popsu_colloque_popsu');
+
+    } else { // evenement
+      $field_popsu_doc_parent = $row->getSourceProperty('field_popsu_doc_parent');
+      // get the node_type of doc_parent
+      $node = $this->select('node', 'n')
+        ->fields('n', ['nid','vid','type'])
+        ->condition('n.nid', $field_popsu_doc_parent[0]['nid'])
+        ->execute()->fetchAll()[0];
+      // foreach ($this->getFields('node', $node['type']) as $field_name => $field) {
+      //   $field_values = $this->getFieldValues('node', $field_name, $node['nid'], $node['vid'], NULL);
+      //   $node[$field_name] = $field_values;
+      // }
+      switch ($node['type']) {
+        // programme
+        case 'popsu_special': // NO ITEM
+        case 'popsu_page': //NO ITEM
+          Drush::output()->writeln(dump($node));
+          break;
+        // // projet
+        // // case 'popsu_page_neutral':  // no ref in migration
+        // // case 'popsu_projet_europe': // merged with popsu_ville_europe
+        // case 'popsu_ville_europe':
+        // case 'popsu_ville':
+        // case 'popsu_projet':
+        //   // Drush::output()->writeln(dump($node));
+        //   $node['target_id'] = $node['nid'];
+        //   $row->setSourceProperty('field_projet', $node);
+        //   break;
+        // // Theme
+        // case 'popsu_theme_europe':
+        // case 'popsu_theme_trans':
+        // case 'popsu_theme_local':
+        //   $node['target_id'] = $node['nid'];
+        //   $field_theme = $node;
+        //   break;
+        // // publication
+        // case 'popsu_publication':
+        //   $node['target_id'] = $node['nid'];
+        //   $row->setSourceProperty('field_ressources_liees', $node);
+        //   break;
+      }
+    }
+
+    if ($field_programme) {
+      // Drush::output()->writeln(dump($field_programme));
+      $tid = $field_programme[0]['tid'];
+      // get the node (popsu_special) from the tid for migration_lookup
+      $query = $this->select('node_revision', 'nr')
+        ->fields('n', ['nid','type'])
+        ->fields('nr', ['vid'])
+        ->orderBy('changed');
+      $query->innerJoin('node', 'n', static::JOIN);
+      $query->condition('n.type', 'popsu_special');
+      // field_popsu_special_typetaxo
+      // filter to get the right special type (popsu)
+      $query->leftJoin('field_revision_field_popsu_special_typetaxo', 'ff', 'ff.revision_id = n.vid');
+      $query->fields('ff', ['field_popsu_special_typetaxo_tid']);
+      $query->condition('ff.field_popsu_special_typetaxo_tid', 31);
+      // field_popsu_special_popsu
+      // filter to get right popsu (popsu 1, popsu europe, etc)
+      $query->leftJoin('field_revision_field_popsu_special_popsu', 'sp', 'sp.revision_id = n.vid');
+      $query->fields('sp', ['field_popsu_special_popsu_tid']);
+      $query->condition('sp.field_popsu_special_popsu_tid', $tid);
+
+      $prog = $query->execute()->fetchAll();
+
+      // Drush::output()->writeln(dump($prog));
+      $row->setSourceProperty('field_programme', array(array('nid'=>$prog[0]['nid'])));
+    }
+
+    if (!empty($field_theme)) {
+      // Drush::output()->writeln(dump($field_theme));
+      $row->setSourceProperty('field_theme', $field_theme);
+    }
+
+    // record migration errors in field_memo
+    if(isset($memo)){
+      $field_memo = array(
+        array(
+          'value' => $memo
+        )
+      );
+      $row->setSourceProperty('field_memo', $field_memo);
+    }
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    $fields = [
+      'nid' => $this->t('Node ID'),
+      'type' => $this->t('Type'),
+      'title' => $this->t('Title'),
+      'node_uid' => $this->t('Node authored by (uid)'),
+      'revision_uid' => $this->t('Revision authored by (uid)'),
+      'created' => $this->t('Created timestamp'),
+      'changed' => $this->t('Modified timestamp'),
+      'status' => $this->t('Published'),
+      'promote' => $this->t('Promoted to front page'),
+      'sticky' => $this->t('Sticky at top of lists'),
+      'revision' => $this->t('Create new revision'),
+      'language' => $this->t('Language (fr, en, ...)'),
+      'tnid' => $this->t('The translation set id for this node'),
+      'timestamp' => $this->t('The timestamp the latest revision of this node was created.'),
+    ];
+    return $fields;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['nid']['type'] = 'integer';
+    $ids['nid']['alias'] = 'n';
+    return $ids;
+  }
+
+}