summaryrefslogtreecommitdiff
path: root/modules/node
diff options
context:
space:
mode:
Diffstat (limited to 'modules/node')
-rw-r--r--modules/node/node.api.php2
-rw-r--r--modules/node/node.module45
-rw-r--r--modules/node/node.pages.inc8
3 files changed, 38 insertions, 17 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;