diff --git a/config/sync/migrate_plus.migration.d7_allpublicfiles.yml b/config/sync/migrate_plus.migration.d7_allpublicfiles.yml index b3447dea..8eb51e8f 100644 --- a/config/sync/migrate_plus.migration.d7_allpublicfiles.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_node_evenement.yml b/config/sync/migrate_plus.migration.d7_node_evenement.yml new file mode 100644 index 00000000..14f6e3c2 --- /dev/null +++ b/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 diff --git a/config/sync/migrate_plus.migration.d7_node_programme.yml b/config/sync/migrate_plus.migration.d7_node_programme.yml index 71b2dafe..42e2b68b 100644 --- a/config/sync/migrate_plus.migration.d7_node_programme.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_node_projet.yml b/config/sync/migrate_plus.migration.d7_node_projet.yml index 01cef7f0..afea7045 100644 --- a/config/sync/migrate_plus.migration.d7_node_projet.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_node_ressource.yml b/config/sync/migrate_plus.migration.d7_node_ressource.yml index becbb1d1..ffed160a 100644 --- a/config/sync/migrate_plus.migration.d7_node_ressource.yml +++ b/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 diff --git a/config/sync/migrate_plus.migration.d7_node_static.yml b/config/sync/migrate_plus.migration.d7_node_static.yml index d2af607b..11a77cbf 100644 --- a/config/sync/migrate_plus.migration.d7_node_static.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_node_theme.yml b/config/sync/migrate_plus.migration.d7_node_theme.yml index 4cdfbe2c..bdb64fa7 100644 --- a/config/sync/migrate_plus.migration.d7_node_theme.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_taxonomy_term_type_doc.yml b/config/sync/migrate_plus.migration.d7_taxonomy_term_type_doc.yml index 1c4b1806..06d59806 100644 --- a/config/sync/migrate_plus.migration.d7_taxonomy_term_type_doc.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_taxonomy_term_type_theme.yml b/config/sync/migrate_plus.migration.d7_taxonomy_term_type_theme.yml index f17b0ff3..aefc0ef0 100644 --- a/config/sync/migrate_plus.migration.d7_taxonomy_term_type_theme.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_taxonomy_term_ville.yml b/config/sync/migrate_plus.migration.d7_taxonomy_term_ville.yml index 30fb88e3..97e69aeb 100644 --- a/config/sync/migrate_plus.migration.d7_taxonomy_term_ville.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration.d7_users.yml b/config/sync/migrate_plus.migration.d7_users.yml index 95e3cd3a..3854cfd6 100644 --- a/config/sync/migrate_plus.migration.d7_users.yml +++ b/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: { } diff --git a/config/sync/migrate_plus.migration_group.popsu.yml b/config/sync/migrate_plus.migration_group.popsu.yml index 1b2716a6..e166f310 100644 --- a/config/sync/migrate_plus.migration_group.popsu.yml +++ b/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: diff --git a/web/modules/custom/popsu_migrate/config/install/migrate_plus.migration.d7_node_evenement.yml b/web/modules/custom/popsu_migrate/config/install/migrate_plus.migration.d7_node_evenement.yml new file mode 100644 index 00000000..be39e7be --- /dev/null +++ b/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 diff --git a/web/modules/custom/popsu_migrate/src/Plugin/migrate/source/D7NodeEvenement.php b/web/modules/custom/popsu_migrate/src/Plugin/migrate/source/D7NodeEvenement.php new file mode 100644 index 00000000..450eb3e4 --- /dev/null +++ b/web/modules/custom/popsu_migrate/src/Plugin/migrate/source/D7NodeEvenement.php @@ -0,0 +1,254 @@ +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; + } + +}