? 407726.patch ? 616490_services_hash_coder_d6.patch ? 626280.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.1 diff -u -p -r1.1.2.8.2.1 user_service.inc --- services/user_service/user_service.inc 5 Sep 2009 13:57:59 -0000 1.1.2.8.2.1 +++ services/user_service/user_service.inc 24 Nov 2009 01:40:42 -0000 @@ -122,19 +122,67 @@ function user_service_logout() { * Save user details. * * @param $user_data - * Object. The user object with all user data. + * The user array with all user data. This can be used to + * save core user data, or alternately profile information, with + * the addition of the 'category' key. + * @return + * The user's uid, or a services error. */ 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); + $form_state = array(); + if (!isset($update->uid)) { + // register a new user + $form_state['values']['name'] = $account['name']; + $form_state['values']['mail'] = $account['mail']; + $form_state['values']['pass']['pass1'] = $account['pass']; + $form_state['values']['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; + } } /**