Index: node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.404
diff -U3 -r1.404 node.module
--- node.module 28 Sep 2004 19:13:03 -0000  1.404
+++ node.module 3 Oct 2004 17:32:53 -0000
@@ -827,8 +827,25 @@
     }
     $rows[] = array_merge(array(node_invoke($node, 'node_name')), $cols);
   }
+  $group = theme('table', $header, $rows);
+  $output .= form_group(t('Creation settings'), $group);

-  $output .= theme('table', $header, $rows);
+  $header = array(t('node option'), t('yes'), t('no'));
+  $rows = array();
+  $edit_settings = array(
+    'publish'  => 'node_status_edit',
+    'promote'  => 'node_promote_edit',
+    'moderate' => 'node_moderate_edit',
+    'sticky'   => 'node_sticky_edit'
+  );
+
+  foreach ($edit_settings as $option => $varname) {
+    $rows[] = array(t('reset %node-option flag', array('%node-option' => $option)), array('data' => form_radio('', $varname, 1, (variable_get($varname, 1)) ? true : false), 'align' => 'center', 'width' => 35), array('data' => form_radio('', $varname, 0, (variable_get($varname, 0) == 0) ? true : false), 'align' => 'center', 'width' => 35));
+  }
+
+  $group = theme('table', $header, $rows);
+  $help = t('<div id="help">Users that don\'t have the <a href="%user-permissions-link">&quot;administer nodes&quot; permission</a> are not allowed to change the following options when creating or editing content. By default Drupal resets the publish, promote, moderate and sticky flag to their default creation settings. Below you can choose which options should not be reset when content is modified.</div>', array('%user-permissions-link' => url('admin/user/configure/permission')));
+  $output .= form_group(t('Editing options'), $help. $group);

   $output .= form_submit(t('Save configuration'));
   $output .= form_submit(t('Reset to defaults'));
@@ -1063,9 +1080,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) {
@@ -1104,16 +1118,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', 1)) ? variable_get("node_status_$node->type", 1) : $node->status;
+      $node->promote  = (variable_get('node_promote_edit', 1)) ? variable_get("node_promote_$node->type", 1) : $node->promote;
+      $node->sticky   = (variable_get('node_sticky_edit', 1)) ? variable_get("node_sticky_$node->type", 1) : $node->sticky;
+      $node->moderate = (variable_get('node_moderate_edit', 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');
@@ -1191,6 +1219,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)) {
