summaryrefslogtreecommitdiff
path: root/modules/node
diff options
context:
space:
mode:
Diffstat (limited to 'modules/node')
-rw-r--r--modules/node/node.module65
1 files changed, 36 insertions, 29 deletions
diff --git a/modules/node/node.module b/modules/node/node.module
index 252d72278..337c4098d 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1123,7 +1123,7 @@ function node_save($node) {
db_ignore_slave();
}
catch (Exception $e) {
- $transaction->rollback('node');
+ $transaction->rollback();
watchdog_exception('node', $e);
throw $e;
}
@@ -1164,41 +1164,48 @@ function node_delete($nid) {
* An array of node IDs.
*/
function node_delete_multiple($nids) {
+ $transaction = db_transaction();
if (!empty($nids)) {
$nodes = node_load_multiple($nids, array());
- foreach ($nodes as $nid => $node) {
- // Call the node-specific callback (if any):
- node_invoke($node, 'delete');
- module_invoke_all('node_delete', $node);
- module_invoke_all('entity_delete', $node, 'node');
- field_attach_delete('node', $node);
-
- // Remove this node from the search index if needed.
- // This code is implemented in node module rather than in search module,
- // because node module is implementing search module's API, not the other
- // way around.
- if (module_exists('search')) {
- search_reindex($nid, 'node');
+ try {
+ foreach ($nodes as $nid => $node) {
+ // Call the node-specific callback (if any):
+ node_invoke($node, 'delete');
+ module_invoke_all('node_delete', $node);
+ module_invoke_all('entity_delete', $node, 'node');
+ field_attach_delete('node', $node);
+
+ // Remove this node from the search index if needed.
+ // This code is implemented in node module rather than in search module,
+ // because node module is implementing search module's API, not the other
+ // way around.
+ if (module_exists('search')) {
+ search_reindex($nid, 'node');
+ }
}
- }
- // Delete after calling hooks so that they can query node tables as needed.
- db_delete('node')
- ->condition('nid', $nids, 'IN')
- ->execute();
- db_delete('node_revision')
- ->condition('nid', $nids, 'IN')
- ->execute();
- db_delete('history')
- ->condition('nid', $nids, 'IN')
- ->execute();
- db_delete('node_access')
- ->condition('nid', $nids, 'IN')
- ->execute();
+ // Delete after calling hooks so that they can query node tables as needed.
+ db_delete('node')
+ ->condition('nid', $nids, 'IN')
+ ->execute();
+ db_delete('node_revision')
+ ->condition('nid', $nids, 'IN')
+ ->execute();
+ db_delete('history')
+ ->condition('nid', $nids, 'IN')
+ ->execute();
+ db_delete('node_access')
+ ->condition('nid', $nids, 'IN')
+ ->execute();
+ }
+ catch (Exception $e) {
+ $transaction->rollback();
+ watchdog_exception('node', $e);
+ throw $e;
+ }
// Clear the page and block and node_load_multiple caches.
- cache_clear_all();
entity_get_controller('node')->resetCache();
}
}