--- revision_moderation.module.orig 2010-08-03 21:27:55.000000000 +0200 +++ revision_moderation.module 2010-08-03 22:02:42.000000000 +0200 @@ -60,6 +60,13 @@ } /** + * Implementation of hook_perm(). + */ +function revision_moderation_perm() { + return array('edit own content without moderation'); +} + +/** * Menu permission callback. */ function revision_moderation_admin_perm($nid) { @@ -191,14 +198,15 @@ // Only do this logic for non-admin users on nodes with revision moderation // turned on. // And not editing a chose revision + global $user; + $update_goes_live = user_access('edit own content without moderation') && ($node->uid == $user->uid); if ($node->nid && $node->revision_moderation == 1 && arg(2) != 'revisions' - && (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1))) { + && (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1)) && !$update_goes_live) { switch ($op) { case 'prepare': // If user has a pending revision for this node, load the latest version of // it instead. if ($revisions = revision_moderation_get_node_pending_revisions($node->nid)) { - global $user; foreach ($revisions as $revision) { if ($revision->uid == $user->uid) { drupal_set_message(t('Editing your latest revision, which is still pending moderation.')); @@ -231,7 +239,7 @@ break; } } - else if ($node->nid && $node->revision_moderation == 1 && end($args) == 'edit') { + else if ($node->nid && $node->revision_moderation == 1 && end($args) == 'edit' && !$update_goes_live) { switch ($op) { case 'prepare': $revision_author = user_load($node->revision_uid);