mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-07-08 19:20:03 +00:00
Move autosave to post revisions. Props mdawaffe. see #6775
git-svn-id: https://develop.svn.wordpress.org/trunk@7907 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -2,117 +2,156 @@
|
||||
|
||||
require_once('admin.php');
|
||||
|
||||
$parent_file = 'edit.php';
|
||||
$submenu_file = 'edit.php';
|
||||
|
||||
wp_reset_vars(array('revision', 'diff', 'restore'));
|
||||
|
||||
wp_reset_vars(array('revision', 'left', 'right', 'action'));
|
||||
$revision_id = absint($revision);
|
||||
$diff = absint($diff);
|
||||
$left = absint($left);
|
||||
$right = absint($right);
|
||||
|
||||
if ( $diff ) {
|
||||
$restore = false;
|
||||
$revision = get_post( $revision_id );
|
||||
$post = 'revision' == $revision->post_type ? get_post( $revision->post_parent ) : get_post( $revision_id );
|
||||
$left_revision = get_post( $diff );
|
||||
|
||||
$parent_file = $redirect = 'edit.php';
|
||||
$submenu_file = 'edit.php';
|
||||
$title = __( 'Post Revision' );
|
||||
|
||||
|
||||
switch ( $action ) :
|
||||
case 'delete' : // stubs
|
||||
case 'edit' :
|
||||
$redirect = remove_query_arg( 'action' );
|
||||
break;
|
||||
case 'restore' :
|
||||
if ( !current_user_can( 'edit_post', $revision->post_parent ) )
|
||||
break;
|
||||
if ( !$revision = wp_get_revision( $revision_id ) )
|
||||
break;
|
||||
if ( !$post = get_post( $revision->post_parent ) )
|
||||
break;
|
||||
|
||||
check_admin_referer( "restore-post_$post->ID|$revision->ID" );
|
||||
|
||||
wp_restore_revision( $revision->ID );
|
||||
$redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) );
|
||||
break;
|
||||
case 'diff' :
|
||||
if ( !$left_revision = get_post( $left ) )
|
||||
break;
|
||||
if ( !$right_revision = get_post( $right ) )
|
||||
break;
|
||||
|
||||
if ( !current_user_can( 'edit_post', $left_revision->ID ) || !current_user_can( 'edit_post', $right_revision->ID ) )
|
||||
break;
|
||||
|
||||
// Don't allow reverse diffs?
|
||||
if ( strtotime($revision->post_modified_gmt) < strtotime($left_revision->post_modified_gmt) ) {
|
||||
wp_redirect( add_query_arg( array( 'diff' => $revision->ID, 'revision' => $diff ) ) );
|
||||
exit;
|
||||
if ( strtotime($right_revision->post_modified_gmt) < strtotime($left_revision->post_modified_gmt) ) {
|
||||
$redirect = add_query_arg( array( 'left' => $right, 'right' => $left ) );
|
||||
break;
|
||||
}
|
||||
|
||||
$h2 = __( 'Compare Revisions of “%1$s”' );
|
||||
$right = $revision->ID;
|
||||
$left = $left_revision->ID;
|
||||
if ( $left_revision->ID == $right_revision->post_parent ) // right is a revision of left
|
||||
$post =& $left_revision;
|
||||
elseif ( $left_revision->post_parent == $right_revision->ID ) // left is a revision of right
|
||||
$post =& $right_revision;
|
||||
elseif ( $left_revision->post_parent == $right_revision->post_parent ) // both are revisions of common parent
|
||||
$post = get_post( $left_revision->post_parent );
|
||||
else
|
||||
break; // Don't diff two unrelated revisions
|
||||
|
||||
if (
|
||||
// They're the same
|
||||
$left_revision->ID == $revision->ID
|
||||
||
|
||||
// They don't have a comment parent (and we're not comparing a revision to it's post)
|
||||
( $left_revision->ID != $revision->post_parent && $left_revision->post_parent != $revision->ID && $left_revision->post_parent != $revision->post_parent )
|
||||
$left_revision->ID == $right_revision->ID
|
||||
||
|
||||
// Neither is a revision
|
||||
( !wp_get_revision( $left_revision->ID ) && !wp_get_revision( $revision->ID ) )
|
||||
) {
|
||||
wp_redirect( get_edit_post_link( $revision->ID, 'url' ) );
|
||||
exit();
|
||||
}
|
||||
} else {
|
||||
$revision = wp_get_revision( $revision_id );
|
||||
$post = get_post( $revision->post_parent );
|
||||
$h2 = __( 'Post Revision for “%1$s” created on %2$s' );
|
||||
$right = $post->ID;
|
||||
( !wp_get_revision( $left_revision->ID ) && !wp_get_revision( $right_revision->ID ) )
|
||||
)
|
||||
break;
|
||||
|
||||
$post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
|
||||
$h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title );
|
||||
|
||||
$left = $left_revision->ID;
|
||||
$right = $right_revision->ID;
|
||||
|
||||
$redirect = false;
|
||||
break;
|
||||
case 'view' :
|
||||
default :
|
||||
if ( !$revision = wp_get_revision( $revision_id ) )
|
||||
break;
|
||||
if ( !$post = get_post( $revision->post_parent ) )
|
||||
break;
|
||||
|
||||
if ( !current_user_can( 'edit_post', $revision->ID ) || !current_user_can( 'edit_post', $post->ID ) )
|
||||
break;
|
||||
|
||||
$post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
|
||||
$revision_title = wp_post_revision_title( $revision, false );
|
||||
$h2 = sprintf( __( 'Post Revision for “%1$s” created on %2$s' ), $post_title, $revision_title );
|
||||
|
||||
// Sets up the diff radio buttons
|
||||
$left = $revision->ID;
|
||||
}
|
||||
$right = $post->ID;
|
||||
|
||||
if ( !$revision || !$post ) {
|
||||
wp_redirect("edit.php");
|
||||
exit();
|
||||
}
|
||||
$redirect = false;
|
||||
break;
|
||||
endswitch;
|
||||
|
||||
if ( $restore && current_user_can( 'edit_post', $revision->post_parent ) ) {
|
||||
check_admin_referer( "restore-post_$post->ID|$revision->ID" );
|
||||
wp_restore_revision( $revision->ID );
|
||||
wp_redirect( add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) ) );
|
||||
if ( $redirect ) {
|
||||
wp_redirect( $redirect );
|
||||
exit;
|
||||
}
|
||||
|
||||
// Converts post_author ID# into name
|
||||
add_filter( '_wp_revision_field_post_author', 'get_author_name' );
|
||||
|
||||
$title = __( 'Post Revision' );
|
||||
|
||||
require_once( 'admin-header.php' );
|
||||
|
||||
$post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
|
||||
$revision_time = wp_post_revision_time( $revision );
|
||||
?>
|
||||
|
||||
<div class="wrap">
|
||||
|
||||
<h2 style="padding-right: 0"><?php printf( $h2, $post_title, $revision_time ); ?></h2>
|
||||
<h2 class="long-header"><?php echo $h2; ?></h2>
|
||||
|
||||
<table class="form-table ie-fixed">
|
||||
<col class="th" />
|
||||
<?php if ( $diff ) : ?>
|
||||
|
||||
<?php if ( 'diff' == $action ) : ?>
|
||||
<tr id="revision">
|
||||
<th scope="row"></th>
|
||||
<th scope="col" class="th-full"><?php printf( __('Older: %s'), wp_post_revision_time( $left_revision ) ); ?></td>
|
||||
<th scope="col" class="th-full"><?php printf( __('Newer: %s'), wp_post_revision_time( $revision ) ); ?></td>
|
||||
<th scope="col" class="th-full">
|
||||
<span class="alignleft"><?php printf( __('Older: %s'), wp_post_revision_title( $left_revision ) ); ?></span>
|
||||
<span class="alignright"><?php printf( __('Newer: %s'), wp_post_revision_title( $right_revision ) ); ?></span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php endif;
|
||||
|
||||
// use get_post_to_edit ?
|
||||
// use get_post_to_edit filters?
|
||||
$identical = true;
|
||||
foreach ( _wp_revision_fields() as $field => $field_title ) :
|
||||
if ( !$diff )
|
||||
add_filter( "_wp_revision_field_$field", 'htmlspecialchars' );
|
||||
$content = apply_filters( "_wp_revision_field_$field", $revision->$field, $field );
|
||||
if ( $diff ) {
|
||||
if ( 'diff' == $action ) {
|
||||
$left_content = apply_filters( "_wp_revision_field_$field", $left_revision->$field, $field );
|
||||
if ( !$content = wp_text_diff( $left_content, $content ) )
|
||||
continue;
|
||||
$right_content = apply_filters( "_wp_revision_field_$field", $right_revision->$field, $field );
|
||||
if ( !$content = wp_text_diff( $left_content, $right_content ) )
|
||||
continue; // There is no difference between left and right
|
||||
$identical = false;
|
||||
} else {
|
||||
add_filter( "_wp_revision_field_$field", 'htmlspecialchars' );
|
||||
$content = apply_filters( "_wp_revision_field_$field", $revision->$field, $field );
|
||||
}
|
||||
$identical = false;
|
||||
?>
|
||||
|
||||
<tr id="revision-field-<?php echo $field; ?>"?>
|
||||
<tr id="revision-field-<?php echo $field; ?>">
|
||||
<th scope="row"><?php echo wp_specialchars( $field_title ); ?></th>
|
||||
<td colspan="2"><pre><?php echo $content; ?></pre></td>
|
||||
<td><pre><?php echo $content; ?></pre></td>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
|
||||
endforeach;
|
||||
|
||||
if ( $diff && $identical ) :
|
||||
if ( 'diff' == $action && $identical ) :
|
||||
|
||||
?>
|
||||
|
||||
<tr><td colspan="3"><div class="updated"><p><?php _e( 'These revisions are identical' ); ?></p></div></td></tr>
|
||||
<tr><td colspan="2"><div class="updated"><p><?php _e( 'These revisions are identical.' ); ?></p></div></td></tr>
|
||||
|
||||
<?php
|
||||
|
||||
@@ -127,6 +166,7 @@ endif;
|
||||
<h2><?php _e( 'Post Revisions' ); ?></h2>
|
||||
|
||||
<?php
|
||||
wp_list_post_revisions( $post, array( 'format' => 'form-table', 'exclude' => $revision->ID, 'parent' => true, 'right' => $right, 'left' => $left ) );
|
||||
|
||||
require_once( 'admin-footer.php' );
|
||||
wp_list_post_revisions( $post, array( 'format' => 'form-table', 'parent' => true, 'right' => $right, 'left' => $left ) );
|
||||
|
||||
require_once( 'admin-footer.php' );
|
||||
|
||||
Reference in New Issue
Block a user