diff options
Diffstat (limited to 'modules/user/user.module')
-rw-r--r-- | modules/user/user.module | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/modules/user/user.module b/modules/user/user.module index a9f7462da..d7a3be123 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -2361,23 +2361,30 @@ function user_delete_multiple(array $uids) { if (!empty($uids)) { $accounts = user_load_multiple($uids, array()); - foreach ($accounts as $uid => $account) { - module_invoke_all('user_delete', $account); - module_invoke_all('entity_delete', $account, 'user'); - field_attach_delete('user', $account); - drupal_session_destroy_uid($account->uid); - } - - db_delete('users') - ->condition('uid', $uids, 'IN') - ->execute(); - db_delete('users_roles') - ->condition('uid', $uids, 'IN') - ->execute(); - db_delete('authmap') - ->condition('uid', $uids, 'IN') - ->execute(); + $transaction = db_transaction(); + try { + foreach ($accounts as $uid => $account) { + module_invoke_all('user_delete', $account); + module_invoke_all('entity_delete', $account, 'user'); + field_attach_delete('user', $account); + drupal_session_destroy_uid($account->uid); + } + db_delete('users') + ->condition('uid', $uids, 'IN') + ->execute(); + db_delete('users_roles') + ->condition('uid', $uids, 'IN') + ->execute(); + db_delete('authmap') + ->condition('uid', $uids, 'IN') + ->execute(); + } + catch (Exception $e) { + $transaction->rollback(); + watchdog_exception('user', $e); + throw $e; + } entity_get_controller('user')->resetCache(); } } |