| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | <?php/** * MaterioMateriauNodeMigration *  */class MaterioMateriauNodeMigration extends MaterioBasicMigration {  public function __construct() {    parent::__construct();    $this->description = t('Migrate Materio Materiau nodes');		// provide better description for source fields		// and add new field source not from sql    $source_fields = array(      'id_product' => t('Materiau id from source'),			'company_fab'=>t('company_fab'),			'company_distrib'=>t('company_distrib'),			'title'=>t('title'),			'name'=> t('en-fr name implemented on prepare'),			'description'=> t('en-fr description implemented on prepare'),			'nature'=> t('en-fr nature implemented on prepare'),			'language'=> t('en-fr langauge description, used in prepare'),			'family' => '',			'localisation' => '',			'identifiant' => '',    );				$query = db_select(MIG_MAT_SRC_DB .'.product_id', 'pid');			$query->join(MIG_MAT_SRC_DB .'.product_industrial', 'pind', 'pind.id_product = pid.id_product');				$query				->fields('pid', array('id_product', 'id_materio', 'status', 'memo', 'source', 'date_creation', 'date_modif'))				->fields('pind', array('id_industrial', 'quarity'));				$query->addExpression('GROUP_CONCAT(DISTINCT pind.id_industrial)','list_industrial');		$query->addExpression('GROUP_CONCAT(pind.quarity)','list_quarity');				$query			->orderBy('pid.id_product', 'DESC')			->groupBy('pid.id_product');			$this->source = new MigrateSourceSQL($query, $source_fields);	  $this->destination = new MigrateDestinationNode('materiau');  	  $this->map = new MigrateSQLMap($this->machineName,	    array(	      'id_product' => array(	        'type' => 'int',	        'unsigned' => TRUE,	        'not null' => TRUE,	        'description' => 'OLD Unique Materiau ID',	        'alias' => 'pid',	      )	    ),	    MigrateDestinationNode::getKeySchema()	  );		$this->addFieldMapping('is_new')->defaultValue(TRUE);		$this->addFieldMapping('created', 'date_creation');		$this->addFieldMapping('changed', 'date_modif');		$this->addFieldMapping('status')->defaultValue(1);		$this->addFieldMapping('promote')->defaultValue(0);		$this->addFieldMapping('sticky')->defaultValue(0);		$this->addFieldMapping('language')->defaultValue('en');		$this->addFieldMapping('title', 'title');		$this->addFieldMapping('field_memo', 'memo');			$this->addFieldMapping('title_field', 'name');		$this->addFieldMapping('title_field:language', 'language');			$this->addFieldMapping('field_description', 'description');		$this->addFieldMapping('field_description:language', 'language');				$this->addFieldMapping('field_description:format')->defaultValue('filtred_html');				$this->addFieldMapping('field_nature_titre', 'nature');		$this->addFieldMapping('field_nature_titre:language', 'language');				$this->addFieldMapping('field_company_fab', 'company_fab');		$this->addFieldMapping('field_company_fab:create_term')->defaultValue(false);		$this->addFieldMapping('field_company_distrib', 'company_distrib');		$this->addFieldMapping('field_company_distrib:create_term')->defaultValue(false);			$this->addFieldMapping('pathauto')->defaultValue(1);		$this->addFieldMapping('comment')->defaultValue(0);		$this->addFieldMapping('revision')->defaultValue(0);				$this->addFieldMapping(null, 'id_industrial');		$this->addFieldMapping(null, 'quarity');			$this->addFieldMapping('field_onthologie')->defaultValue(null);				$this->addFieldMapping('field_famille', 'family');		$this->addFieldMapping('field_localisation', 'localisation');		$this->addFieldMapping('field_identifiant', 'identifiant');	}		public function prepareRow($cr){		// dsm($cr);				# get product infos FR		$infos_fr = db_select(MIG_MAT_SRC_DB .'.product_info', 'pif_fr')			->condition('pif_fr.id_locale', 2)			->condition('pif_fr.id_product', $cr->id_product)			->fields('pif_fr' , array('name', 'nature', 'description', 'technical', 'keywords'))//, 'usage'			->distinct()->execute();		foreach ($infos_fr as $record)			$infos['fr'] = $record;				if($infos['fr']->technical != '')			$infos['fr']->description .= "<br />technical : ".$infos['fr']->technical; // . "<br />usage".$infos['fr']->usage		# get product infos EN		$infos_en = db_select(MIG_MAT_SRC_DB .'.product_info', 'pif_en')			->condition('pif_en.id_locale', 1)			->condition('pif_en.id_product', $cr->id_product)			->fields('pif_en' , array('name', 'nature', 'description', 'technical', 'keywords'))//, 'usage' , 'keywords'			->distinct()->execute();		foreach ($infos_en as $record)			$infos['en'] = $record;				if($infos['en']->technical != '')			$infos['en']->description .= "<br />technical : ".$infos['en']->technical; // . "<br />usage".$infos['en']->usage				# set product infos		$cr->title = 				$infos['fr']->name;		$cr->name = 				array($infos['en']->name, $infos['fr']->name);		$cr->description = 	array($infos['en']->description, $infos['fr']->description);		$cr->nature = 			array($infos['en']->nature, $infos['fr']->nature);		$cr->language = 		array('en', 'fr');		# record keywords on memo		$cr->memo .= ($cr->memo != '' ? "\n\n" : '') . $infos['fr']->keywords;				# parse companies		// dsm($cr->list_industrial, '-- $cr->list_industrial');		// dsm($cr->list_quarity, '$cr->list_quarity');		$industrials = explode(',', $cr->list_industrial);		$quarities = explode(',', $cr->list_quarity);				$companies_fab = array();		$companies_distrib = array();				$l = count($industrials);		for ($i=0; $i < $l; $i++) { 			$result = db_select(MIG_MAT_SRC_DB .'.industrial_info', 'iif')				->fields('iif', array('id_industrial', 'company'))				->condition('iif.id_industrial', $industrials[$i])				->distinct()->execute();							foreach ($result as $record) {				// dsm($record);				$company = trim($record->company);				if(count(taxonomy_get_term_by_name($company.'-'.$record->id_industrial)))					$company .= '-'.$record->id_industrial;									if($quarities[$i] == 'M'){					$companies_fab[] = $company;				}else{					$companies_distrib[] = $company;				}			}					}		$cr->company_fab = implode(',', $companies_fab);		$cr->company_distrib = implode(',', $companies_distrib);				preg_match('/^(\w)([^-]+)-(\d+)$/', $cr->id_materio, $matches);		// dsm($matches);		$cr->family = $matches[1];		$cr->localisation = $matches[2];		$cr->identifiant = $matches[3];		return TRUE;	}			public function prepare($node, stdClass $row) {		// dsm('-- prepare --');		// dsm($node, '$node');		// dsm($row, '$row');			  $node->workflow = 4;				$node->field_identifiant['und'][0]['value'] = $row->identifiant;  }		// public function complete($node, $row) {	// 	// dsm('-- complete --');	// 	//     // Do what you need to do to 	// 	// dsm($row, '$row');	// 	// dsm($node, '$node');	// 	//   }			}
 |