/** * 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>"; } }
nxt_enqueue_script('post'); if (post_type_supports($post_type, 'editor') || post_type_supports($post_type, 'thumbnail')) { add_thickbox(); nxt_enqueue_script('media-upload'); } /** * Post ID global * @name $post_ID * @var int */ $post_ID = isset($post_ID) ? (int) $post_ID : 0; $user_ID = isset($user_ID) ? (int) $user_ID : 0; $action = isset($action) ? $action : ''; $messages = array(); $messages['post'] = array(0 => '', 1 => sprintf(__('Post updated. <a href="%s">View post</a>'), esc_url(get_permalink($post_ID))), 2 => __('Custom field updated.'), 3 => __('Custom field deleted.'), 4 => __('Post updated.'), 5 => isset($_GET['revision']) ? sprintf(__('Post restored to revision from %s'), nxt_post_revision_title((int) $_GET['revision'], false)) : false, 6 => sprintf(__('Post published. <a href="%s">View post</a>'), esc_url(get_permalink($post_ID))), 7 => __('Post saved.'), 8 => sprintf(__('Post submitted. <a target="_blank" href="%s">Preview post</a>'), esc_url(add_query_arg('preview', 'true', get_permalink($post_ID)))), 9 => sprintf(__('Post scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview post</a>'), date_i18n(__('M j, Y @ G:i'), strtotime($post->post_date)), esc_url(get_permalink($post_ID))), 10 => sprintf(__('Post draft updated. <a target="_blank" href="%s">Preview post</a>'), esc_url(add_query_arg('preview', 'true', get_permalink($post_ID))))); $messages['page'] = array(0 => '', 1 => sprintf(__('Page updated. <a href="%s">View page</a>'), esc_url(get_permalink($post_ID))), 2 => __('Custom field updated.'), 3 => __('Custom field deleted.'), 4 => __('Page updated.'), 5 => isset($_GET['revision']) ? sprintf(__('Page restored to revision from %s'), nxt_post_revision_title((int) $_GET['revision'], false)) : false, 6 => sprintf(__('Page published. <a href="%s">View page</a>'), esc_url(get_permalink($post_ID))), 7 => __('Page saved.'), 8 => sprintf(__('Page submitted. <a target="_blank" href="%s">Preview page</a>'), esc_url(add_query_arg('preview', 'true', get_permalink($post_ID)))), 9 => sprintf(__('Page scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview page</a>'), date_i18n(__('M j, Y @ G:i'), strtotime($post->post_date)), esc_url(get_permalink($post_ID))), 10 => sprintf(__('Page draft updated. <a target="_blank" href="%s">Preview page</a>'), esc_url(add_query_arg('preview', 'true', get_permalink($post_ID))))); $messages = apply_filters('post_updated_messages', $messages); $message = false; if (isset($_GET['message'])) { $_GET['message'] = absint($_GET['message']); if (isset($messages[$post_type][$_GET['message']])) { $message = $messages[$post_type][$_GET['message']]; } elseif (!isset($messages[$post_type]) && isset($messages['post'][$_GET['message']])) { $message = $messages['post'][$_GET['message']]; } } $notice = false; $form_extra = ''; if ('auto-draft' == $post->post_status) { if ('edit' == $action) { $post->post_title = '';
</h2> <table class="form-table ie-fixed"> <col class="th" /> <?php if ('diff' == $action) { ?> <tr id="revision"> <th scope="row"></th> <th scope="col" class="th-full"> <span class="alignleft"><?php printf(__('Older: %s'), nxt_post_revision_title($left_revision)); ?> </span> <span class="alignright"><?php printf(__('Newer: %s'), nxt_post_revision_title($right_revision)); ?> </span> </th> </tr> <?php } // use get_post_to_edit filters? $identical = true; foreach (_nxt_post_revision_fields() as $field => $field_title) { if ('diff' == $action) { $left_content = apply_filters("_nxt_post_revision_field_{$field}", $left_revision->{$field}, $field); $right_content = apply_filters("_nxt_post_revision_field_{$field}", $right_revision->{$field}, $field); if (!($content = nxt_text_diff($left_content, $right_content))) { continue; }