summaryrefslogtreecommitdiff
path: root/modules/user/user.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/user/user.module')
-rw-r--r--modules/user/user.module27
1 files changed, 24 insertions, 3 deletions
diff --git a/modules/user/user.module b/modules/user/user.module
index 06233fcdf..1b4f86988 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -2419,6 +2419,14 @@ function user_cancel($edit, $uid, $method) {
array('_user_cancel', array($edit, $account, $method)),
),
);
+
+ // After cancelling account, ensure that user is logged out.
+ if ($account->uid == $user->uid) {
+ // Batch API stores data in the session, so use the finished operation to
+ // manipulate the current user's session id.
+ $batch['finished'] = '_user_cancel_session_regenerate';
+ }
+
batch_set($batch);
// Batch processing is either handled via Form API or has to be invoked
@@ -2461,10 +2469,12 @@ function _user_cancel($edit, $account, $method) {
break;
}
- // After cancelling account, ensure that user is logged out.
+ // After cancelling account, ensure that user is logged out. We can't destroy
+ // their session though, as we might have information in it, and we can't
+ // regenerate it because batch API uses the session ID, we will regenerate it
+ // in _user_cancel_session_regenerate().
if ($account->uid == $user->uid) {
- // Destroy the current session, and reset $user to the anonymous user.
- session_destroy();
+ $user = drupal_anonymous_user();
}
// Clear the cache for anonymous users.
@@ -2472,6 +2482,17 @@ function _user_cancel($edit, $account, $method) {
}
/**
+ * Finished batch processing callback for cancelling a user account.
+ *
+ * @see user_cancel()
+ */
+function _user_cancel_session_regenerate() {
+ // Regenerate the users session instead of calling session_destroy() as we
+ // want to preserve any messages that might have been set.
+ drupal_session_regenerate();
+}
+
+/**
* Delete a user.
*
* @param $uid