diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-11-14 20:42:45 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-11-14 20:42:45 +0000 |
commit | 8dd7376d5a15f2485fdd83c8db402a244314e30b (patch) | |
tree | 1b6241df8c5eeb5692e2345144fad8ee435de941 /modules/user/user.module | |
parent | 8049f94756021402a34ad3f2eb54fee5b19ae39b (diff) | |
download | brdo-8dd7376d5a15f2485fdd83c8db402a244314e30b.tar.gz brdo-8dd7376d5a15f2485fdd83c8db402a244314e30b.tar.bz2 |
#923826 by catch, carlos8f, moshe weitzman: Fixed entity delete operations should use transactions.
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(); } } |