Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.1092 diff -u -p -r1.1092 node.module --- modules/node/node.module 5 Aug 2009 15:58:34 -0000 1.1092 +++ modules/node/node.module 6 Aug 2009 21:38:05 -0000 @@ -1181,6 +1181,15 @@ function node_show($node, $message = FAL drupal_set_title(t('Revision of %title from %date', array('%title' => $node->title, '%date' => format_date($node->revision_timestamp))), PASS_THROUGH); } + // If the user has access to revisions, check if there are any pending and + // display a message if so. + if (user_access('view revisions') && user_access('revert revisions') || user_access('administer nodes')) { + $max_vid = db_query('SELECT MAX(vid) FROM {node_revision} WHERE nid = :nid', array(':nid' => $node->nid)); + if ($max_vid > $node->vid) { + drupal_set_message(t('This content has one or more pending drafts, view revisions to review and publish.', array('@revisions' => url('node/' . $node->nid . '/revisions')))); + } + } + // Update the history table, stating that this user viewed this node. node_tag_new($node->nid); Index: modules/node/node.pages.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v retrieving revision 1.73 diff -u -p -r1.73 node.pages.inc --- modules/node/node.pages.inc 4 Aug 2009 06:44:48 -0000 1.73 +++ modules/node/node.pages.inc 6 Aug 2009 21:38:05 -0000 @@ -265,6 +265,13 @@ function node_form(&$form_state, $node) '#weight' => 5, '#submit' => array('node_form_submit'), ); + $form['buttons']['draft'] = array( + '#access' => user_access('access revisions') && user_access('publish revisions'), + '#type' => 'submit', + '#value' => t('Save as draft'), + '#weight' => 6, + '#submit' => array('node_form_draft_submit'), + ); $form['buttons']['preview'] = array( '#access' => variable_get('node_preview_' . $node->type, 1) != DRUPAL_DISABLED, '#type' => 'submit', @@ -395,6 +402,32 @@ function theme_node_preview($node) { return $output; } +/** + * Submit handler for saving as draft. + */ +function node_form_draft_submit($form, &$form_state) { + $node = node_form_submit_build_node($form, $form_state); + + // Always create a new revision if this button is used. + $node->revision = TRUE; + node_save($node); + + // Keep the original revision ID if the node is published, and there is + // already an existing revision. + if ($node->status && $node->old_vid) { + db_update('node') + ->fields(array('vid' => $node->old_vid)) + ->condition('nid', $node->nid) + ->execute(); + } + + if ($node->nid) { + unset($form_state['rebuild']); + $form_state['nid'] = $node->nid; + $form_state['redirect'] = 'node/' . $node->nid; + } +} + function node_form_submit($form, &$form_state) { global $user; @@ -507,7 +540,8 @@ function node_revision_overview($node) { $row[] = t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'small'), "node/$node->nid/revisions/$revision->vid/view"), '!username' => theme('username', $revision))) . (($revision->log != '') ? '
' . filter_xss($revision->log) . '
' : ''); if ($revert_permission) { - $operations[] = l(t('revert'), "node/$node->nid/revisions/$revision->vid/revert"); + $title = $node->vid > $revision->vid ? t('revert') : t('publish'); + $operations[] = l($title, "node/$node->nid/revisions/$revision->vid/revert"); } if ($delete_permission) { $operations[] = l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete"); @@ -530,7 +564,7 @@ function node_revision_overview($node) { */ function node_revision_revert_confirm($form_state, $node_revision) { $form['#node_revision'] = $node_revision; - return confirm_form($form, t('Are you sure you want to revert to the revision from %revision-date?', array('%revision-date' => format_date($node_revision->revision_timestamp))), 'node/' . $node_revision->nid . '/revisions', '', t('Revert'), t('Cancel')); + return confirm_form($form, t('Are you sure you want to publish the revision from %revision-date?', array('%revision-date' => format_date($node_revision->revision_timestamp))), 'node/' . $node_revision->nid . '/revisions', '', t('Revert'), t('Cancel')); } function node_revision_revert_confirm_submit($form, &$form_state) {