Index: revision_moderation_actions.inc =================================================================== RCS file: /usr/local/cvsroot/cvsr/drupal/code/sites/all/modules/revision_moderation/revision_moderation_actions.inc,v retrieving revision 1.1 diff -b -u -p -r1.1 revision_moderation_actions.inc --- revision_moderation_actions.inc 28 Feb 2009 02:11:36 -0000 1.1 +++ revision_moderation_actions.inc 1 Mar 2009 19:16:01 -0000 @@ -1,5 +1,5 @@ array('delete', 'insert', 'update') ), ); + $actions['revision_moderation_publish_action'] = array( + 'type' => 'node', + 'description' => t('Publish this revision of node'), + 'configurable' => FALSE, + 'hooks' => array( + 'nodeapi' => array('presave', 'update'), + ), + ); return $actions; } @@ -50,3 +58,22 @@ function revision_moderation_disable_act $node->revision_moderation = 0; node_save($node); } + +/** + * Implementation of a Drupal action; publishes this revision of the node. + */ +function revision_moderation_publish_action(&$node, $context) { + $revisions = revision_moderation_get_node_pending_revisions($node->nid); + if (! empty($revisions)) { + // only update vid if the node is one of the pending revisions + if (in_array($node->vid, array_keys($revisions))) { + db_query("UPDATE {node} SET vid = %d, title = '%s' WHERE nid = %d", $node->vid, $node->title, $node->nid); + } + } + else { + // if there is only one revision, change status + if (db_result(db_query("SELECT count(vid) FROM {node_revisions} WHERE nid=%d", $node->nid)) == 1) { + db_query("UPDATE {node} SET status = %d WHERE nid = %d", 1, $node->nid); + } + } +}