Index: modules/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.527
diff -u -r1.527 node.module
--- modules/node.module	2 Sep 2005 02:11:41 -0000	1.527
+++ modules/node.module	8 Sep 2005 09:00:14 -0000
@@ -806,14 +806,24 @@
           drupal_set_message(t('The items have been deleted.'));
         }
         else {
-          $extra = '<ul>';
-          foreach ($edit['nodes'] as $nid => $value) {
-            if ($value) {
-              $title = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $nid));
-              $extra .= '<li>'. form_hidden('nodes]['. $nid, 1) . check_plain($title) .'</li>';
+          // Theme nodes to delete into a list, injecting any module-specific data.
+          $list = array();
+          // Keep only checked nodes' nids
+          $nids = array_keys(array_intersect($edit['nodes'], array('1')));
+          foreach ($nids as $nid) {
+            $node = node_load($nid);
+            $extras = node_invoke_nodeapi($node, 'delete pre');
+            // Add node and extras to the list only if no module has cancelled deletion for this node.
+            if (!in_array(FALSE, $extras)) {
+              $list[] = form_hidden('nodes]['. $node->nid, 1) . check_plain($node->title) . implode('', $extras);
             }
+
+          }
+          // Back to the admin page if no nodes can be deleted.
+          if (count($list) == 0) {
+            drupal_goto('admin/node');
           }
-          $extra .= '</ul>';
+          $extra = theme_item_list($list);
           $extra .= form_hidden('operation', 'delete');
 
           $output = theme('confirm',
@@ -1617,7 +1627,13 @@
       watchdog('content', t('%type: deleted %title.', array('%type' => theme('placeholder', t($node->type)), '%title' => theme('placeholder', $node->title))));
     }
     else {
-      $extra = form_hidden('nid', $node->nid);
+      $extras = node_invoke_nodeapi($node, 'delete pre');
+      // Add extras only if no module has cancelled the deletion.
+      if (!in_array(FALSE, $extras)) {
+        $extra = form_hidden('nid', $node->nid) . implode('', $extras);
+      } else {
+        drupal_goto('node/'. $node->nid .'/edit');
+      }
       $output = theme('confirm',
                       t('Are you sure you want to delete %title?', array('%title' => theme('placeholder', $node->title))),
                       $_GET['destination'] ? $_GET['destination'] : 'node/'. $node->nid,