| 
					
				 | 
			
			
				@@ -0,0 +1,220 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace Drupal\edlp_migrate\Plugin\migrate\source; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use Drupal\migrate\Row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use Drupal\node\Plugin\migrate\source\d6\Node as D6Node; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Source plugin for edlp corpus migration. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @MigrateSource( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   id = "d6_edlp_pages" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class D6EdlpPages extends D6Node { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * {@inheritdoc} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function query() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query = $this->select('node_revisions', 'nr'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->innerJoin('node', 'n', static::JOIN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->handleTranslations($query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->fields('n', [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'nid', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'type', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'language', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'status', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'created', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'changed', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'comment', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'promote', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'moderate', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'sticky', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'tnid', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'translate', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ->fields('nr', [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'title', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'body', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'teaser', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'log', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'timestamp', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'format', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'vid', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->addField('n', 'uid', 'node_uid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->addField('nr', 'uid', 'revision_uid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 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'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (isset($this->configuration['node_type'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $query->condition('n.type', $this->configuration['node_type']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return $query; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * {@inheritdoc} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function fields() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $fields = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'nid' => $this->t('Node ID'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'type' => $this->t('Type'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'title' => $this->t('Title'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'body' => $this->t('Body'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'format' => $this->t('Format'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'teaser' => $this->t('Teaser'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      '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 prepareRow(Row $row) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    drush_print(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    drush_print('- - - - - - - - - - - - - - - - - - - - - - - -'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    drush_print($row->getSourceProperty('title')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // format = 0 can happen when the body field is hidden. Set the format to 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // to avoid migration map issues (since the body field isn't used anyway). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ($row->getSourceProperty('format') === '0') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $row->setSourceProperty('format', $this->filterDefaultFormat); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ($this->moduleExists('content') && $this->getModuleSchemaVersion('content') >= 6001) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      foreach ($this->getFieldValues($row) as $field => $values) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $row->setSourceProperty($field, $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row_nid = $row->getSourceProperty('nid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Make sure we always have a translation set. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ($row->getSourceProperty('tnid') == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $row->setSourceProperty('tnid', $row_nid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // get the entree values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query = $this->select('term_node', 'tn'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $query->fields('cte', ['field_entree_value']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->condition('tn.nid', $row_nid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->join('term_data', 'td', 'td.tid = tn.tid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->condition('td.vid', 2); // vid of voc entrees 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->addField('tn', 'tid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->distinct(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $results = $query->execute()->fetchAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $entrees = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($results as $key => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $entrees[] = array($value['tid']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row->setSourceProperty('entrees', $entrees); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Page type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query = $this->select('term_node', 'tn'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->condition('tn.nid', $row_nid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->join('term_data', 'td', 'td.tid = tn.tid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->condition('td.vid', 1); // vid of voc page type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->addField('tn', 'tid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->distinct(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $results = $query->execute()->fetchAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $pagetype = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($results as $key => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $pagetype[] = array($value['tid']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row->setSourceProperty('page_type', $pagetype); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // son 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // TODO: pour les pieces sonores les fichiers ne sont pas enregistrés dans le champ car trop lourd. Ils sont sous forme de lien dans le corps du texte. Comment normaliser ça ?? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $sons = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // foreach ($row->getSourceProperty('field_mp3') as $key => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   $sons[] = array($value['fid']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $row->setSourceProperty('sons_fid', $sons); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $body = $row->getSourceProperty('body'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    preg_match_all('/href="(\/?sons\/[^"]+)"/', $body, $links); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(isset($links[1][0])){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      drush_print('links : ', 0, null, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      drush_print_r($links); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $path = preg_replace('/^\//', '', $links[1][0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // find the source path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $query = $this->select('url_alias', 'ua'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $query->condition('dst', $path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $query->addField('ua', 'src'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $src = $query->execute()->fetchField(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      drush_print('src : ', 0, null, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      drush_print_r($src); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if($src){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // get the nid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $nid = str_replace('node/', '', $src); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        drush_print('nid : ', 0, null, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        drush_print_r($nid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // find the new nid of the enregistrement (corpus item) from migration map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // get the d6_edlp_migration 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // drush_print_r($this->migration->getIdMap()->lookupDestinationId(array($nid))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $new_nid = Database::getConnection('default', 'default') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ->select('migrate_map_d6_edlp_sons', 'm') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ->fields('m', ['destid1']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ->condition('sourceid1', $nid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ->execute() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ->fetchField(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // drush_print('new_nid : ', 0, null, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // drush_print_r($new_nid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if($new_nid){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $body = str_replace($path, "node/".$new_nid, $body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        drush_print('no source for path : ', 0, null, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        drush_print_r($path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row->setSourceProperty('body', $body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // visuel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $visuels = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($row->getSourceProperty('field_visuel') as $key => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $visuels[] = array($value['fid']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row->setSourceProperty('visuels_fid', $visuels); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // get the workflow status 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query = $this->select('workflow_node', 'wn'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->fields('wn', ['sid']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $query->condition('wn.nid', $row_nid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $results = $query->execute()->fetchField(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // drush_print('workflow query results : ', 0, null, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // drush_print_r($results); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row->setSourceProperty('workflow', $results); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // fichiers attachés ?? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $row = parent::prepareRow($row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return $row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |