diff options
-rw-r--r-- | modules/node/node.api.php | 2 | ||||
-rw-r--r-- | modules/node/node.module | 45 | ||||
-rw-r--r-- | modules/node/node.pages.inc | 8 | ||||
-rw-r--r-- | modules/taxonomy/taxonomy.module | 7 | ||||
-rw-r--r-- | modules/upload/upload.module | 4 |
5 files changed, 43 insertions, 23 deletions
diff --git a/modules/node/node.api.php b/modules/node/node.api.php index fd6212f92..1ed19a6aa 100644 --- a/modules/node/node.api.php +++ b/modules/node/node.api.php @@ -281,7 +281,7 @@ function hook_node_delete($node) { * @param $node * The node the action is being performed on. */ -function hook_node_delete_revision($node) { +function hook_node_revision_delete($node) { db_delete('upload')->condition('vid', $node->vid)->execute(); if (!is_array($node->files)) { return; diff --git a/modules/node/node.module b/modules/node/node.module index 9a216d2b3..3c2d7610d 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -780,10 +780,11 @@ function node_load_multiple($nids = array(), $conditions = array(), $reset = FAL * @return * A fully-populated node object. */ -function node_load($nid, $vid = array(), $reset = FALSE) { - $vid = isset($vid) ? array('vid' => $vid) : NULL; - $node = node_load_multiple(array($nid), $vid, $reset); - return $node ? $node[$nid] : FALSE; +function node_load($nid = NULL, $vid = NULL, $reset = FALSE) { + $nids = (isset($nid) ? array($nid) : array()); + $conditions = (isset($vid) ? array('vid' => $vid) : array()); + $node = node_load_multiple($nids, $conditions, $reset); + return $node ? reset($node) : FALSE; } /** @@ -1011,6 +1012,31 @@ function node_delete_multiple($nids) { } /** + * Delete a node revision. + * + * @param $revision_id + * The revision ID to delete. + */ +function node_revision_delete($revision_id) { + if ($revision = node_load(NULL, $revision_id)) { + // Prevent deleting the current revision. + $node = node_load($revision->nid); + if ($revision_id == $node->vid) { + return FALSE; + } + + db_delete('node_revision') + ->condition('nid', $revision->nid) + ->condition('vid', $revision->vid) + ->execute(); + module_invoke_all('node_revision_delete', $revision); + field_attach_delete_revision('node', $revision); + return TRUE; + } + return FALSE; +} + +/** * Generate an array for rendering the given node. * * @param $node @@ -1484,13 +1510,12 @@ function node_user_cancel($edit, $account, $method) { ->condition('uid', $account->uid) ->execute() ->fetchCol(); - foreach ($nodes as $nid) { - node_delete($nid); - } + node_delete_multiple($nodes); // Delete old revisions. - db_delete('node_revision') - ->condition('uid', $account->uid) - ->execute(); + $revisions = db_query('SELECT vid FROM {node_revision} WHERE uid = :uid', array(':uid' => $account->uid))->fetchCol(); + foreach ($revisions as $revision) { + node_revision_delete($revision); + } // Clean history. db_delete('history') ->condition('uid', $account->uid) diff --git a/modules/node/node.pages.inc b/modules/node/node.pages.inc index e794fd0b2..a2643ee5f 100644 --- a/modules/node/node.pages.inc +++ b/modules/node/node.pages.inc @@ -563,12 +563,8 @@ function node_revision_delete_confirm($form, $form_state, $node_revision) { function node_revision_delete_confirm_submit($form, &$form_state) { $node_revision = $form['#node_revision']; - db_delete('node_revision') - ->condition('nid', $node_revision->nid) - ->condition('vid', $node_revision->vid) - ->execute(); - module_invoke_all('node_delete_revision', $node_revision); - field_attach_delete_revision('node', $node_revision); + node_revision_delete($node_revision->vid); + watchdog('content', '@type: deleted %title revision %revision.', array('@type' => $node_revision->type, '%title' => $node_revision->title, '%revision' => $node_revision->vid)); drupal_set_message(t('Revision from %revision-date of @type %title has been deleted.', array('%revision-date' => format_date($node_revision->revision_timestamp), '@type' => node_type_get_name($node_revision), '%title' => $node_revision->title))); $form_state['redirect'] = 'node/' . $node_revision->nid; diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module index ed8aa2c98..ee18ede4c 100644 --- a/modules/taxonomy/taxonomy.module +++ b/modules/taxonomy/taxonomy.module @@ -865,8 +865,7 @@ function taxonomy_node_get_terms($node, $key = 'tid') { * Save term associations for a given node. */ function taxonomy_node_save($node, $terms) { - - taxonomy_node_delete_revision($node); + taxonomy_node_revision_delete($node); // Free tagging vocabularies do not send their tids in the form, // so we'll detect them here and process them independently. @@ -1594,11 +1593,11 @@ function taxonomy_node_delete($node) { } /** - * Implement hook_node_delete_revision(). + * Implement hook_node_revision_delete(). * * Remove associations of a node to its terms. */ -function taxonomy_node_delete_revision($node) { +function taxonomy_node_revision_delete($node) { db_delete('taxonomy_term_node') ->condition('vid', $node->vid) ->execute(); diff --git a/modules/upload/upload.module b/modules/upload/upload.module index e4451c3aa..d00e7e227 100644 --- a/modules/upload/upload.module +++ b/modules/upload/upload.module @@ -412,9 +412,9 @@ function upload_node_delete($node) { } /** - * Implement hook_node_delete_revision(). + * Implement hook_node_revision_delete(). */ -function upload_node_delete_revision($node) { +function upload_node_revision_delete($node) { db_delete('upload')->condition('vid', $node->vid)->execute(); if (!is_array($node->files)) { return; |