? 407726.patch
? 521346.patch
? 558082.patch
? 635960.patch
? services-doc.patch
Index: services/user_service/user_service.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/services/services/user_service/Attic/user_service.inc,v
retrieving revision 1.1.2.8.2.3
diff -u -p -r1.1.2.8.2.3 user_service.inc
--- services/user_service/user_service.inc	5 Dec 2009 01:42:39 -0000	1.1.2.8.2.3
+++ services/user_service/user_service.inc	7 Dec 2009 22:19:44 -0000
@@ -125,16 +125,61 @@ function user_service_logout() {
  *   Object. The user object with all user data.
  */
 function user_service_save($account) {
+  // Needed for drupal_execute().
+  module_load_include('inc', 'node', 'node.pages');
+
   // if uid is present then update, otherwise insert
-  $update = user_load($account['uid']);
-  $account = isset($update->uid) ? user_save($update, $account) : user_save('', $account);
-  if (!$account) {
-    return services_error(t('Error on saving the user.'), 500);
+  $update = user_load($account['uid']);	
+  $form_state = array();
+  if (!isset($update->uid)) {
+    // register a new user
+    $form_state['values'] = $account;
+    $form_state['values']['pass'] = array(
+      'pass1' => $account['pass'],
+      'pass2' => $account['pass'],
+    );
+    $form_state['values']['op'] = t('Create new account');
+    $ret = drupal_execute('user_register', $form_state);
   }
+  else {
+    // Needed for user_profile_form().
+    module_load_include('inc', 'user', 'user.pages');
+
+    // If a profile category was passed in, use it. Otherwise default
+    // to 'account' (for saving core user data.)
+    $category = 'account';
+    if (isset($account['category'])) {
+      $category = $account['category'];
+      unset($account['category']);
+    }
+    
+    // Any logged in user is by default authenticated,
+    // and leaving this role set in the user's roles array
+    // causes big problems because of a FAPI hack that controls
+    // this checkbox. Therefore we just force it to 0 here.
+    if (isset($account['roles'][2])) {
+      $account['roles'][2] = 0;
+    }
 
-  // Everything went right.
-  // Return the user ID
-  return $account->uid;
+    // Drop any passed in values into the $account var. Anything
+    // unused by the form just gets ignored.
+    foreach ($account as $key => $value) {
+      $form_state['values'][$key] = $value;
+    }
+
+    $form_state['values']['op'] = 'Save';
+    $form_state['values']['_category'] = $category;
+    $form_state['values']['_account'] = $account;
+    $ret = drupal_execute('user_profile_form', $form_state, (object) $account, $category);
+  }
+
+  // Error if needed.
+  if ($errors = form_get_errors()) {
+    return services_error(implode("\n", $errors), 401);
+  }
+  else {
+    return $form_state['user']->uid;
+  }
 }
 
 /**
