summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-09-25 14:24:34 +0000
committerDries Buytaert <dries@buytaert.net>2009-09-25 14:24:34 +0000
commitd734f2f25d4866dc56c65766a8e196eac8a63047 (patch)
tree7dae4e3b2a1148f11b57b32908f5e5fdfff65c0d
parent8b0b496a1c93b685c6e9dd25b6e4b008fb91cf51 (diff)
downloadbrdo-d734f2f25d4866dc56c65766a8e196eac8a63047.tar.gz
brdo-d734f2f25d4866dc56c65766a8e196eac8a63047.tar.bz2
- Patch #581392 by sun, catch | mr.baileys: Fixed Add an API function for deleting revisions.
-rw-r--r--modules/node/node.api.php2
-rw-r--r--modules/node/node.module45
-rw-r--r--modules/node/node.pages.inc8
-rw-r--r--modules/taxonomy/taxonomy.module7
-rw-r--r--modules/upload/upload.module4
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;