You are here

function salesforce_mapping_form_submit in Salesforce Suite 7.3

Submit handler for salesforce_mapping_form().

File

modules/salesforce_mapping/includes/salesforce_mapping.admin.inc, line 665
Configuration page for creating and modifying a mapping.

Code

function salesforce_mapping_form_submit($form, &$form_state) {
  $values = $form_state['values'];
  $mappings = array();
  if (isset($values['key'])) {
    $key_delta = isset($values['key']) ? $values['key'] : FALSE;
    $dedupe_key = FALSE;
    $sfobject = _salesforce_mapping_get_salesforce_object($values['salesforce_object_type'], $form_state);
    $sf_fields = isset($sfobject['fields']) ? $sfobject['fields'] : array();
    foreach ($values['salesforce_field_mappings'] as $key => $mapping) {
      $drupal_field_type = $mapping['drupal_field']['fieldmap_type'];
      $field_map = salesforce_mapping_get_fieldmap_types($drupal_field_type);
      if (!empty($mapping['drupal_field']) && !empty($mapping['salesforce_field'])) {
        if (isset($field_map['salesforce_multiple_fields']) && $field_map['salesforce_multiple_fields']) {
          $sf_field = array();
          foreach ($mapping['salesforce_field'] as $field) {
            $filtered = array_filter($sf_fields, salesforce_field_filter($field));
            $sf_field[] = reset($filtered);
          }
        }
        else {
          $filtered = array_filter($sf_fields, salesforce_field_filter($mapping['salesforce_field']));
          $sf_field = reset($filtered);
        }
        $mappings[] = array(
          'drupal_field' => $mapping['drupal_field'],
          'salesforce_field' => $sf_field,
          'key' => $key_delta !== FALSE && $key_delta != "" && $key === (int) $key_delta,
          'direction' => $mapping['direction'],
        );
        if ($key_delta !== FALSE && $key_delta != "" && $key === (int) $key_delta) {
          $dedupe_key = $sf_field['name'];
        }
      }
    }
  }
  $sync_values = array_filter($values['sync_triggers']);
  $sync_triggers = SALESFORCE_MAPPING_SYNC_OFF;
  foreach ($sync_values as $value) {
    $sync_triggers = $sync_triggers | $value;
  }
  $params = array(
    'label' => $values['label'],
    'salesforce_object_type' => $values['salesforce_object_type'],
    'salesforce_record_types_allowed' => $values['salesforce_record_types_allowed'],
    'salesforce_record_type_default' => $values['salesforce_record_type_default'],
    'drupal_entity_type' => $values['drupal_entity_type'],
    'drupal_bundle' => $values['drupal_bundle'],
    'description' => '',
    'field_mappings' => $mappings,
    'sync_triggers' => $sync_triggers,
    'pull_trigger_date' => $values['pull_trigger_date'],
    'push_async' => $values['push_async'],
  );
  if ($form_state['salesforce_mapping']->name) {
    $mapping = $form_state['salesforce_mapping'];
    foreach ($params as $key => $value) {
      $mapping->{$key} = $value;
    }
  }
  else {
    $params['name'] = $values['name'];
    $mapping = entity_create('salesforce_mapping', $params);
  }
  if (!empty($dedupe_key)) {
    $mapping->dedupe_key = $dedupe_key;
  }
  $mapping
    ->save();
  salesforce_set_message(t('Salesforce field mapping saved.'));
  $form_state['redirect'] = 'admin/structure/salesforce/mappings';
}