From b4644f8e668effe5e26309794efab59608c8fd56 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Fri, 4 Nov 2005 19:40:28 +0000 Subject: [PATCH] - Patch #36250 by hunmonk: admin batch delete broken, node_delete needs reworked. This commit changes the node_delete() API. A list of affected modules is available at http://drupal.org/node/36250#comment-52963. --- modules/blogapi.module | 2 +- modules/blogapi/blogapi.module | 2 +- modules/forum.module | 4 +- modules/forum/forum.module | 4 +- modules/node.module | 77 ++++++++++++++++------------------ modules/node/node.module | 77 ++++++++++++++++------------------ 6 files changed, 78 insertions(+), 88 deletions(-) diff --git a/modules/blogapi.module b/modules/blogapi.module index e208047d9834..1e906bd08bf3 100644 --- a/modules/blogapi.module +++ b/modules/blogapi.module @@ -318,7 +318,7 @@ function blogapi_blogger_delete_post($appkey, $postid, $username, $password, $co return blogapi_error($user); } - node_delete(array('nid' => $postid, 'confirm' => 1)); + node_delete($postid); return true; } diff --git a/modules/blogapi/blogapi.module b/modules/blogapi/blogapi.module index e208047d9834..1e906bd08bf3 100644 --- a/modules/blogapi/blogapi.module +++ b/modules/blogapi/blogapi.module @@ -318,7 +318,7 @@ function blogapi_blogger_delete_post($appkey, $postid, $username, $password, $co return blogapi_error($user); } - node_delete(array('nid' => $postid, 'confirm' => 1)); + node_delete($postid); return true; } diff --git a/modules/forum.module b/modules/forum.module index 3ca90b42d769..931033a9846b 100644 --- a/modules/forum.module +++ b/modules/forum.module @@ -154,9 +154,7 @@ function forum_taxonomy($op, $type, $object = NULL) { if ($op == 'delete' && $type == 'term' && $object->vid == _forum_get_vid()) { $results = db_query('SELECT f.nid FROM {forum} f WHERE f.tid = %d', $object->tid); while ($node = db_fetch_object($results)) { - $edit['nid'] = $node->nid; - $edit['confirm'] = TRUE; - node_delete($edit); + node_delete($node->nid); } } elseif ($op == 'delete' && $type == 'vocabulary' && $object->vid == _forum_get_vid()) { diff --git a/modules/forum/forum.module b/modules/forum/forum.module index 3ca90b42d769..931033a9846b 100644 --- a/modules/forum/forum.module +++ b/modules/forum/forum.module @@ -154,9 +154,7 @@ function forum_taxonomy($op, $type, $object = NULL) { if ($op == 'delete' && $type == 'term' && $object->vid == _forum_get_vid()) { $results = db_query('SELECT f.nid FROM {forum} f WHERE f.tid = %d', $object->tid); while ($node = db_fetch_object($results)) { - $edit['nid'] = $node->nid; - $edit['confirm'] = TRUE; - node_delete($edit); + node_delete($node->nid); } } elseif ($op == 'delete' && $type == 'vocabulary' && $object->vid == _forum_get_vid()) { diff --git a/modules/node.module b/modules/node.module index a7665d5c1033..bc9881bd507e 100644 --- a/modules/node.module +++ b/modules/node.module @@ -900,7 +900,7 @@ function node_menu($may_cache) { 'weight' => 1, 'type' => MENU_LOCAL_TASK); $items[] = array('path' => 'node/'. arg(1) .'/delete', 'title' => t('delete'), - 'callback' => 'node_delete_page', + 'callback' => 'node_delete_confirm', 'access' => node_access('delete', $node), 'weight' => 1, 'type' => MENU_CALLBACK); @@ -1103,8 +1103,8 @@ function node_admin_nodes_execute($form_id, $edit) { } } drupal_set_message(t('The update has been performed.')); + drupal_goto('admin/node'); } - drupal_goto('admin/node'); } function node_admin_nodes_validate($form_id, $edit) { @@ -1192,11 +1192,11 @@ function theme_node_admin_nodes($form) { function node_multiple_delete_form() { global $form_values; - $form['nodes'] = array('#prefix' => '<ul>', '#suffix' => '</ul>'); + $form['nodes'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE); foreach ($form_values['nodes'] as $nid => $value) { if ($value) { $title = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $nid)); - $form['nodes'][$nid] = array('#type' => 'hidden', '#value' => $nid, '#tree' => TRUE, '#prefix' => '<li>', '#suffix' => check_plain($title) .'</li>'); + $form['nodes'][$nid] = array('#type' => 'hidden', '#value' => $nid, '#prefix' => '<li>', '#suffix' => check_plain($title) .'</li>'); } } $form['operation'] = array('#type' => 'hidden', '#value' => 'delete'); @@ -1211,7 +1211,7 @@ function node_multiple_delete_form() { function node_multiple_delete_form_execute($form_id, $edit) { if ($edit['confirm']) { foreach ($edit['nodes'] as $nid => $value) { - node_delete(array('nid' => $nid, 'confirm' => 1)); + node_delete($nid); } drupal_set_message(t('The items have been deleted.')); } @@ -1833,13 +1833,15 @@ function node_form_execute($form_id, $edit) { } /** - * Ask for confirmation, and delete the node. + * Menu callback -- ask for confirmation of node deletion */ -function node_delete($edit) { +function node_delete_confirm() { + $edit = $_POST['edit']; + $edit['nid'] = $edit['nid'] ? $edit['nid'] : arg(1); $node = node_load($edit['nid']); if (node_access('delete', $node)) { - $form['nid'] = array('#type' => 'hidden', '#value' => $node->nid); + $form['nid'] = array('#type' => 'value', '#value' => $node->nid); $output = confirm_form('node_delete_confirm', $form, t('Are you sure you want to delete %title?', array('%title' => theme('placeholder', $node->title))), $_GET['destination'] ? $_GET['destination'] : 'node/'. $node->nid, t('This action cannot be undone.'), @@ -1849,32 +1851,41 @@ function node_delete($edit) { return $output; } -function node_delete_confirm_execute() { - global $form_values; - $node = node_load($form_values['nid']); +/** + * Execute node deletion + */ +function node_delete_confirm_execute($form_id, $form_values) { + if ($form_values['confirm']) { + node_delete($form_values['nid']); + drupal_goto('node'); + } +} - if (node_access('delete', $node)) { +/** + * Delete a node. + */ +function node_delete($nid) { - if ($form_values['confirm']) { - db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); - db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); + $node = node_load($nid); - // Call the node-specific callback (if any): - node_invoke($node, 'delete'); - node_invoke_nodeapi($node, 'delete'); + if (node_access('delete', $node)) { + db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); + db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); - // Clear the cache so an anonymous poster can see the node being deleted. - cache_clear_all(); + // Call the node-specific callback (if any): + node_invoke($node, 'delete'); + node_invoke_nodeapi($node, 'delete'); - // Remove this node from the search index if needed. - if (function_exists('search_wipe')) { - search_wipe($node->nid, 'node'); - } + // Clear the cache so an anonymous poster can see the node being deleted. + cache_clear_all(); - watchdog('content', t('%type: deleted %title.', array('%type' => theme('placeholder', t($node->type)), '%title' => theme('placeholder', $node->title)))); + // Remove this node from the search index if needed. + if (function_exists('search_wipe')) { + search_wipe($node->nid, 'node'); } + drupal_set_message(t('%title has been deleted.', array('%title' => theme('placeholder', $node->title)))); + watchdog('content', t('%type: deleted %title.', array('%type' => theme('placeholder', t($node->type)), '%title' => theme('placeholder', $node->title)))); } - drupal_goto('node'); } /** @@ -1995,20 +2006,6 @@ function node_page() { } } -/** - * Menu callback; the page for deleting a single node. - */ -function node_delete_page() { - $edit = $_POST['edit']; - $edit['nid'] = $edit['nid'] ? $edit['nid'] : arg(1); - $node = node_load($edit['nid']); - if (!($output = node_delete($edit))) { - drupal_set_message(t('%title has been deleted.', array('%title' => theme('placeholder', $node->title)))); - drupal_goto(''); - } - return $output; -} - /** * Implementation of hook_update_index(). */ diff --git a/modules/node/node.module b/modules/node/node.module index a7665d5c1033..bc9881bd507e 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -900,7 +900,7 @@ function node_menu($may_cache) { 'weight' => 1, 'type' => MENU_LOCAL_TASK); $items[] = array('path' => 'node/'. arg(1) .'/delete', 'title' => t('delete'), - 'callback' => 'node_delete_page', + 'callback' => 'node_delete_confirm', 'access' => node_access('delete', $node), 'weight' => 1, 'type' => MENU_CALLBACK); @@ -1103,8 +1103,8 @@ function node_admin_nodes_execute($form_id, $edit) { } } drupal_set_message(t('The update has been performed.')); + drupal_goto('admin/node'); } - drupal_goto('admin/node'); } function node_admin_nodes_validate($form_id, $edit) { @@ -1192,11 +1192,11 @@ function theme_node_admin_nodes($form) { function node_multiple_delete_form() { global $form_values; - $form['nodes'] = array('#prefix' => '<ul>', '#suffix' => '</ul>'); + $form['nodes'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE); foreach ($form_values['nodes'] as $nid => $value) { if ($value) { $title = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $nid)); - $form['nodes'][$nid] = array('#type' => 'hidden', '#value' => $nid, '#tree' => TRUE, '#prefix' => '<li>', '#suffix' => check_plain($title) .'</li>'); + $form['nodes'][$nid] = array('#type' => 'hidden', '#value' => $nid, '#prefix' => '<li>', '#suffix' => check_plain($title) .'</li>'); } } $form['operation'] = array('#type' => 'hidden', '#value' => 'delete'); @@ -1211,7 +1211,7 @@ function node_multiple_delete_form() { function node_multiple_delete_form_execute($form_id, $edit) { if ($edit['confirm']) { foreach ($edit['nodes'] as $nid => $value) { - node_delete(array('nid' => $nid, 'confirm' => 1)); + node_delete($nid); } drupal_set_message(t('The items have been deleted.')); } @@ -1833,13 +1833,15 @@ function node_form_execute($form_id, $edit) { } /** - * Ask for confirmation, and delete the node. + * Menu callback -- ask for confirmation of node deletion */ -function node_delete($edit) { +function node_delete_confirm() { + $edit = $_POST['edit']; + $edit['nid'] = $edit['nid'] ? $edit['nid'] : arg(1); $node = node_load($edit['nid']); if (node_access('delete', $node)) { - $form['nid'] = array('#type' => 'hidden', '#value' => $node->nid); + $form['nid'] = array('#type' => 'value', '#value' => $node->nid); $output = confirm_form('node_delete_confirm', $form, t('Are you sure you want to delete %title?', array('%title' => theme('placeholder', $node->title))), $_GET['destination'] ? $_GET['destination'] : 'node/'. $node->nid, t('This action cannot be undone.'), @@ -1849,32 +1851,41 @@ function node_delete($edit) { return $output; } -function node_delete_confirm_execute() { - global $form_values; - $node = node_load($form_values['nid']); +/** + * Execute node deletion + */ +function node_delete_confirm_execute($form_id, $form_values) { + if ($form_values['confirm']) { + node_delete($form_values['nid']); + drupal_goto('node'); + } +} - if (node_access('delete', $node)) { +/** + * Delete a node. + */ +function node_delete($nid) { - if ($form_values['confirm']) { - db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); - db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); + $node = node_load($nid); - // Call the node-specific callback (if any): - node_invoke($node, 'delete'); - node_invoke_nodeapi($node, 'delete'); + if (node_access('delete', $node)) { + db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); + db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); - // Clear the cache so an anonymous poster can see the node being deleted. - cache_clear_all(); + // Call the node-specific callback (if any): + node_invoke($node, 'delete'); + node_invoke_nodeapi($node, 'delete'); - // Remove this node from the search index if needed. - if (function_exists('search_wipe')) { - search_wipe($node->nid, 'node'); - } + // Clear the cache so an anonymous poster can see the node being deleted. + cache_clear_all(); - watchdog('content', t('%type: deleted %title.', array('%type' => theme('placeholder', t($node->type)), '%title' => theme('placeholder', $node->title)))); + // Remove this node from the search index if needed. + if (function_exists('search_wipe')) { + search_wipe($node->nid, 'node'); } + drupal_set_message(t('%title has been deleted.', array('%title' => theme('placeholder', $node->title)))); + watchdog('content', t('%type: deleted %title.', array('%type' => theme('placeholder', t($node->type)), '%title' => theme('placeholder', $node->title)))); } - drupal_goto('node'); } /** @@ -1995,20 +2006,6 @@ function node_page() { } } -/** - * Menu callback; the page for deleting a single node. - */ -function node_delete_page() { - $edit = $_POST['edit']; - $edit['nid'] = $edit['nid'] ? $edit['nid'] : arg(1); - $node = node_load($edit['nid']); - if (!($output = node_delete($edit))) { - drupal_set_message(t('%title has been deleted.', array('%title' => theme('placeholder', $node->title)))); - drupal_goto(''); - } - return $output; -} - /** * Implementation of hook_update_index(). */ -- GitLab