Index: node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node.module,v retrieving revision 1.410.2.2 diff -U3 -r1.410.2.2 node.module --- node.module 29 Oct 2004 00:51:38 -0000 1.410.2.2 +++ node.module 30 Oct 2004 18:42:36 -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('
Check which options are assigned to new nodes.
'); + $output .= form_group(t('Creation settings'), $help. $group); - $output .= theme('table', $header, $rows); + + $group = theme('table', $edit_header, $edit_rows); + $help = t('
Check which node options should be preserved during editing. Leaving a checkbox empty means that option is restored to its default creation setting as shown above. Users with "administer nodes" permission can override these settings.
'); + $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)) ? $node->status : variable_get("node_status_$node->type", 1); + $node->promote = (variable_get("node_promote_edit_$node->type", 1)) ? $node->promote : variable_get("node_promote_$node->type", 1); + $node->sticky = (variable_get("node_sticky_edit_$node->type", 1)) ? $node->sticky : variable_get("node_sticky_$node->type", 1); + $node->moderate = (variable_get("node_moderate_edit_$node->type", 1)) ? $node->moderate : variable_get("node_moderate_$node->type", 1); + } $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'); @@ -1164,6 +1197,12 @@ $extras .= implode('
', node_invoke_nodeapi($edit, 'form admin')); $output .= $extras ? '
'. $extras .'
' : ''; } + else if ($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); + } // Add the default fields. $output .= '
';