moduleHandler = $module_handler; } /** * {@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.manager'), $container->get('module_handler') ); } /** * 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', 'comment', 'promote', 'sticky', 'tnid', 'translate', ]) ->fields('nr', [ 'vid', 'title', 'log', 'timestamp', ]) ->orderBy('changed'); $query->addField('n', 'uid', 'node_uid'); $query->addField('nr', 'uid', 'revision_uid'); $query->innerJoin('node', 'n', static::JOIN); // If the content_translation module is enabled, get the source langcode // to fill the content_translation_source field. if ($this->moduleHandler->moduleExists('content_translation')) { $query->leftJoin('node', 'nt', 'n.tnid = nt.nid'); $query->addField('nt', 'language', 'source_langcode'); } $this->handleTranslations($query); if (isset($this->configuration['node_type'])) { $query->condition('n.type', $this->configuration['node_type']); } 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_print('-- '.$nid."\t".$title); // If this entity was translated using Entity Translation, we need to get // its source language to get the field values in the right language. // The translations will be migrated by the d7_node_entity_translation // migration. $entity_translatable = $this->isEntityTranslatable('node') && (int) $this->variableGet('language_content_type_' . $type, 0) === 4; $language = $entity_translatable ? $this->getEntityTranslationSourceLanguage('node', $nid) : $row->getSourceProperty('language'); // Get Field API field values. foreach ($this->getFields('node', $type) as $field_name => $field) { // Ensure we're using the right language if the entity and the field are // translatable. $field_language = $entity_translatable && $field['translatable'] ? $language : NULL; $row->setSourceProperty($field_name, $this->getFieldValues('node', $field_name, $nid, $vid, $field_language)); } // linked materials $linked_materials = []; if(!empty($row->getSourceProperty('field_materiau_ref'))){ // print_r($row->getSourceProperty('field_materiau_ref')); foreach ($row->getSourceProperty('field_materiau_ref') as $key => $value) { $linked_materials[] = $value['target_id']; } // drush_print("\n".'-- '.$nid."\t".$title); // drush_print(print_r($linked_materials, true)); } $row->setSourceProperty('linked_materials', $linked_materials); //linked breves $linked_articles = []; if(!empty($row->getSourceProperty('field_breve_ref'))){ foreach ($row->getSourceProperty('field_breve_ref') as $key => $value) { $linked_articles[] = $value['target_id']; } } $row->setSourceProperty('linked_articles', $linked_articles); // print_r($row->getSourceProperty('field_identifiant')); // print_r($row->getSourceProperty('field_reference_materio')); // Make sure we always have a translation set. if ($row->getSourceProperty('tnid') == 0) { $row->setSourceProperty('tnid', $row->getSourceProperty('nid')); } // 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')) { $title_field = $row->getSourceProperty('title_field'); if (isset($title_field[0]['value'])) { $row->setSourceProperty('title', $title_field[0]['value']); } } //location (samples) $locations = []; if(!empty($row->getSourceProperty('field_location'))){ foreach ($row->getSourceProperty('field_location') as $key => $value) { if ($value['location'] == 'no sample') { $memo .= "#nosample (".$value["showroom_tid"].")\n"; }else{ $locations[] = $value; } } } $row->setSourceProperty('field_location', $locations); // reference if(!empty($row->getSourceProperty('field_reference_materio'))){ $ref = $row->getSourceProperty('field_reference_materio')[0]['value']; $ref = str_replace('-','',$ref); $row->setSourceProperty('field_reference_materio', [["value"=>$ref]]); } // workflow $query = $this->select('workflow_node', 'wn'); $query->fields('wn', ['sid']); $query->condition('wn.nid', $nid); $results = $query->execute()->fetchField(); if(!$results){ $results = 2; // add bad workflow to memo field $memo .= "#migration : invalid workflow\n"; drush_print('WARNING: no workflow'); } $row->setSourceProperty('workflow', $results); // drush_print('workflow: '.$results); // record migration errors in field_memo if(isset($memo)){ $field_memo = $row->getSourceProperty('field_memo'); $field_memo[0]['value'] .= "\n".$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; } /** * Adapt our query for translations. * * @param \Drupal\Core\Database\Query\SelectInterface $query * The generated query. */ protected function handleTranslations(SelectInterface $query) { // Check whether or not we want translations. if (empty($this->configuration['translations'])) { // No translations: Yield untranslated nodes, or default translations. $query->where('n.tnid = 0 OR n.tnid = n.nid'); } else { // Translations: Yield only non-default translations. $query->where('n.tnid <> 0 AND n.tnid <> n.nid'); } } }