function _crm_core_data_import_attach_fields_form in CRM Core 7
Entity fields and bundles.
1 call to _crm_core_data_import_attach_fields_form()
- crm_core_data_import_field_mapping in modules/
crm_core_data_import/ crm_core_data_import.admin.inc - Page callback for field mapping page.
File
- modules/
crm_core_data_import/ crm_core_data_import.admin.inc, line 658 - Configuration pages for CRM Core Data Import.
Code
function _crm_core_data_import_attach_fields_form(&$form, &$form_state, $source_fields) {
$importer = $form_state['importer'];
// Button which was triggered.
$triggering_element = !empty($form_state['triggering_element']) ? $form_state['triggering_element'] : FALSE;
// If button is remove bundle.
if (!empty($triggering_element['#parents'][2]) && $triggering_element['#parents'][2] == 'remove_bundle') {
$key = $triggering_element['#parents'][1];
if (!empty($form_state['values']['mapping'][$key])) {
unset($form_state['values']['mapping'][$key]);
}
}
// If buttons are move up or move down.
if (!empty($triggering_element['#parents'][2]) && ($triggering_element['#parents'][2] == 'move_down' || $triggering_element['#parents'][2] == 'move_up')) {
$key = $triggering_element['#parents'][1];
$search = FALSE;
$swap_mapping = $form_state['values']['mapping'];
// If move up, reverse array.
if ($triggering_element['#parents'][2] == 'move_down') {
$mapping = $form_state['values']['mapping'];
}
else {
$mapping = array_reverse($form_state['values']['mapping']);
}
foreach ($mapping as $mapping_key => $mapping_item) {
if ($mapping_key == $key) {
$search = TRUE;
}
elseif ($search == TRUE && is_array($mapping_item)) {
$search = FALSE;
$swap_mapping = _crm_core_data_import_array_swap($swap_mapping, $key, $mapping_key);
}
}
$form_state['values']['mapping'] = $swap_mapping;
}
// If button is remove field.
if (!empty($triggering_element['#parents'][4]) && $triggering_element['#parents'][4] == 'remove_field') {
$entity_bundle_key = $triggering_element['#parents'][1];
$field_key = $triggering_element['#parents'][3];
unset($form_state['values']['mapping'][$entity_bundle_key]['fields'][$field_key]);
}
// Build form from form_state.
if (!empty($form_state['values']['mapping'])) {
// Attach elements entity fields.
foreach ($form_state['values']['mapping'] as $key => $mapping) {
if (is_array($mapping)) {
list($entity_type, $entity_bundle, $bundle_delta) = explode(':', $key);
$destination = crm_core_data_import_load_plugin_instance('crm_core_data_import_destination', $entity_type);
$fields = $destination
->getFields($entity_bundle);
$html_id = drupal_html_id($key);
// Add field with count of entities.
$entity_key = $entity_type . ':' . $entity_bundle;
$form['mapping'][$entity_key . '_delta'] = array(
'#type' => 'value',
'#value' => $form_state['values']['mapping'][$entity_key . '_delta'],
);
// If was triggered add-more-button, add new field.
if (strpos($triggering_element['#id'], 'add-more') !== FALSE && $triggering_element['#parents'][1] == $key) {
$form_state['values']['mapping'][$key]['fields'][] = array(
'source_field' => '',
'destination_field' => '',
);
}
foreach ($form_state['values']['mapping'][$key]['fields'] as $delta => $field) {
$source_fields_values = $source_fields;
$importer->source_plugin
->mappingSourceFieldsAlter($source_fields_values, crm_core_data_import_get_destination_entity_type($entity_type), $entity_bundle, $importer);
if ($delta === 'primary') {
// Attach primary field.
_crm_core_data_import_attach_elements_primary_fieldset($form, $form_state, $entity_type, $entity_bundle, $key, $html_id, $source_fields_values, $bundle_delta);
}
else {
// Attach form elements for fields.
_crm_core_data_import_attach_elements_field($form, $form_state, $key, $delta, $source_fields_values, $fields);
}
}
// Attach add more button.
_crm_core_data_import_attach_elements_add_more_button($form, $form_state, $key, $html_id);
}
}
}
// Add fieldset form new entity.
if (!empty($form_state['values']['entity_form']['entity_type']) && !empty($form_state['values']['entity_form']['entity_bundle']) && $triggering_element['#id'] == 'add-entity-button') {
$entity_type = $form_state['values']['entity_form']['entity_type'];
$entity_bundle = $form_state['values']['entity_form']['entity_bundle'];
$key = $entity_type . ':' . $entity_bundle;
// Save count of entity bundle. Need to support multiple bundles.
if (empty($form_state['values']['mapping'][$key . '_delta'])) {
// If initial adding.
$form_state['values']['mapping'][$key . '_delta'] = 1;
$bundle_delta = 1;
}
else {
// If bundle already exist.
$form_state['values']['mapping'][$key . '_delta']++;
$bundle_delta = $form_state['values']['mapping'][$key . '_delta'];
}
$form['mapping'][$key . '_delta'] = array(
'#type' => 'value',
'#value' => $bundle_delta,
);
$key .= ':' . $bundle_delta;
$html_id = drupal_html_id($key);
$source_fields_values = $source_fields;
$importer->source_plugin
->mappingSourceFieldsAlter($source_fields_values, crm_core_data_import_get_destination_entity_type($entity_type), $entity_bundle, $importer);
_crm_core_data_import_attach_elements_primary_fieldset($form, $form_state, $entity_type, $entity_bundle, $key, $html_id, $source_fields_values, $bundle_delta);
_crm_core_data_import_attach_elements_add_more_button($form, $form_state, $key, $html_id);
}
$importer->source_plugin
->fieldMappingFormAlter($form, $form_state);
}