From b6570b8386635bdc31176a282ae58fd0b98dc29c Mon Sep 17 00:00:00 2001
From: "Jens B. Sorensen" <beltofte@propeople.dk>
Date: Thu, 9 Apr 2015 12:37:31 +0200
Subject: [PATCH] Added code from github

---
 webform_salesforce.admin.inc | 150 ++++++++++++++++++++++--------
 webform_salesforce.info      |   2 +-
 webform_salesforce.install   |  79 ++++++----------
 webform_salesforce.module    | 213 ++++++++++++++++++++++++-------------------
 4 files changed, 263 insertions(+), 181 deletions(-)
 mode change 100644 => 100755 webform_salesforce.admin.inc
 mode change 100644 => 100755 webform_salesforce.info
 mode change 100644 => 100755 webform_salesforce.install
 mode change 100644 => 100755 webform_salesforce.module

diff --git a/webform_salesforce.admin.inc b/webform_salesforce.admin.inc
old mode 100644
new mode 100755
index c769909..9ba162b
--- a/webform_salesforce.admin.inc
+++ b/webform_salesforce.admin.inc
@@ -15,7 +15,7 @@ function webform_salesforce_configure_form($form, $form_state, $node) {
   $form = array();
   $form_cfg = webform_salesforce_get_map($node);
   $map = (!empty($form_cfg['map'])) ? $form_cfg['map'] : array();
-  $def_obj = (!empty($form_cfg['object'])) ? $form_cfg['object'] : '';
+  $def_object = (!empty($form_cfg['object'])) ? $form_cfg['object'] : '';
 
   // Get all the allowed SF objects
   $sf_options = webform_salesforce_describe_objects();
@@ -30,13 +30,11 @@ function webform_salesforce_configure_form($form, $form_state, $node) {
     $form['sf_setup'] = array(
       '#type' => 'fieldset',
       '#title' => t('Salesforce Settings'),
-      '#collapsible' => TRUE,
-      '#collapsed' => FALSE,
       '#tree' => TRUE,
     );
     $form['sf_setup']['enabled'] = array(
       '#type' => 'checkbox',
-      '#default_value' => !empty($def_obj) ? 1 : 0,
+      '#default_value' => !empty($def_object) ? 1 : 0,
       '#title' => t('Enabled'),
       '#description' => t('Field mapping and object selection are only stored if Salesforce is enabled for this Webform.'),
     );
@@ -45,19 +43,19 @@ function webform_salesforce_configure_form($form, $form_state, $node) {
       '#title' => t('Salesforce Object'),
       '#description' => t('Please select which object will be created in Salesform via this Webform.'),
       '#options' => $sf_list,
-      '#default_value' => $def_obj,
+      '#default_value' => $def_object,
       '#required' => FALSE,
     );
 
     // Get all available Webform fields and build option list for mapping
     if (!empty($node->webform['components'])) {
-      $wf_fields = array('' => '- Select -');
+      $wf_components = array('' => '- Select -');
       foreach ($node->webform['components'] as $field) {
         $name = $field['name'];
         if ($field['mandatory']) {
           $name .= ' *';
         }
-        $wf_fields[$field['form_key']] = $name;
+        $wf_components[$field['form_key']] = $name;
       }
     }
     else {
@@ -65,40 +63,64 @@ function webform_salesforce_configure_form($form, $form_state, $node) {
     }
 
     // Do not show mapping unless there are some webform components
-    if (isset($wf_fields) && !empty($def_obj)) {
+    if (isset($wf_components) && !empty($def_object)) {
+
       // Get field definitions for the selected object
-      $sf_object_fields = webform_salesforce_get_available_fields($def_obj);
+      $sf_object_fields = webform_salesforce_get_available_fields($def_object);
 
-      $form['sf_fields'] = array(
+      $form['sf_fields_mappings_wrapper'] = array(
         '#type' => 'fieldset',
         '#title' => t('Field Mapping'),
-        '#description' => t('Define mapping between Salesforce fields and Webform form components'),
         '#tree' => TRUE,
-        '#collapsible' => TRUE,
-        '#collapsed' => FALSE,
       );
-      foreach ($sf_object_fields as $sf_object_type) {
-        foreach ($sf_object_type as $attr) {
-          $defval = (!empty($map[$attr['fieldid']]) ? $map[$attr['fieldid']] : '');
-          
-          $label = $attr['required'] ? check_plain($attr['label']) . ' <span class="form-required">(' . t('Required') . ')</span>' : check_plain($attr['label']);
-          $form['sf_fields'][$attr['fieldid']] = array(
-            '#type' => 'select',
-            '#title' => $label,
-            '#options' =>  $wf_fields,
-            '#default_value' => $defval,
-          );
-        }
-      }
-      
-      $form['wfsf_mappings_info'] = array(
-        '#type' => 'markup',
-        '#value' => t('<p>Select the Webform field that should be mapped to the Salesforce field.<br />All required fields are designated with a <strong>*</strong> next to their name.</p>'),
+      $form['sf_fields_mappings_wrapper']['info'] = array(
+        '#markup' => t('<p>Select the Webform component that should be mapped to the Salesforce field.<br />All required fields are designated with a <strong>*</strong> next to their name.</p>'),
       );
+      $form['sf_fields_mappings_wrapper']['salesforce_field_mappings'] = array(
+        '#theme' => 'webform_salesforce_mapping_form_table',
+        '#tree' => TRUE,
+        '#header' => array(
+          'salesforce_field' => t('Salesforce field'),
+          'webform_component' => t('Webform component'),
+        ),
+      );
+
+      foreach ($sf_object_fields as $key => $attr) {
+        $row_id = 'edit-salesforce-field-mappings-' . $key;
+        $form['salesforce_field_mappings_wrapper']['salesforce_field_mappings'][$key] = array(
+          '#type' => 'container',
+          '#attributes' => array(
+            'id' => array($row_id),
+          ),
+        );
+        $row = &$form['sf_fields_mappings_wrapper']['salesforce_field_mappings'][$key];
+
+        // Rendering Salesforce field label
+        $label = $attr['required'] ? check_plain($attr['label']) . ' <span class="form-required">(' . t('Required') . ')</span>' : check_plain($attr['label']);
+        $row['salesforce_field'] = array(
+          '#id' => 'edit-salesforce-field-' . $key,
+          '#markup' => $label,
+        );
+
+        // Rendering Webform component select field.
+        $defval = (!empty($map[$attr['fieldid']]) ? $map[$attr['fieldid']] : '');
+        $row['webform_component'] = array(
+          '#type' => 'select',
+          '#title' => check_plain($attr['label']),
+          '#options' => $wf_components,
+          '#default_value' => $defval,
+          '#parents' => array('sf_fields', $key),
+        );
+
+        // Internal field with Salesforce required status.
+        $row['sf_required'] = array(
+          '#type' => 'value',
+          '#value' => $attr['required'] ? 1 : 0,
+        );
+      }
     }
 
     // Set node info as it doesn't get passed to the submit handler
-
     $form['nid'] = array(
       '#type' => 'hidden',
       '#value' => $node->nid,
@@ -137,24 +159,24 @@ function webform_salesforce_configure_form_clear($form, &$form_state) {
 }
 
 /*
- * Implement callback for validation of form 'webform_exact_target_api_configure_form'
+ * Implement callback for validation of form 'webform_salesforce_configure_form'
  */
 function webform_salesforce_configure_form_validate($form, &$form_state) {
   $values = $form_state['values'];
-
   if ($values['sf_setup']['enabled'] == 1 && isset($values['sf_fields'])) {
     foreach ($values['sf_fields'] as $id => $val) {
-      // Check that a source field was selected:
-
-      if ($form['sf_fields'][$id]['#required'] && '0' == $val) {
-        form_set_error($id, t('No source Webform field selected for required Salesforce field %field.  Please select a Webform field from the dropdown.', array('%field' => $form['sf_fields'][$id]['#title'])));
+      if (isset($form['sf_fields_mappings_wrapper']['salesforce_field_mappings'])) {
+        $sf_mapping = $form['sf_fields_mappings_wrapper']['salesforce_field_mappings'];
+        if ($sf_mapping[$id]['sf_required']['#value'] && empty($val)) {
+          form_set_error("sf_fields][$id", t('No source Webform component selected for required Salesforce field %field.  Please select a Webform component from the dropdown.', array('%field' => $sf_mapping[$id]['webform_component']['#title'])));
+        }
       }
     }
   }
 }
 
 /*
- * Implement callback for submit handling of form 'webform_exact_target_api_configure_form'
+ * Implement callback for submit handling of form 'webform_salesforce_configure_form'
  */
 function webform_salesforce_configure_form_submit($form, &$form_state) {
  // Only store mapping if SF is enabled
@@ -177,3 +199,55 @@ function webform_salesforce_configure_form_submit($form, &$form_state) {
   }
   drupal_set_message(t('Webform Salesforce settings successfully saved.'), 'status');
 }
+
+/**
+ * Themes the field / webform component mapping table.
+ */
+function theme_webform_salesforce_mapping_form_table($variables) {
+  $elements = $variables['elements'];
+
+  // Build the rows array.
+  $columns = isset($elements['#columns']) ? $elements['#columns'] : (isset($elements['#header']) ? array_keys($elements['#header']) : array());
+  $rows = array();
+  foreach (element_children($elements) as $child_key) {
+    $child = & $elements[$child_key];
+    $data = array();
+    $row_columns = empty($columns) ? element_children($child) : $columns;
+    foreach ($row_columns as $column) {
+      if (isset($child[$column])) {
+        // Removing label from select fields
+        if (isset($child[$column]['#type'])) {
+          if ($child[$column]['#type'] == 'select') {
+            $child[$column]['#title'] = '';
+          }
+        }
+        $cell = array('data' => drupal_render($child[$column]));
+        if (isset($child[$column]['#attributes'])) {
+          foreach ($child[$column]['#attributes'] as $key => $value) {
+            $cell[$key] = ($key == 'id') ? (is_array($value) ? array($value[0] . '-cell') : $value . '-cell') : $value;
+          }
+        }
+        $data[] = $cell;
+      }
+    }
+    $row = array('data' => $data);
+    if (isset($child['#attributes'])) {
+      foreach ($child['#attributes'] as $key => $value) {
+        $row[$key] = $value;
+      }
+    }
+    $rows[] = $row;
+  }
+
+  $config = array(
+    'rows' => $rows,
+  );
+  if (isset($elements['#header'])) {
+    $config['header'] = $elements['#header'];
+  }
+  if (isset($elements['#attributes']) && is_array($elements['#attributes'])) {
+    $config['attributes'] = $elements['#attributes'];
+  }
+
+  return theme('table', $config);
+}
\ No newline at end of file
diff --git a/webform_salesforce.info b/webform_salesforce.info
old mode 100644
new mode 100755
index ce5401b..ff69af0
--- a/webform_salesforce.info
+++ b/webform_salesforce.info
@@ -2,5 +2,5 @@ name = Webform/Salesforce Integration
 description = Extends the Webform module to submit to Salesforce using Salesforce API module.
 package = webform
 dependencies[] = webform
-dependencies[] = salesforce_api
+dependencies[] = salesforce
 core = 7.x
\ No newline at end of file
diff --git a/webform_salesforce.install b/webform_salesforce.install
old mode 100644
new mode 100755
index 33eee1a..9066b4c
--- a/webform_salesforce.install
+++ b/webform_salesforce.install
@@ -40,54 +40,35 @@ function webform_salesforce_schema() {
     ), // fields
     'primary key' => array('nid'),
   );
+
+  // Define storage of submission ID and Salesforce ID
+  $schema['wfsf_submissions'] = array(
+    'description' => 'Table containing submission ID and Salesforce ID for each transaction stored in Salesforce',
+    'fields' => array(
+      'sid' => array(
+        'description' => 'The unique identifier for this submission.',
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+      ),
+      'sfid' => array(
+        'description' => 'Salesforce record ID',
+        'type' => 'varchar',
+        'length' => '128',
+      ),
+      'time' => array(
+        'description' => 'Timestamp when the submission was saved in Salesforce.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+    ), // fields
+    'primary key' => array('sid'),
+    'indexes' => array(
+      'sid' => array('sid'),
+      'sfid' => array('sfid'),
+    ),
+  );
+
   return $schema;
 }
-
-/**
- * Updates all D6 style mappings (lowercase) to the uppercase version in D7.
- */
-function webform_salesforce_update_7001() {
-  $result = db_select('wfsf_mappings', 'w')
-    ->fields('w', array('nid', 'vid', 'object', 'map'))
-    ->orderBy('nid', 'ASC')
-    ->execute();
-  module_load_include('module', 'webform_salesforce');
-  if ($result) {
-    while ($row = $result->fetchAssoc()) {
-      $map = unserialize($row['map']);
-      $object = $row['object'];
-      if (!empty($map) && !empty($object)) {
-        // Get field definitions for the selected object
-        $updates = 0;
-        $sf_object_fields = webform_salesforce_get_available_fields($object);
-        if (!empty($sf_object_fields)) {
-          foreach ($sf_object_fields as $sf_object_type) {
-            foreach ($sf_object_type as $attr) {
-              $field_id = $attr['fieldid'];
-              $field_lower = strtolower($field_id);
-              // If the field exists as lowercase in the mapping replace it with
-              // the case sensitive version
-              if (isset($map[$field_lower])) {
-                $val = $map[$field_lower];
-                unset($map[$field_lower]);
-                $map[$field_id] = $val;
-                $updates++;
-              }
-            }
-          }
-          // Perform mapping update if any of the mapping fields have changed
-          if (!empty($updates)) {
-            $cfg = array(
-              'object' => $object,
-              'map' => $map,
-            );
-            $node = new stdClass();
-            $node->nid = $row['nid'];
-            $node->vid = $row['vid'];
-            _webform_salesforce_set_map($node, $cfg);
-          }
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/webform_salesforce.module b/webform_salesforce.module
old mode 100644
new mode 100755
index cb6b7a9..a1a3838
--- a/webform_salesforce.module
+++ b/webform_salesforce.module
@@ -24,6 +24,18 @@ function webform_salesforce_menu() {
   return $items;
 }
 
+/**
+ * Implements hook_theme().
+ */
+function webform_salesforce_theme($existing, $type, $theme, $path) {
+  return array(
+    'webform_salesforce_mapping_form_table' => array(
+      'render element' => 'elements',
+      'file' => 'webform_salesforce.admin.inc',
+    ),
+  );
+}
+
 /*
  * Implements hook_node_delete().
  */
@@ -48,8 +60,6 @@ function webform_salesforce_node_revision_delete($node) {
 
 /**
  * Implements hook_node_load().
- * @param type $nodes
- * @param type $types
  */
 function webform_salesforce_node_load($nodes, $types) {
   $result = db_query("SELECT * FROM {wfsf_mappings} m WHERE m.nid IN (:nids)", array(':nids' => array_keys($nodes)), array('fetch' => PDO::FETCH_ASSOC));
@@ -63,6 +73,13 @@ function webform_salesforce_node_load($nodes, $types) {
   }
 }
 
+/**
+ * Implements hook_entitycache_ENTITY_TYPE_load().
+ */
+function webform_salesforce_entitycache_node_load($entities) {
+  webform_salesforce_node_load($entities, array());
+}
+
 /*
  * Start of Drupal Webform 3.x hook implementations
  */
@@ -121,59 +138,78 @@ function webform_salesforce_webform_submission_insert($node, $submission) {
 }
 
 /**
+ * Implements hook_webform_submission_load().
+ */
+function webform_salesforce_webform_submission_load(&$submissions) {
+  foreach ($submissions as $sid => $submission) {
+    $result = db_select('wfsf_submissions', 'w')
+      ->fields('w', array('sfid', 'time'))
+      ->condition('sid', $sid,'=')
+      ->execute()
+      ->fetchAssoc();
+
+    if (is_array($result) && isset($result['sfid']) && !empty($result['sfid'])) {
+      $submissions[$sid]->salesforce_record_id = $result['sfid'];
+      $submissions[$sid]->salesforce_record_save_time = $result['time'];
+    }
+  }
+}
+
+/**
  * Handles Salesforce submissions
+ *
  * @param string $sf_obj_type
  * @param array $sub_fields
  * @param array $submission
  */
-function webform_salesforce_submit_to_salesforce($sf_obj_type, $sub_fields, $submission) {
-  // Attempt to connect to Salesforce.
-  $sf = salesforce_api_connect();
+function webform_salesforce_submit_to_salesforce($sf_object_key, $sub_fields, $submission) {
+  $sfapi = salesforce_get_api();
 
-  if (!$sf) {
+  // Not authorized, we need to bail this time around.
+  if (!$sfapi->isAuthorized()) {
     if (user_access('administer salesforce')) {
-      drupal_set_message(t('Unable to connect to Salesforce using <a href="!url">current credentials</a>.', array('!url' => url(SALESFORCE_PATH_ADMIN))));
+      drupal_set_message(t('Unable to connect to Salesforce using <a href="!url">current credentials</a>.', array('!url' => url(SALESFORCE_PATH_ADMIN))), 'error');
     }
     return FALSE;
   }
 
-  // Get Salesforce object name from the key
-  $sf_object_options = webform_salesforce_describe_objects();
-  $sf_object_names = FALSE;
-  if (isset($sf_object_options[$sf_obj_type])) {
-    if (is_array($sf_object_options[$sf_obj_type]['object'])) {
-      $sf_object_names = $sf_object_options[$sf_obj_type]['object'];
+  // Populate the Salesforce Object array with gathered fields
+  $sObject = Array();
+  foreach ($sub_fields as $sf_field => $value) {
+    $sObject[$sf_field] = $value;
+  }
+
+  try {
+    if (isset($sub_fields['WebformSID__c']) && !empty($sub_fields['WebformSID__c'])) {
+      $response = $sfapi->objectUpsert($sf_object_key, 'WebformSID__c', $sub_fields['WebformSID__c'], $sObject);
     }
     else {
-      $sf_object_names[] = $sf_object_options[$sf_obj_type]['object'];
+      $response = $sfapi->objectCreate($sf_object_key, $sObject);
     }
   }
-
-  // Populate the Salesforce Object with gathered fields
-  $sObject = new stdClass();
-  foreach ($sub_fields as $sf_field => $value) {
-    $sObject->$sf_field = $value;
+  catch (Exception $e) {
+    watchdog('salesforce', 'Exception while attempting to create/upsert webform submission: %msg <pre>%e</pre>', array('%msg' => $e->getMessage(), '%e' => print_r($e, TRUE)), WATCHDOG_ERROR, l('node ' . $submission->nid, 'node/' . $submission->nid));
   }
 
-  if (!empty($sf_object_names)) {
-    // @note Can handle more than one object at a time
-    foreach ($sf_object_names as $sf_object_name) {
-      try {
-        $key = isset($sObject->WebformSID__c) ? 'WebformSID__c' : 'Id';
-        $response = salesforce_api_upsert(array($sObject), $sf_object_name, $key, $sf);
-      }
-      catch (Exception $e) {
-        salesforce_api_log(SALESFORCE_LOG_SOME, 'Exception while attempting to upsert node: %msg <pre>%e</pre>', array('%msg' => $e->getMessage(), '%e' => print_r($e, TRUE)), WATCHDOG_ERROR, l('node ' . $submission->nid, 'node/' . $submission->nid));
-      }
+  // If the upsert/create was successful...
+  if (isset($response['success']) && $response['success']) {
+    $sf_id = $response['id'];
 
-      // If the upsert was successful...
-      if ($response['successes']) {
-        $sf_id = $response['successes'][0];
-      }
-      else {
-        // Salesforce module does its own logging of errors
-        $sf_id = 0;
-      }
+    // Saving submission success message in Watchdog.
+    watchdog('salesforce', 'Webform submission saved successfully in Salesforce with SF ID: %sf_id', array('%sf_id' => $sf_id), WATCHDOG_INFO, l('node ' . $submission->nid, 'node/' . $submission->nid));
+
+    // Saving Salesforce record ID in relation to the webform submission.
+    db_insert('wfsf_submissions')
+      ->fields(array(
+        'sid' => $submission->sid,
+        'sfid' => $sf_id,
+        'time' => time(),
+      ))
+      ->execute();
+  }
+  else {
+    if (user_access('administer salesforce')) {
+      drupal_set_message(t('Exception while attempting to create/upsert webform submission: %msg. See watchdog for more details.', array('%msg' => $e->getMessage())), 'error');
     }
   }
 }
@@ -182,24 +218,40 @@ function webform_salesforce_submit_to_salesforce($sf_obj_type, $sub_fields, $sub
  * Describe a list of possible Salesforce objects supported
  */
 function webform_salesforce_describe_objects() {
-  $sf_global = salesforce_api_describeGlobal();
-  if (empty($sf_global->types)) {
+  $sfapi = salesforce_get_api();
+
+  // Not authorized, we need to bail this time around.
+  if (!$sfapi->isAuthorized()) {
+    return;
+  }
+
+  // Note that we're filtering SF object types to a reasonable subset.
+  $sfobjects = $sfapi->objects(array(
+    'updateable' => TRUE,
+  ));
+
+  if (empty($sfobjects) || !is_array($sfobjects)) {
     drupal_set_message(t('There was an error retrieving the list of Salesforce objects. Please verify that your Salesforce instance is properly configured.'), 'error');
     return;
   }
   else {
     $options = array();
-    foreach ($sf_global->types as $obj) {
-      $options[$obj->name] = $obj->label;
+    foreach ($sfobjects as $obj) {
+      $options[$obj['name']] = $obj['label'];
     }
   }
+
   $sf_objects = variable_get('salesforce_api_enabled_objects', array('Account', 'Contact'));
   $list = array();
   foreach ($sf_objects as $obj) {
-    $key = strtolower($obj);
-    $label = isset($options[$obj]) ? $options[$obj] : $obj;
-    $list[$key] = array('value' => $label, 'object' => $obj);
+    // We filter the objects not included in the array retrieved from SalesForce.
+    if (isset($options[$obj])) {
+      $key = strtolower($obj);
+      $label = isset($options[$obj]) ? $options[$obj] : $obj;
+      $list[$key] = array('value' => $label, 'object' => $obj);
+    }
   }
+
   // Note: allow other modules to define their own custom objects or
   // modify existing ones.
   webform_salesforce_get_available_objects($list);
@@ -222,43 +274,40 @@ function webform_salesforce_get_available_objects(&$sf_objects) {
 
 /**
  * Retrieves a list of supported Salesforce object fields
- * @param string $sf_object Salesforce object key stored in mapping
+ *
+ * @param string
+ *   $sf_object Salesforce object key stored in mapping
+ *
  * @return type
  */
 function webform_salesforce_get_available_fields($sf_object_key) {
-  // Find full details of the object
-  $all_objects = webform_salesforce_describe_objects();
+  $sfapi = salesforce_get_api();
 
-  if (isset($all_objects[$sf_object_key])) {
-    $sf_object = $all_objects[$sf_object_key];
-    $sf_object['key'] = $sf_object_key;
-    $sf_object_type = is_array($sf_object['object']) ? $sf_object['object'] : array($sf_object['object']);
+  // Not authorized, we need to bail this time around.
+  if (!$sfapi->isAuthorized()) {
+    return;
   }
 
-  if (!empty($sf_object_type)) {
-    $sf_fields_by_object = salesforce_api_describeSObjects($sf_object_type);
-
-    $sf_fields = array();
-    if (!empty($sf_fields_by_object)) {
-      foreach ($sf_fields_by_object as $key => $object) {
-        foreach ($object->fields as $field) {
-          $required = !$field->nillable && $field->createable & !$field->defaultedOnCreate ? TRUE : FALSE;
-          $field_id = $field->name;
-          $sf_fields[$key][$field_id] = array(
-            'fieldid' => $field_id,
-            'label' => $key . ':' . $field->label,
-            'required' => $required,
-            'object' => $object->name,
-            'value' => $object->label,
-            'object_key' => $sf_object_key,
-          );
-        }
-      }
+  // Fetching object description
+  $sf_fields_by_object = $sfapi->objectDescribe($sf_object_key);
+
+  $sf_fields = array();
+  if (!empty($sf_fields_by_object) && is_array($sf_fields_by_object['fields'])) {
+    foreach ($sf_fields_by_object['fields'] as $field) {
+      $required = !$field['nillable'] && $field['createable'] & !$field['defaultedOnCreate'] ? TRUE : FALSE;
+      $sf_fields[$field['name']] = array(
+        'fieldid' => $field['name'],
+        'label' => $field['label'],
+        'required' => $required,
+        'object' => $sf_fields_by_object['name'],
+        'value' => $sf_fields_by_object['label'],
+        'object_key' => $sf_object_key,
+      );
     }
     // @note using foreach since module_invoke_all doesn't allow pass by reference
     foreach (module_implements('webform_salesforce_fields') as $module) {
       $function = $module . '_webform_salesforce_fields';
-      $function($sf_object, $sf_fields);
+      $function($sf_object_key, $sf_fields);
     }
     return $sf_fields;
   }
@@ -306,27 +355,6 @@ function webform_salesforce_get_map($node) {
   return $cfg[$nid][$vid];
 }
 
-/**
- * Helper function that returns only the fields allowed for specified SF object.
- * @param $defined_fields array of defined fields (may contain not applicable
- * fields for the object
- * @param $sf_object_type string Salesforce object name such as Account or Contact
- */
-function webform_salesforce_filter_allowed_fields($defined_fields, $sf_object_type) {
-  $allowed_fields = $defined_fields;
-  // Get field definitions
-  $fields = webform_salesforce_get_available_fields(strtolower($sf_object_type));
-  if (isset($fields[$sf_object_type])) {
-    $allowed_keys = array_keys($fields[$sf_object_type]);
-    foreach ($defined_fields as $key => $value) {
-      if (!in_array($key, $allowed_keys)) {
-        unset($allowed_fields[$key]);
-      }
-    }
-  }
-  return $allowed_fields;
-}
-
 /*
  * Start of "private" utility functions for this module
  */
@@ -353,7 +381,6 @@ function _webform_salesforce_delete_map($node, $all_revs = FALSE) {
   return $result;
 }
 
-
 /*
  * Helper function to set field mappings for this form (node)
  */
-- 
1.9.3 (Apple Git-50)

