X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/wordpress.git/blobdiff_plain/11be8dc178e77d0b46189bbd8e33a216a9b90942..899389d1e4043331309c0433543419258b230b60:/wp-admin/revision.php diff --git a/wp-admin/revision.php b/wp-admin/revision.php index c93357cc..0f48ef9a 100644 --- a/wp-admin/revision.php +++ b/wp-admin/revision.php @@ -1,220 +1,135 @@ post_parent ) ) - break; - if ( !$post = get_post( $revision->post_parent ) ) - break; +wp_reset_vars( array( 'revision', 'action', 'from', 'to' ) ); - if ( !constant('WP_POST_REVISIONS') && !wp_is_post_autosave( $revision ) ) // Revisions disabled and we're not looking at an autosave - break; +$revision_id = absint( $revision ); - check_admin_referer( "restore-post_$post->ID|$revision->ID" ); +$from = is_numeric( $from ) ? absint( $from ) : null; +if ( ! $revision_id ) + $revision_id = absint( $to ); +$redirect = 'edit.php'; - wp_restore_post_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 ) ) +switch ( $action ) { +case 'restore' : + if ( ! $revision = wp_get_post_revision( $revision_id ) ) break; - if ( !current_user_can( 'read_post', $left_revision->ID ) || !current_user_can( 'read_post', $right_revision->ID ) ) + if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) break; - // If we're comparing a revision to itself, redirect to the 'view' page for that revision or the edit page for that post - if ( $left_revision->ID == $right_revision->ID ) { - $redirect = get_edit_post_link( $left_revision->ID ); - include( 'js/revisions-js.php' ); + if ( ! $post = get_post( $revision->post_parent ) ) break; - } - // Don't allow reverse diffs? - if ( strtotime($right_revision->post_modified_gmt) < strtotime($left_revision->post_modified_gmt) ) { - $redirect = add_query_arg( array( 'left' => $right, 'right' => $left ) ); + // Revisions disabled (previously checked autosaves && ! wp_is_post_autosave( $revision )) + if ( ! wp_revisions_enabled( $post ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; break; } - 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 ( !constant('WP_POST_REVISIONS') ) { // Revisions disabled - if ( - // we're not looking at an autosave - ( !wp_is_post_autosave( $left_revision ) && !wp_is_post_autosave( $right_revision ) ) - || - // we're not comparing an autosave to the current post - ( $post->ID !== $left_revision->ID && $post->ID !== $right_revision->ID ) - ) - break; - } - - if ( - // They're the same - $left_revision->ID == $right_revision->ID - || - // Neither is a revision - ( !wp_get_post_revision( $left_revision->ID ) && !wp_get_post_revision( $right_revision->ID ) ) - ) + // Don't allow revision restore when post is locked + if ( wp_check_post_lock( $post->ID ) ) break; - $post_title = '' . get_the_title() . ''; - $h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title ); + check_admin_referer( "restore-post_{$revision->ID}" ); - $left = $left_revision->ID; - $right = $right_revision->ID; - - $redirect = false; + wp_restore_post_revision( $revision->ID ); + $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) ); break; case 'view' : +case 'edit' : default : - if ( !$revision = wp_get_post_revision( $revision_id ) ) + if ( ! $revision = wp_get_post_revision( $revision_id ) ) break; - if ( !$post = get_post( $revision->post_parent ) ) + if ( ! $post = get_post( $revision->post_parent ) ) break; - if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) ) + if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'read_post', $post->ID ) ) break; - if ( !constant('WP_POST_REVISIONS') && !wp_is_post_autosave( $revision ) ) // Revisions disabled and we're not looking at an autosave + // Revisions disabled and we're not looking at an autosave + if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; break; + } - $post_title = '' . get_the_title() . ''; - $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; + $post_edit_link = get_edit_post_link(); + $post_title = '' . _draft_or_post_title() . ''; + $h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title ); + $return_to_post = '' . __( '← Return to post editor' ) . ''; + $title = __( 'Revisions' ); $redirect = false; break; -endswitch; +} -if ( !$redirect && !in_array( $post->post_type, array( 'post', 'page' ) ) ) +// Empty post_type means either malformed object found, or no valid parent was found. +if ( ! $redirect && empty( $post->post_type ) ) $redirect = 'edit.php'; -if ( $redirect ) { +if ( ! empty( $redirect ) ) { wp_redirect( $redirect ); exit; } -if ( 'page' == $post->post_type ) { - $submenu_file = 'edit-pages.php'; - $title = __( 'Page Revisions' ); -} else { - $submenu_file = 'edit.php'; - $title = __( 'Post Revisions' ); -} - -require_once( 'admin-header.php' ); - -?> - -
- | - - - | -
---|---|
- | - |