diff -Naur revision_moderation-alpha2/revision_moderation.module revision_moderation/revision_moderation.module --- revision_moderation-alpha2/revision_moderation.module 2009-12-17 07:18:07.000000000 +0100 +++ revision_moderation/revision_moderation.module 2011-02-10 13:20:12.000000000 +0100 @@ -60,6 +60,13 @@ } /** + * Implementation of hook_perm(). + */ +function revision_moderation_perm() { + return array('edit own content without moderation', 'edit all 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; + $updating_live_allowed = user_access('edit all content without moderation') || (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)) && !$updating_live_allowed) { 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' && !$updating_live_allowed) { switch ($op) { case 'prepare': $revision_author = user_load($node->revision_uid);