Esempio n. 1
0
/**
 * Display list of a post's revisions.
 *
 * Can output either a UL with edit links or a TABLE with diff interface, and
 * restore action links.
 *
 * Second argument controls parameters:
 *   (bool)   parent : include the parent (the "Current Revision") in the list.
 *   (string) format : 'list' or 'form-table'.  'list' outputs UL, 'form-table'
 *                     outputs TABLE with UI.
 *   (int)    right  : what revision is currently being viewed - used in
 *                     form-table format.
 *   (int)    left   : what revision is currently being diffed against right -
 *                     used in form-table format.
 *
 * @package NXTClass
 * @subpackage Post_Revisions
 * @since 2.6.0
 *
 * @uses nxt_get_post_revisions()
 * @uses nxt_post_revision_title()
 * @uses get_edit_post_link()
 * @uses get_the_author_meta()
 *
 * @todo split into two functions (list, form-table) ?
 *
 * @param int|object $post_id Post ID or post object.
 * @param string|array $args See description {@link nxt_parse_args()}.
 * @return null
 */
function nxt_list_post_revisions($post_id = 0, $args = null)
{
    if (!($post = get_post($post_id))) {
        return;
    }
    $defaults = array('parent' => false, 'right' => false, 'left' => false, 'format' => 'list', 'type' => 'all');
    extract(nxt_parse_args($args, $defaults), EXTR_SKIP);
    switch ($type) {
        case 'autosave':
            if (!($autosave = nxt_get_post_autosave($post->ID))) {
                return;
            }
            $revisions = array($autosave);
            break;
        case 'revision':
            // just revisions - remove autosave later
        // just revisions - remove autosave later
        case 'all':
        default:
            if (!($revisions = nxt_get_post_revisions($post->ID))) {
                return;
            }
            break;
    }
    /* translators: post revision: 1: when, 2: author name */
    $titlef = _x('%1$s by %2$s', 'post revision');
    if ($parent) {
        array_unshift($revisions, $post);
    }
    $rows = $right_checked = '';
    $class = false;
    $can_edit_post = current_user_can('edit_post', $post->ID);
    foreach ($revisions as $revision) {
        if (!current_user_can('read_post', $revision->ID)) {
            continue;
        }
        if ('revision' === $type && nxt_is_post_autosave($revision)) {
            continue;
        }
        $date = nxt_post_revision_title($revision);
        $name = get_the_author_meta('display_name', $revision->post_author);
        if ('form-table' == $format) {
            if ($left) {
                $left_checked = $left == $revision->ID ? ' checked="checked"' : '';
            } else {
                $left_checked = $right_checked ? ' checked="checked"' : '';
            }
            // [sic] (the next one)
            $right_checked = $right == $revision->ID ? ' checked="checked"' : '';
            $class = $class ? '' : " class='alternate'";
            if ($post->ID != $revision->ID && $can_edit_post) {
                $actions = '<a href="' . nxt_nonce_url(add_query_arg(array('revision' => $revision->ID, 'action' => 'restore')), "restore-post_{$post->ID}|{$revision->ID}") . '">' . __('Restore') . '</a>';
            } else {
                $actions = '';
            }
            $rows .= "<tr{$class}>\n";
            $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='left' value='{$revision->ID}'{$left_checked} /></th>\n";
            $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='right' value='{$revision->ID}'{$right_checked} /></th>\n";
            $rows .= "\t<td>{$date}</td>\n";
            $rows .= "\t<td>{$name}</td>\n";
            $rows .= "\t<td class='action-links'>{$actions}</td>\n";
            $rows .= "</tr>\n";
        } else {
            $title = sprintf($titlef, $date, $name);
            $rows .= "\t<li>{$title}</li>\n";
        }
    }
    if ('form-table' == $format) {
        ?>

<form action="revision.php" method="get">

<div class="tablenav">
	<div class="alignleft">
		<input type="submit" class="button-secondary" value="<?php 
        esc_attr_e('Compare Revisions');
        ?>
" />
		<input type="hidden" name="action" value="diff" />
		<input type="hidden" name="post_type" value="<?php 
        echo esc_attr($post->post_type);
        ?>
" />
	</div>
</div>

<br class="clear" />

<table class="widefat post-revisions" cellspacing="0" id="post-revisions">
	<col />
	<col />
	<col style="width: 33%" />
	<col style="width: 33%" />
	<col style="width: 33%" />
<thead>
<tr>
	<th scope="col"><?php 
        /* translators: column name in revisons */
        _ex('Old', 'revisions column name');
        ?>
</th>
	<th scope="col"><?php 
        /* translators: column name in revisons */
        _ex('New', 'revisions column name');
        ?>
</th>
	<th scope="col"><?php 
        /* translators: column name in revisons */
        _ex('Date Created', 'revisions column name');
        ?>
</th>
	<th scope="col"><?php 
        _e('Author');
        ?>
</th>
	<th scope="col" class="action-links"><?php 
        _e('Actions');
        ?>
</th>
</tr>
</thead>
<tbody>

<?php 
        echo $rows;
        ?>

</tbody>
</table>

</form>

<?php 
    } else {
        echo "<ul class='post-revisions'>\n";
        echo $rows;
        echo "</ul>";
    }
}
Esempio n. 2
0
        $right = $right_revision->ID;
        $redirect = false;
        break;
    case 'view':
    default:
        if (!($revision = nxt_get_post_revision($revision_id))) {
            break;
        }
        if (!($post = get_post($revision->post_parent))) {
            break;
        }
        if (!current_user_can('read_post', $revision->ID) || !current_user_can('read_post', $post->ID)) {
            break;
        }
        // Revisions disabled and we're not looking at an autosave
        if ((!nxt_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions')) && !nxt_is_post_autosave($revision)) {
            $redirect = 'edit.php?post_type=' . $post->post_type;
            break;
        }
        $post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
        $revision_title = nxt_post_revision_title($revision, false);
        $h2 = sprintf(__('Revision for &#8220;%1$s&#8221; created on %2$s'), $post_title, $revision_title);
        $title = __('Revisions');
        // Sets up the diff radio buttons
        $left = $revision->ID;
        $right = $post->ID;
        $redirect = false;
        break;
}
// Empty post_type means either malformed object found, or no valid parent was found.
if (!$redirect && empty($post->post_type)) {