/**
 * 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.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default is global $post.
 * @param string      $type    'all' (default), 'revision' or 'autosave'
 */
function wp_list_post_revisions($post_id = 0, $type = 'all')
{
    if (!($post = get_post($post_id))) {
        return;
    }
    // $args array with (parent, format, right, left, type) deprecated since 3.6
    if (is_array($type)) {
        $type = !empty($type['type']) ? $type['type'] : $type;
        _deprecated_argument(__FUNCTION__, '3.6.0');
    }
    if (!($revisions = wp_get_post_revisions($post->ID))) {
        return;
    }
    $rows = '';
    foreach ($revisions as $revision) {
        if (!current_user_can('read_post', $revision->ID)) {
            continue;
        }
        $is_autosave = wp_is_post_autosave($revision);
        if ('revision' === $type && $is_autosave || 'autosave' === $type && !$is_autosave) {
            continue;
        }
        $rows .= "\t<li>" . wp_post_revision_title_expanded($revision) . "</li>\n";
    }
    echo "<div class='hide-if-js'><p>" . __('JavaScript must be enabled to use this feature.') . "</p></div>\n";
    echo "<ul class='post-revisions hide-if-no-js'>\n";
    echo $rows;
    echo "</ul>";
}
/**
 * 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.
 *
 * @package WordPress
 * @subpackage Post_Revisions
 * @since 2.6.0
 *
 * @uses wp_get_post_revisions()
 * @uses wp_post_revision_title_expanded()
 * @uses get_edit_post_link()
 * @uses get_the_author_meta()
 *
 * @param int|object $post_id Post ID or post object.
 * @param string $type 'all' (default), 'revision' or 'autosave'
 * @return null
 */
function wp_list_post_revisions($post_id = 0, $type = 'all')
{
    if (!($post = get_post($post_id))) {
        return;
    }
    // $args array with (parent, format, right, left, type) deprecated since 3.6
    if (is_array($type)) {
        $type = !empty($type['type']) ? $type['type'] : $type;
        _deprecated_argument(__FUNCTION__, '3.6');
    }
    if (!($revisions = wp_get_post_revisions($post->ID))) {
        return;
    }
    $rows = '';
    foreach ($revisions as $revision) {
        if (!current_user_can('read_post', $revision->ID)) {
            continue;
        }
        $is_autosave = wp_is_post_autosave($revision);
        if ('revision' === $type && $is_autosave || 'autosave' === $type && !$is_autosave) {
            continue;
        }
        $rows .= "\t<li>" . wp_post_revision_title_expanded($revision) . "</li>\n";
    }
    echo "<ul class='post-revisions'>\n";
    echo $rows;
    // if the post was previously restored from a revision
    // show the restore event details
    if ($restored_from_meta = get_post_meta($post->ID, '_post_restored_from', true)) {
        $author = get_user_by('id', $restored_from_meta['restored_by_user']);
        /* translators: revision date format, see http://php.net/date */
        $datef = _x('j F, Y @ G:i:s', 'revision date format');
        $date = date_i18n($datef, strtotime($restored_from_meta['restored_time']));
        $time_diff = human_time_diff($restored_from_meta['restored_time']);
        ?>
		<hr />
		<div id="revisions-meta-restored">
			<?php 
        printf(__('Previously restored by %1$s %2$s, %3$s ago (%4$s)'), get_avatar($author->ID, 24), $author->display_name, $time_diff, $date);
        ?>
		</div>
		<?php 
        echo "</ul>";
    }
}