public function MigrationDataImport::__construct in CRM Core 7
General initialization of a Migration object.
Overrides Migration::__construct
File
- modules/
crm_core_data_import/ includes/ controllers/ MigrationDataImport.inc, line 26 - Handler for migration process.
Class
- MigrationDataImport
- @file Handler for migration process.
Code
public function __construct(array $arguments) {
$this->arguments = $arguments;
parent::__construct($arguments);
$importer = $this
->getImporter();
$entity_type = $this
->getEntityType();
$entity_bundle = $this
->getEntityBundle();
$delta = $this
->getDelta();
// Set migrate source settings.
$this->source = $importer
->migrateSource($entity_type, $entity_bundle);
// Set migrate destination settings.
$this->destination = $importer
->migrateDestination($entity_type, $entity_bundle, $delta);
// Key schema.
$this->map = new CRMCoreMigrateSQLMap($this->machineName, $importer
->migrateSourceMap($entity_type, $entity_bundle, $delta), $importer
->migrateDestinationMap($entity_type, $entity_bundle, $delta), 'default', array(
'importer' => $importer,
'entity_type' => $entity_type,
'entity_bundle' => $entity_bundle,
'delta' => $delta,
));
// Get linked data imports.
// If found, we will populate MigrateFieldMapping::sourceMigration later
// to automatically pull already imported values.
$linked_imports = $importer
->getLinkedImports();
$source_migration = array();
if ($linked_imports) {
foreach ($linked_imports as $id => $field) {
$linked_importer = crm_core_data_import_load_importer($id);
$candidates = $linked_importer
->getMigrationInstances();
foreach ($candidates as $m) {
/** @var Migration $m */
$source_keys = array_keys($m
->getMap()
->getSourceKey());
if ($source_keys[0] == $field['destination']) {
$source_migration[$field['destination']] = $m
->getMachineName();
}
}
}
}
// Set mapping according to settings.
$destination = $importer
->getDestinationsForEntity($this
->getEntityType(), $this
->getEntityBundle(), $this
->getDelta());
$mapping = $importer
->getMappingSettings();
if ($destination->entityType == $entity_type && $destination->bundle == $entity_bundle && !empty($mapping[$destination->controller . ':' . $destination->bundle . ':' . $delta])) {
$this->fields_mapping = $mapping[$destination->controller . ':' . $destination->bundle . ':' . $delta];
switch ($destination->entityType) {
case 'user':
// Separate handling for user entity.
foreach ($this->fields_mapping as $key => $field) {
if ($key !== 'primary' && !$this
->skipCollectionField($field) && !$this
->skipReferencesField($field)) {
if ($field['destination_field'] == 'name') {
$single_mapping = $this
->addFieldMapping($field['destination_field'], $field['source_field'])
->dedupe('users', 'name');
}
elseif ($field['destination_field'] == 'mail') {
$single_mapping = $this
->addFieldMapping($field['destination_field'], $field['source_field'])
->dedupe('users', 'mail');
}
else {
$single_mapping = $this
->addRegularFieldMapping($field);
}
// Add sourceMigration from linked import(s) if necessary
if (!empty($source_migration[$field['source_field']])) {
$single_mapping
->sourceMigration($source_migration[$field['source_field']]);
}
}
}
// Add status if not added in the configuration form.
if (!array_key_exists('status', $this->codedFieldMappings)) {
$this
->addFieldMapping('status')
->defaultValue(TRUE);
}
break;
case 'crm_core_activity':
// Separate handling for crm_core_activity entity.
foreach ($this->fields_mapping as $key => $field) {
if ($key !== 'primary' && !$this
->skipReferencesField($field)) {
$single_mapping = $this
->addRegularFieldMapping($field);
// Add sourceMigration from linked import(s) if necessary
if (!empty($source_migration[$field['source_field']])) {
$single_mapping
->sourceMigration($source_migration[$field['source_field']]);
}
}
}
// Add uid if not added in the configuration form.
if (!array_key_exists('uid', $this->codedFieldMappings)) {
$this
->addFieldMapping('uid')
->defaultValue(0);
}
break;
default:
foreach ($this->fields_mapping as $key => $field) {
if ($key !== 'primary' && !$this
->skipCollectionField($field) && !$this
->skipReferencesField($field)) {
$single_mapping = $this
->addRegularFieldMapping($field);
// Add sourceMigration from linked import(s) if necessary
if (!empty($source_migration[$field['source_field']])) {
$single_mapping
->sourceMigration($source_migration[$field['source_field']]);
}
}
// Collect names of the field collection fields.
if ($this
->skipCollectionField($field)) {
$main_field = $this
->getMainFieldName($field['destination_field']);
$this->collection_items[] = $main_field;
}
}
break;
}
}
// Run preImport method in settings plugins.
$importer_settings = $importer
->getSettings();
if (!empty($importer_settings['settings_controllers'])) {
foreach ($importer_settings['settings_controllers'] as $controller) {
$settings_controller = crm_core_data_import_load_plugin_instance('crm_core_data_import_settings', $controller);
if ($settings_controller) {
$settings_controller
->preImport($importer, $this);
}
}
}
if (!empty($this->collection_items)) {
$this->collection_items = array_unique($this->collection_items);
$this
->buildFieldCollectionMapping();
}
drupal_alter('crm_core_data_import_migration', $this);
}