summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDries Buytaert2010-04-07 13:49:21 (GMT)
committerDries Buytaert2010-04-07 13:49:21 (GMT)
commitbead28a4cdbd612413d042bfa225ee354a8c3885 (patch)
tree94a18c3daaa07639983e9d1bf50a820f331165e1
parente7b3c5e3e9b49990a1c8f979205c1080fbb71abd (diff)
- Patch #721436 by catch, chx, sun, eojthebrave, David_Rothstein, moshe weitzman: remove magical fairy saving of cruft from user_save().
-rw-r--r--includes/session.inc1
-rw-r--r--modules/profile/profile.module2
-rw-r--r--modules/user/user.module16
3 files changed, 8 insertions, 11 deletions
diff --git a/includes/session.inc b/includes/session.inc
index 35812f7..49bde9f 100644
--- a/includes/session.inc
+++ b/includes/session.inc
@@ -105,6 +105,7 @@ function _drupal_session_read($sid) {
if ($user && $user->uid > 0 && $user->status == 1) {
// This is done to unserialize the data member of $user.
$user = drupal_unpack($user);
+ $user->data = unserialize($user->data);
// Add roles element to $user.
$user->roles = array();
diff --git a/modules/profile/profile.module b/modules/profile/profile.module
index d55c057..9e907f6 100644
--- a/modules/profile/profile.module
+++ b/modules/profile/profile.module
@@ -273,8 +273,6 @@ function profile_save_profile(&$edit, $account, $category, $register = FALSE) {
))
->fields(array('value' => $edit[$field->name]))
->execute();
- // Mark field as handled (prevents saving to user->data).
- $edit[$field->name] = NULL;
}
}
diff --git a/modules/user/user.module b/modules/user/user.module
index 8536acc..40c475d 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -239,6 +239,10 @@ class UserController extends DrupalDefaultEntityController {
foreach ($queried_users as $key => $record) {
$picture_fids[] = $record->picture;
$queried_users[$key] = drupal_unpack($record);
+ // As well as unpacking $user->data, also convert the property to an
+ // unserialized array. This ensures we can always safely reserialize it
+ // in user_save().
+ $queried_users[$key]->data = unserialize($record->data);
$queried_users[$key]->roles = array();
if ($record->uid) {
$queried_users[$record->uid]->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
@@ -334,11 +338,8 @@ function user_load_by_name($name) {
* TRUE or omit the $account->uid field.
* @param $edit
* An array of fields and values to save. For example array('name'
- * => 'My name'). Keys that do not belong to columns in the user-related
- * tables are added to the a serialized array in the 'data' column
- * and will be loaded in the $user->data array by user_load().
- * Setting a field to NULL deletes it from the data column, if you are
- * modifying an existing user account.
+ * => 'My name'). Key / value pairs added to the $edit['data'] will be
+ * serialized and saved in the {users.data} column.
* @param $category
* (optional) The category for storing profile information in.
*
@@ -375,7 +376,7 @@ function user_save($account, $edit = array(), $category = 'account') {
// Prepopulate $edit['data'] with the current value of $account->data.
// Modules can add to or remove from this array in hook_user_presave().
if (!empty($account->data)) {
- $edit['data'] = !empty($edit['data']) ? array_merge($edit['data'], $account->data) : $account->data;
+ $edit['data'] = !empty($edit['data']) ? array_merge($account->data, $edit['data']) : $account->data;
}
user_module_invoke('presave', $edit, $account, $category);
@@ -3393,10 +3394,7 @@ function user_register_submit($form, &$form_state) {
}
$notify = !empty($form_state['values']['notify']);
- // The unset below is needed to prevent these form values from being saved as
- // user data.
form_state_values_clean($form_state);
- unset($form_state['values']['notify']);
$form_state['values']['pass'] = $pass;
$form_state['values']['init'] = $form_state['values']['mail'];