? 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; + } } /**