Index: sf_user/sf_user.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_user/sf_user.module,v
retrieving revision 1.2.2.6
diff -u -p -r1.2.2.6 sf_user.module
--- sf_user/sf_user.module	31 Aug 2009 15:00:22 -0000	1.2.2.6
+++ sf_user/sf_user.module	2 Feb 2010 19:10:52 -0000
@@ -53,6 +53,41 @@ function sf_user_user($op, &$edit, &$acc
     case 'load':
       $account->salesforce = salesforce_api_id_load('user', $account->uid);
       break;
+
+    case 'delete':
+      db_query('DELETE FROM {salesforce_ids} WHERE drupal_type = "user" AND drupal_id = %d', $account->uid);
+      break;
+
+    case 'insert':
+      // When importing *from* Salesforce, don't export *back* to Salesforce.
+      if (isset($account->sf_user_skip_export) || isset($edit['sf_user_skip_export'])) {
+        break;
+      }
+      // Detect whether or not this should be an auto-update for this node
+      $options = salesforce_api_fieldmap_options('user', NULL, TRUE);
+      if (empty($options)) { 
+        break;
+      }
+      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');
+      }
+      sf_user_export($account->uid, $map);
+     break;
+     
+    case 'update':
+      // When importing *from* Salesforce, don't export *back* to Salesforce.
+      if (isset($account->sf_user_skip_export) || isset($edit['sf_user_skip_export'])) {
+        break;
+      }
+      
+      $salesforce = salesforce_api_id_load('user', $account->uid);
+      if ($salesforce['fieldmap'] && $salesforce['sfid']) {
+        sf_user_export($account->uid, $salesforce['fieldmap'], $salesforce['sfid']);
+      }
+      break;
   }
 }
 
@@ -426,7 +461,12 @@ function sf_user_import($sfid, $fieldmap
     }
 
     //drupal_set_message('<pre>'. print_r($changes, TRUE) .'</pre>');
-    user_save($account, $changes);
+    // We don't want to trigger an export while we're running import.
+    // sf_user_skip_export is a flag to tell hook_user not to export this object.
+    $account->sf_user_skip_export = TRUE;
+    $changes['sf_user_skip_export'] = TRUE;
+    $account = user_save($account, $changes);
+    unset($account->sf_user_skip_export);
   }
 
   return $account->uid;
