diff options
Diffstat (limited to 'modules/node/node.module')
-rw-r--r-- | modules/node/node.module | 126 |
1 files changed, 38 insertions, 88 deletions
diff --git a/modules/node/node.module b/modules/node/node.module index 81d9722e4..8876001f0 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -1729,67 +1729,29 @@ function theme_node_admin_nodes($form) { function node_multiple_delete_confirm(&$form_state) { $edit = $form_state['post']; - $form['nodes']['#tree'] = TRUE; - $form['prefix'] = array('#value' => '<ul>'); - - // array_filter() returns only elements with TRUE values. - $nids = array_filter($edit['nodes']); - $nodes = db_query('SELECT nid, title, type FROM {node} WHERE nid IN(%s)', implode(', ', $nids)); - while ($node = db_fetch_object($nodes)) { - - // This is a placeholder -- preserves proper ordering in the confirm form. - $form["node_$node->nid"] = array(); - - // Start a new package for each node. - drupal_delete_initiate('node', $node->nid); - - // Add the confirm form piece for this node. - drupal_delete_add_form_elements( - array( - "node_$node->nid" => array( - '#value' => check_plain($node->title), - '#prefix' => '<li>', - '#suffix' => "</li>\n", - ), - 'nodes' => array( - "node_$node->nid" => array( - '#type' => 'hidden', - '#value' => $node->nid, - ) - ) - ) - ); - drupal_delete_add_callback(array('node_delete_post' => array($node->nid, $node->title, $node->type))); - node_delete($node->nid); + $form['nodes'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE); + // array_filter returns only elements with TRUE values + foreach (array_filter($edit['nodes']) as $nid => $value) { + $title = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $nid)); + $form['nodes'][$nid] = array('#type' => 'hidden', '#value' => $nid, '#prefix' => '<li>', '#suffix' => check_plain($title) ."</li>\n"); } - $form['suffix'] = array('#value' => '</ul>'); - - $form['operation'] = array( - '#type' => 'hidden', - '#value' => 'delete', - ); + $form['operation'] = array('#type' => 'hidden', '#value' => 'delete'); - // New package for the main admin callback. - drupal_delete_initiate('node', 'admin'); - - // Add the main callback for the mass deletion last. - drupal_delete_add_callback(array('node_multiple_delete_confirm_post' => array())); - - return drupal_delete_confirm( - array( - 'form' => $form, - 'question' => t('Are you sure you want to delete these items?'), - 'path' => 'admin/content/node', - 'yes' => t('Delete all'), - 'destination' => 'admin/content/node', - ) - ); + return confirm_form($form, + t('Are you sure you want to delete these items?'), + 'admin/content/node', t('This action cannot be undone.'), + t('Delete all'), t('Cancel')); } -function node_multiple_delete_confirm_post() { - // Clear the cache so an anonymous poster can see the nodes being deleted. - cache_clear_all(); - drupal_set_message(t('The items have been deleted.')); +function node_multiple_delete_confirm_submit($form, &$form_state) { + if ($form_state['values']['confirm']) { + foreach ($form_state['values']['nodes'] as $nid => $value) { + node_delete($nid); + } + drupal_set_message(t('The items have been deleted.')); + } + $form_state['redirect'] = 'admin/content/node'; + return; } /** @@ -1871,44 +1833,32 @@ function node_revision_revert($nid, $revision) { * revision is deleted. */ function node_revision_delete($nid, $revision) { - $node = node_load($nid); - - if (user_access('administer nodes') && node_access('delete', $node)) { - - // Don't delete the current revision - if ($revision != $node->vid) { - $node = node_load($nid, $revision); - - drupal_delete_initiate('node_revision', $revision); - drupal_delete_add_callback(array('node_revision_delete_post' => array($node, $revision))); - drupal_delete_add_query('DELETE FROM {node_revisions} WHERE vid = %d', $revision); - node_invoke_nodeapi($node, 'delete revision'); + if (user_access('administer nodes')) { + $node = node_load($nid); + if (node_access('delete', $node)) { + // Don't delete the current revision + if ($revision != $node->vid) { + $node = node_load($nid, $revision); + + db_query("DELETE FROM {node_revisions} WHERE nid = %d AND vid = %d", $nid, $revision); + node_invoke_nodeapi($node, 'delete revision'); + drupal_set_message(t('Deleted %title revision %revision.', array('%title' => $node->title, '%revision' => $revision))); + watchdog('content', '@type: deleted %title revision %revision.', array('@type' => $node->type, '%title' => $node->title, '%revision' => $revision)); + } - // Back to revisions page if multiple revisions exist. - if (db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d', $node->nid)) > 2) { - $destination = "node/$node->nid/revisions"; + else { + drupal_set_message(t('Deletion failed. You tried to delete the current revision.')); + } + if (db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d', $nid)) > 1) { + drupal_goto("node/$nid/revisions"); } else { - $destination = "node/$node->nid"; + drupal_goto("node/$nid"); } - drupal_delete_execute($destination); - } - else { - drupal_set_message(t('Deletion failed. You tried to delete the current revision.')); } } - else { - drupal_access_denied(); - } -} -/** - * Post revision deletion operations. - */ -function node_revision_delete_post($node, $revision) { - - drupal_set_message(t('Deleted %title revision %revision.', array('%title' => $node->title, '%revision' => $revision))); - watchdog('content', '@type: deleted %title revision %revision.', array('@type' => t($node->type), '%title' => $node->title, '%revision' => $revision)); + drupal_access_denied(); } /** |