Index: node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.410.2.1
diff -U3 -r1.410.2.1 node.module
--- node.module 19 Oct 2004 18:00:28 -0000      1.410.2.1
+++ node.module 28 Oct 2004 20:06:13 -0000
@@ -805,18 +805,40 @@
     drupal_set_message(t('The content settings have been reset to their default values.'));
   }

-  $header = array_merge(array(t('type')), array_keys(node_invoke_nodeapi($node, 'settings')));
+  $edit_settings = array(
+    'publish'  => 'node_status_edit_',
+    'promote'  => 'node_promote_edit_',
+    'moderate' => 'node_moderate_edit_',
+    'sticky'   => 'node_sticky_edit_'
+  );
+
+  $create_header = array_merge(array(t('type')), array_keys(node_invoke_nodeapi($node, 'settings')));
+  $edit_header = array_merge(array(t('type')), array_keys($edit_settings));
   foreach (node_list() as $type) {
     $node = new StdClass();
     $node->type = $type;
-    $cols = array();
+    $create_cols = array();
     foreach (node_invoke_nodeapi($node, 'settings') as $setting) {
-      $cols[] = array('data' => $setting, 'align' => 'center', 'width' => 55);
+      $create_cols[] = array('data' => $setting, 'align' => 'center', 'width' => 55);
     }
-    $rows[] = array_merge(array(node_invoke($node, 'node_name')), $cols);
+    $create_rows[] = array_merge(array(node_invoke($node, 'node_name')), $create_cols);
+
+    $edit_cols = array();
+    foreach ($edit_settings as $option => $varname) {
+      $varname = $varname. $type;
+      $edit_cols[] = array('data' => form_checkbox('', $varname, 1, (variable_get($varname, 0)) ? true : false), 'align' => 'center', 'width' => 55);
+    }
+    $edit_rows[] = array_merge(array(node_invoke($node, 'node_name')), $edit_cols);
+
   }
+  $group = theme('table', $create_header, $create_rows);
+  $help = t('<div id="help">Check which options are assigned to new nodes.</div>');
+  $output .= form_group(t('Creation settings'), $help. $group);

-  $output .= theme('table', $header, $rows);
+
+  $group = theme('table', $edit_header, $edit_rows);
+  $help = t('<div id="help">Check which node options are preserved during editing. Users with &quot;administer nodes&quot; permission can override these settings.</div>');
+  $output .= form_group(t('Editing options'), $help. $group);

   $output .= form_submit(t('Save configuration'));
   $output .= form_submit(t('Reset to defaults'));
@@ -1051,9 +1073,6 @@
     $node->teaser = node_teaser($node->body);
   }

-  // Create a new revision when required.
-  $node = node_revision_create($node);
-
   if (user_access('administer nodes')) {
     // Set up default values, if required.
     if (!$node->created) {
@@ -1088,16 +1107,30 @@
   }
   else {
     // Validate for normal users:
-    $node->uid = $user->uid ? $user->uid : 0;
-    // Force defaults in case people modify the form:
-    $node->status = variable_get("node_status_$node->type", 1);
-    $node->promote = variable_get("node_promote_$node->type", 1);
-    $node->moderate = variable_get("node_moderate_$node->type", 0);
-    $node->sticky = variable_get("node_sticky_$node->type", 0);
+    $node->uid = ($node->uid >= 0) ? $node->uid : $user->uid;
+
+    if (!$node->nid) {
+      // Force defaults:
+      $node->status   = variable_get("node_status_$node->type", 1);
+      $node->promote  = variable_get("node_promote_$node->type", 1);
+      $node->sticky   = variable_get("node_sticky_$node->type", 0);
+      $node->moderate = variable_get("node_moderate_$node->type", 0);
+    }
+    else {
+      // Determine if the settings are preserved for nodes that exist.
+      $node->status   = (variable_get("node_status_edit_$node->type", 1)) ? variable_get("node_status_$node->type", 1) : $node->status;
+      $node->promote  = (variable_get("node_promote_edit_$node->type", 1)) ? variable_get("node_promote_$node->type", 1) : $node->promote;
+      $node->sticky   = (variable_get("node_sticky_edit_$node->type", 1)) ? variable_get("node_sticky_$node->type", 1) : $node->sticky;
+      $node->moderate = (variable_get("node_moderate_edit_$node->type", 1)) ? variable_get("node_moderate_$node->type", 1) : $node->moderate;
+    }
     $node->revision = variable_get("node_revision_$node->type", 0);
+
     unset($node->created);
   }

+  // Create a new revision when required.
+  $node = node_revision_create($node);
+
   // Do node-type-specific validation checks.
   node_invoke($node, 'validate');
   node_invoke_nodeapi($node, 'validate');
@@ -1175,6 +1208,10 @@
   // Add the hidden fields.
   if ($edit->nid) {
     $output .= form_hidden('nid', $edit->nid);
+    $output .= form_hidden('status', $edit->status);
+    $output .= form_hidden('moderate', $edit->moderate);
+    $output .= form_hidden('promote', $edit->promote);
+    $output .= form_hidden('sticky', $edit->sticky);
   }

   if (isset($edit->uid)) {
