public function MigrationDataImport::attachFieldCollection in CRM Core 7
Attach FC item to host entity.
Parameters
object $entity: Imported entity.
object $row: Data to import.
string $collection_item: Name of the FC item.
array $collection_mapping: Mapping of the FC entity.
string $main_source_field: Name of the main field in source.
1 call to MigrationDataImport::attachFieldCollection()
- MigrationDataImport::complete in modules/
crm_core_data_import/ includes/ controllers/ MigrationDataImport.inc - Complete callback for each item.
File
- modules/
crm_core_data_import/ includes/ controllers/ MigrationDataImport.inc, line 376 - Handler for migration process.
Class
- MigrationDataImport
- @file Handler for migration process.
Code
public function attachFieldCollection(&$entity, &$row, $collection_item, $collection_mapping, $main_source_field) {
if (!empty($row->{$main_source_field . '_collection'})) {
foreach ($row->{$main_source_field . '_collection'} as $collection_value) {
try {
// Create FC entity.
$collection_entity = entity_create('field_collection_item', array(
'field_name' => $collection_item,
));
$collection_entity_wrapper = entity_metadata_wrapper('field_collection_item', $collection_entity);
$collection_entity
->setHostEntity($this
->getEntityType(), $entity);
// Add values according to mapping.
foreach ($collection_mapping as $mapping_item) {
$value = '';
// Process default value.
if ($mapping_item['source']['type'] == 'default_value') {
// Set default value.
$value = $mapping_item['destination']['default_value'];
}
elseif (isset($collection_value[$mapping_item['source']['sub_field']])) {
// Set field value from source.
$value = $collection_value[$mapping_item['source']['sub_field']];
}
if (empty($value) && !empty($mapping_item['destination']['default_value'])) {
// Set default value if source value is empty.
$value = $mapping_item['destination']['default_value'];
}
if (!empty($value) && isset($mapping_item['destination']['sub_field'])) {
$field_name = $mapping_item['destination']['sub_field'];
if (!empty($mapping_item['destination']['part'])) {
// If field is part, just attach to existing entity.
$collection_entity_wrapper->{$field_name}->{$mapping_item['destination']['part']}
->set($value);
}
else {
// Process field with MigrateFieldHandler.
$field_info = field_info_field($field_name);
$field_instance = field_info_instance('field_collection_item', $field_name, $collection_item);
$value = migrate_field_handler_invoke_all($collection_entity, $field_info, $field_instance, array(
$value,
));
$collection_entity->{$field_name} = $value;
}
}
}
$collection_entity
->save();
} catch (Exception $e) {
watchdog('crm_core_data_import', $e
->getMessage(), array(), WATCHDOG_ERROR);
}
}
}
}