Files
2020-09-23 15:50:29 +02:00

233 lines
8.1 KiB
PHP

<?php
/**
* PerfGroupeNodeMigration
*
*/
class PerfLDCNodeMigration extends PerfApiMigration {
public function __construct() {
$this->description = t('Migrate Lieu Date Contexte (effectuation) Class');
parent::__construct();
$fields = array(
'language' => t('Lanuguage'),
'ID' => t('id'),
'title' => t('title'),
'structure_organisatrice' => t('Structure organisatrice'), // STRUCTURE_ORGANISATRICE
'topologie' => t('Topologie'),
'date_de_debut' => t('date debut'),
'date_de_fin' => t('date fin'),
'duree' => t('duree'), //'UNITE_DUREE' => t('UNITE_DUREE'),
'contexte' => t('contexte'), // CONTEXTE- TRADUCTION_CONTEXTE
'lieu' => t('lieu'),
'adresse' => t('adresse'),
'precision'=> t('precision'),
'ville' => t('ville'),
'pays' => t('pays'),
'executant'=> t('executant'),
'concepteur'=> t('concepteur'),
'organisateur'=> t('organisateur'),
'notes' => t('notes'),
);
// The source ID here is the one retrieved from the XML listing file, and
// used to identify the specific item's file
$this->map = new MigrateSQLMap($this->machineName,
array(
'ID' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
)
),
MigrateDestinationNode::getKeySchema()
);
// This can also be an URL instead of a file path.
$xml_folder = DRUPAL_ROOT . '/' . drupal_get_path('module', 'PerfMigrate') . '/xml/';
$items_url = $xml_folder . 'baseperf-ldcs.xml';
// We use the MigrateSourceMultiItems class for any source where we obtain the list
// of IDs to process and the data for each item from the same file. Typically the data
// for an item is not contained in a single line within the source file. Examples include
// multiple items defined in a single xml file or a single json file where in both cases
// the id is part of the item.
$item_xpath = '/ROOT/ITEMS/LIEU_DATE_CONTEXTE'; // relative to document
$item_ID_xpath = '@ID'; // relative to item_xpath and gets assembled
// into full path /producers/producer/sourceid
$items_class = new MigrateItemsXML($items_url, $item_xpath, $item_ID_xpath); //
$this->source = new MigrateSourceMultiItems($items_class, $fields);
$this->destination = new MigrateDestinationNode('effectuation');
$this->addFieldMapping('language')->defaultValue('fr');
$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('title', 'title');
# temps
$this->addFieldMapping('field_date_de_debut', 'date_de_debut');
$this->addFieldMapping('field_date_de_fin', 'date_de_fin');
$this->addFieldMapping('field_duree', 'duree');
# lieu
$this->addFieldMapping('field_lieu', 'lieu')
->xpath('@NOM_LIEU');
$this->addFieldMapping('field_lieu:create_term')->defaultValue(TRUE);
# topologie
$this->addFieldMapping('field_topologie', 'topologie')
->xpath('@TYPE');
$this->addFieldMapping('field_topologie:create_term')->defaultValue(TRUE);
# structure_organisatrice
$this->addFieldMapping('field_structure', 'structure_organisatrice');
$this->addFieldMapping('field_structure:create_term')->defaultValue(TRUE);
# contexte
$this->addFieldMapping('field_contexte', 'contexte');
$this->addFieldMapping('field_contexte:format')->defaultValue('filtred_html');
$this->addFieldMapping('field_contexte:language', 'language');
# personnes
$this->addFieldMapping('field_concepteur', 'concepteur');
$this->addFieldMapping('field_concepteur:create_term')->defaultValue(TRUE);
$this->addFieldMapping('field_executant', 'executant');
$this->addFieldMapping('field_executant:create_term')->defaultValue(TRUE);
$this->addFieldMapping('field_organisateur', 'organisateur');
$this->addFieldMapping('field_organisateur:create_term')->defaultValue(TRUE);
# note
$this->addFieldMapping('field_note', 'notes')
->xpath('@NOTES');
# addresse
// $this->addFieldMapping('field_precision', 'precision')
// ->xpath('@PRECISION');
// $this->addFieldMapping('field_precision:format')->defaultValue('filtred_html');
// $this->addFieldMapping('field_precision:language')->defaultValue('fr');
$arguments = array(
'thoroughfare' => array('source_field' => 'adresse'),
'premise' => array('source_field' => 'precision'),
// 'sub_premise' => array('source_field' => 'sub_premise'),
'locality' => array('source_field' => 'ville'),
// 'postal_code' => array('source_field' => 'zip'),
);
$this->addFieldMapping('field_address', 'pays')
->arguments($arguments);
$this->addFieldMapping(NULL, 'adresse');
$this->addFieldMapping(NULL, 'precision');
$this->addFieldMapping(NULL, 'ville');
$this->addUnmigratedDestinations(array('revision_uid', 'created', 'changed', 'revision', 'log', 'tnid','comment', 'uid','path', 'pathauto',
'field_date_de_debut:format', 'field_date_de_debut:language', 'field_date_de_fin:format', 'field_date_de_fin:language',
'field_dure:format', 'field_dure:language',
'field_lieu:source_type', 'field_topologie:source_type', 'field_structure:source_type',
'field_concepteur:source_type','field_executant:source_type','field_organisateur:source_type',
'field_note:format', "field_note:language",
));
}
public function prepareRow($row){
// dsm($row , '--- $row ---');
$xml = $row->xml;
$row->language = array('fr', 'en');
$title = $this->getAttribute($xml, 'TITLE');
if(strlen($title) > 255)
$title = substr($title, 0, 250) . '...';
$row->title = $title;
# temps
$row->date_de_debut = $this->getDate($xml, 'DEBUT');
$row->date_de_fin = $this->getDate($xml, 'FIN');
$row->duree = $this->getAttribute($xml, 'DUREE') .' '. $this->getAttribute($xml, 'UNITE_DUREE');
# espace
$row->lieu = $this->getAttribute($xml, 'NOM_LIEU');
# structure
$structure = array();
foreach ($xml->xpath('STRUCTURE_ORGANISATRICE') as $xml_strucrture)
$structure[] = $this->getAttribute($xml_strucrture, 'NOM');
$row->structure_organisatrice = $structure;
# contexte
$row->contexte = array(
$this->getAttribute($xml, "CONTEXTE"),
$this->getAttribute($xml, "TRADUCTION_CONTEXTE"),
);
# personnes
$concepteurs = array();
foreach ($xml->xpath('PERSONNE[@CONCEPTEUR="oui"]') as $xml_concepteur)
$concepteurs[] = $this->getPersonne($xml_concepteur);
$row->concepteur = $concepteurs;
$executants = array();
foreach ($xml->xpath('PERSONNE[@EXECUTANT="oui"]') as $xml_executant)
$executants[] = $this->getPersonne($xml_executant);
$row->executant = $executants;
$organisateurs = array();
foreach ($xml->xpath('PERSONNE[@ORGANISATEUR="oui"]') as $xml_organisateur)
$organisateurs[] = $this->getPersonne($xml_organisateur);
$row->organisateur = $organisateurs;
#address
$row->adresse = $this->getAttribute($xml, 'ADRESSE');
$row->precision = $this->getAttribute($xml, 'PRECISION');
$row->ville = $this->getAttribute($xml, 'VILLE');
$pays = $this->getAttribute($xml, 'PAYS');
if($pays == 'France' || $pays == 'france' || $pays = ''){
$pays = 'FR';
}else if($pays == 'Allemagne' || $pays == 'RFA'){
$pays = 'DE';
}else if($pays == 'Monaco' || $pays == "Principauté de Monaco"){
$pays = 'MC';
}else if($pays == 'Canada'){
$pays = 'CA';
}else if($pays == 'Italie'){
$pays = 'IT';
}else if($pays == 'USA'){
$pays = 'US';
}else{
// dsm($pays, '$pays');
$pays = '';
}
$row->pays = $pays;
}
public function prepare($node, stdClass $row) {
$node->name = 'migration';
$node->workflow = 2;
$node->language = 'fr';
}
}