wp/wp-admin/includes/revision.php
author ymh <ymh.work@gmail.com>
Thu, 07 Nov 2013 00:08:07 +0000
changeset 1 f6eb5a861d2f
parent 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
remove unnessary files. Make timthumb work
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * WordPress Administration Revisions API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * @subpackage Administration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * Get the revision UI diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * @param object|int $post         The post object. Also accepts a post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * @param int        $compare_from The revision ID to compare from.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * @param int        $compare_to   The revision ID to come to.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * @return array|bool Associative array of a post's revisioned fields and their diffs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 *                    Or, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
function wp_get_revision_ui_diff( $post, $compare_from, $compare_to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
	if ( ! $post = get_post( $post ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
	if ( $compare_from ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		if ( ! $compare_from = get_post( $compare_from ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		// If we're dealing with the first revision...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		$compare_from = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	if ( ! $compare_to = get_post( $compare_to ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
	// If comparing revisions, make sure we're dealing with the right post parent.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	// The parent post may be a 'revision' when revisions are disabled and we're looking at autosaves.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	if ( $compare_from && $compare_from->post_parent !== $post->ID && $compare_from->ID !== $post->ID )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
	if ( $compare_to->post_parent !== $post->ID && $compare_to->ID !== $post->ID )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
	if ( $compare_from && strtotime( $compare_from->post_date_gmt ) > strtotime( $compare_to->post_date_gmt ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		$temp = $compare_from;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		$compare_from = $compare_to;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		$compare_to = $temp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
	// Add default title if title field is empty
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
	if ( $compare_from && empty( $compare_from->post_title ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		$compare_from->post_title = __( '(no title)' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
	if ( empty( $compare_to->post_title ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		$compare_to->post_title = __( '(no title)' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	$return = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
	foreach ( _wp_post_revision_fields() as $field => $name ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		 * Contextually filter a post revision field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		 * The dynamic portion of the hook name, $field, corresponds to each of the post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		 * fields of the revision object being iterated over in a foreach statement.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		 * @param string  $compare_from->$field The current revision field to compare to or from.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		 * @param string  $field                The current revision field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		 * @param WP_Post $compare_from         The revision post object to compare to or from.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		 * @param string  null                  The context of whether the current revision is the old or the new one. Values are 'to' or 'from'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		$content_from = $compare_from ? apply_filters( "_wp_post_revision_field_$field", $compare_from->$field, $field, $compare_from, 'from' ) : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
		/** This filter is documented in wp-admin/includes/revision.php */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		$content_to = apply_filters( "_wp_post_revision_field_$field", $compare_to->$field, $field, $compare_to, 'to' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		$diff = wp_text_diff( $content_from, $content_to, array( 'show_split_view' => true ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		if ( ! $diff && 'post_title' === $field ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
			// It's a better user experience to still show the Title, even if it didn't change.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			// No, you didn't see this.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			$diff = '<table class="diff"><colgroup><col class="content diffsplit left"><col class="content diffsplit middle"><col class="content diffsplit right"></colgroup><tbody><tr>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			$diff .= '<td>' . esc_html( $compare_from->post_title ) . '</td><td></td><td>' . esc_html( $compare_to->post_title ) . '</td>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			$diff .= '</tr></tbody>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
			$diff .= '</table>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		if ( $diff ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			$return[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				'id' => $field,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				'name' => $name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				'diff' => $diff,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
 * Prepare revisions for JavaScript.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
 * @param object|int $post                 The post object. Also accepts a post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
 * @param int        $selected_revision_id The selected revision ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
 * @param int        $from                 Optional. The revision ID to compare from.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
 * @return array An associative array of revision data and related settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
function wp_prepare_revisions_for_js( $post, $selected_revision_id, $from = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
	$post = get_post( $post );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
	$revisions = $authors = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	$now_gmt = time();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
	$revisions = wp_get_post_revisions( $post->ID, array( 'order' => 'ASC', 'check_enabled' => false ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
	// If revisions are disabled, we only want autosaves and the current post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
	if ( ! wp_revisions_enabled( $post ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		foreach ( $revisions as $revision_id => $revision ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
			if ( ! wp_is_post_autosave( $revision ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
				unset( $revisions[ $revision_id ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		$revisions = array( $post->ID => $post ) + $revisions;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
	$show_avatars = get_option( 'show_avatars' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
	cache_users( wp_list_pluck( $revisions, 'post_author' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	$can_restore = current_user_can( 'edit_post', $post->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	foreach ( $revisions as $revision ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
		$modified = strtotime( $revision->post_modified );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		$modified_gmt = strtotime( $revision->post_modified_gmt );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
		if ( $can_restore ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			$restore_link = str_replace( '&amp;', '&', wp_nonce_url(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
				add_query_arg(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
					array( 'revision' => $revision->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
						'action' => 'restore' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
						admin_url( 'revision.php' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
				),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
				"restore-post_{$revision->ID}"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		if ( ! isset( $authors[ $revision->post_author ] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			$authors[ $revision->post_author ] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
				'id' => (int) $revision->post_author,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
				'avatar' => $show_avatars ? get_avatar( $revision->post_author, 32 ) : '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
				'name' => get_the_author_meta( 'display_name', $revision->post_author ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		$autosave = (bool) wp_is_post_autosave( $revision );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		$current = ! $autosave && $revision->post_modified_gmt === $post->post_modified_gmt;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		if ( $current && ! empty( $current_id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			// If multiple revisions have the same post_modified_gmt, highest ID is current.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			if ( $current_id < $revision->ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
				$revisions[ $current_id ]['current'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
				$current_id = $revision->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
				$current = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		} elseif ( $current ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			$current_id = $revision->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
		$revisions[ $revision->ID ] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
			'id'         => $revision->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			'title'      => get_the_title( $post->ID ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			'author'     => $authors[ $revision->post_author ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
			'date'       => date_i18n( __( 'M j, Y @ G:i' ), $modified ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
			'dateShort'  => date_i18n( _x( 'j M @ G:i', 'revision date short format' ), $modified ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
			'timeAgo'    => sprintf( __( '%s ago' ), human_time_diff( $modified_gmt, $now_gmt ) ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			'autosave'   => $autosave,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			'current'    => $current,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
			'restoreUrl' => $can_restore ? $restore_link : false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
	// If a post has been saved since the last revision (no revisioned fields were changed)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
	// we may not have a "current" revision. Mark the latest revision as "current".
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
	if ( empty( $current_id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
		if ( $revisions[ $revision->ID ]['autosave'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			$revision = end( $revisions );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
			while ( $revision['autosave'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
				$revision = prev( $revisions );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			$current_id = $revision['id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
			$current_id = $revision->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		$revisions[ $current_id ]['current'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
	// Now, grab the initial diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
	$compare_two_mode = is_numeric( $from );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	if ( ! $compare_two_mode ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		$found = array_search( $selected_revision_id, array_keys( $revisions ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		if ( $found ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
			$from = array_keys( array_slice( $revisions, $found - 1, 1, true ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
			$from = reset( $from );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
			$from = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
	$from = absint( $from );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	$diffs = array( array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
		'id' => $from . ':' . $selected_revision_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		'fields' => wp_get_revision_ui_diff( $post->ID, $from, $selected_revision_id ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	return array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
		'postId'           => $post->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
		'nonce'            => wp_create_nonce( 'revisions-ajax-nonce' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
		'revisionData'     => array_values( $revisions ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		'to'               => $selected_revision_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
		'from'             => $from,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		'diffData'         => $diffs,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		'baseUrl'          => parse_url( admin_url( 'revision.php' ), PHP_URL_PATH ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		'compareTwoMode'   => absint( $compare_two_mode ), // Apparently booleans are not allowed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		'revisionIds'      => array_keys( $revisions ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
}