? salesforce_api/toolkit
Index: salesforce_api/salesforce_api.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.module,v
retrieving revision 1.2.2.16
diff -u -p -r1.2.2.16 salesforce_api.module
--- salesforce_api/salesforce_api.module	31 Jul 2009 05:00:01 -0000	1.2.2.16
+++ salesforce_api/salesforce_api.module	31 Jul 2009 05:07:21 -0000
@@ -336,31 +336,21 @@ function salesforce_api_fieldmap_delete(
 /**
  * Returns an array of fieldmaps for use as options in the Forms API.
  *
- * @param $drupal
- *   Filters the fieldmaps by Drupal object.
- * @param $salesforce
- *   Filters the fieldmaps by Salesforce object.
- * @param $automatic
- *   Optional: Filter the fieldmaps to only pull those marked automatic.
+ * @param $drupal String
+ *   Filters the fieldmaps by name of the Drupal object type, may include % wildcards.
+ * @param $salesforce String
+ *   Filters the fieldmaps by name of the Salesforce object type, may include % wildcards.
  * @return
  *   A FAPI options array of all the matching fieldmaps.
  */
-function salesforce_api_fieldmap_options($drupal = NULL, $salesforce = NULL, $automatic = FALSE) {
+function salesforce_api_fieldmap_options($drupal = NULL, $salesforce = NULL) {
   $options = array();
-  
-  $result = db_query("SELECT fieldmap, drupal, salesforce FROM {salesforce_field_map}");
-  while ($map = db_fetch_array($result)) {
 
-    // Skip the fieldmap if it is not for the appropriate Drupal object.
-    if (!empty($drupal) && $map['drupal'] != $drupal) {
-      continue;
-    }
-
-    // Skip the fieldmap if it is not for the appropriate Salesforce object.
-    if (!empty($salesforce) && $map['salesforce'] != $salesforce) {
-      continue;
-    }
+  // This does not need to not be optimized for perfomance since it's only an admin interface.
+  $vars = array($drupal ? $drupal : '%', $salesforce ? $salesforce : '%');
+  $result = db_query("SELECT fieldmap, drupal, salesforce FROM {salesforce_field_map} WHERE drupal LIKE '%s' AND salesforce LIKE '%s'", $vars);
 
+  while ($map = db_fetch_array($result)) {
     // Setup some replacement args for the label.
     $args = array(
       '@drupal' => salesforce_api_fieldmap_object_label('drupal', $map['drupal']),
Index: sf_node/sf_node.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_node/sf_node.module,v
retrieving revision 1.2.2.10
diff -u -p -r1.2.2.10 sf_node.module
--- sf_node/sf_node.module	31 Jul 2009 04:25:00 -0000	1.2.2.10
+++ sf_node/sf_node.module	31 Jul 2009 05:07:21 -0000
@@ -59,17 +59,23 @@ function sf_node_nodeapi(&$node, $op, $a
       if(isset($node->sf_node_skip_export)) {
         return;
       }
-      // Detect whether or not this should be an auto-update for this node
-      $options = salesforce_api_fieldmap_options('node_'. $node->type, NULL, TRUE);
-      if (empty($options)) {
+
+      // Are there any automatic fieldmaps for this node type?
+      $result = db_query("SELECT fieldmap FROM {salesforce_field_map} WHERE drupal = '%s' AND automatic = 1", 'node_'. $node->type);
+      $map = db_fetch_object($result);
+      if (!$map) {
         return;
       }
-      if (count($options) > 0) {
-        $map = key($options);
-      }
-      elseif (count($options) > 1 && user_access('administer salesforce')) {
-        drupal_set_message(t('Warning: more than one "automatic" salesforce mapping detected. Used @map.', array('@map' => $map[$key])), 'error');
+
+      // Use the first fieldmap.
+      $map = $map->fieldmap;
+
+      // Check if there is more than one fieldmap in the result.
+      if (user_access('administer salesforce') and db_fetch_object($result)) {
+        drupal_set_message(t('Warning: more than one "automatic" salesforce mapping detected. Used fieldmap @map.', array('@map' => $map)), 'error');
       }
+
+      // Finally, export the node to Salesforce.
       sf_node_export($node, $map);
       break;
     case 'update':
