wp/wp-admin/revision.php
changeset 16 a86126ab1dd4
parent 9 177826044cd9
child 18 be944660c56a
equal deleted inserted replaced
15:3d4e9c994f10 16:a86126ab1dd4
     8  * @subpackage Administration
     8  * @subpackage Administration
     9  * @since 2.6.0
     9  * @since 2.6.0
    10  */
    10  */
    11 
    11 
    12 /** WordPress Administration Bootstrap */
    12 /** WordPress Administration Bootstrap */
    13 require_once( dirname( __FILE__ ) . '/admin.php' );
    13 require_once __DIR__ . '/admin.php';
    14 
    14 
    15 require ABSPATH . 'wp-admin/includes/revision.php';
    15 require ABSPATH . 'wp-admin/includes/revision.php';
    16 
    16 
    17 /**
    17 /**
    18  * @global int    $revision Optional. The revision ID.
    18  * @global int    $revision Optional. The revision ID.
    31 }
    31 }
    32 $redirect = 'edit.php';
    32 $redirect = 'edit.php';
    33 
    33 
    34 switch ( $action ) {
    34 switch ( $action ) {
    35 	case 'restore':
    35 	case 'restore':
    36 		if ( ! $revision = wp_get_post_revision( $revision_id ) ) {
    36 		$revision = wp_get_post_revision( $revision_id );
       
    37 		if ( ! $revision ) {
    37 			break;
    38 			break;
    38 		}
    39 		}
    39 
    40 
    40 		if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) {
    41 		if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) {
    41 			break;
    42 			break;
    42 		}
    43 		}
    43 
    44 
    44 		if ( ! $post = get_post( $revision->post_parent ) ) {
    45 		$post = get_post( $revision->post_parent );
       
    46 		if ( ! $post ) {
    45 			break;
    47 			break;
    46 		}
    48 		}
    47 
    49 
    48 		// Restore if revisions are enabled or this is an autosave.
    50 		// Don't restore if revisions are disabled and this is not an autosave.
    49 		if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
    51 		if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
    50 			$redirect = 'edit.php?post_type=' . $post->post_type;
    52 			$redirect = 'edit.php?post_type=' . $post->post_type;
    51 			break;
    53 			break;
    52 		}
    54 		}
    53 
    55 
    54 		// Don't allow revision restore when post is locked
    56 		// Don't restore if the post is locked.
    55 		if ( wp_check_post_lock( $post->ID ) ) {
    57 		if ( wp_check_post_lock( $post->ID ) ) {
    56 			break;
    58 			break;
    57 		}
    59 		}
    58 
    60 
    59 		check_admin_referer( "restore-post_{$revision->ID}" );
    61 		check_admin_referer( "restore-post_{$revision->ID}" );
    60 
    62 
       
    63 		/*
       
    64 		 * Ensure the global $post remains the same after revision is restored.
       
    65 		 * Because wp_insert_post() and wp_transition_post_status() are called
       
    66 		 * during the process, plugins can unexpectedly modify $post.
       
    67 		 */
       
    68 		$backup_global_post = clone $post;
       
    69 
    61 		wp_restore_post_revision( $revision->ID );
    70 		wp_restore_post_revision( $revision->ID );
       
    71 
       
    72 		// Restore the global $post as it was before.
       
    73 		$post = $backup_global_post;
       
    74 
    62 		$redirect = add_query_arg(
    75 		$redirect = add_query_arg(
    63 			array(
    76 			array(
    64 				'message'  => 5,
    77 				'message'  => 5,
    65 				'revision' => $revision->ID,
    78 				'revision' => $revision->ID,
    66 			),
    79 			),
    68 		);
    81 		);
    69 		break;
    82 		break;
    70 	case 'view':
    83 	case 'view':
    71 	case 'edit':
    84 	case 'edit':
    72 	default:
    85 	default:
    73 		if ( ! $revision = wp_get_post_revision( $revision_id ) ) {
    86 		$revision = wp_get_post_revision( $revision_id );
       
    87 		if ( ! $revision ) {
    74 			break;
    88 			break;
    75 		}
    89 		}
    76 		if ( ! $post = get_post( $revision->post_parent ) ) {
    90 
       
    91 		$post = get_post( $revision->post_parent );
       
    92 		if ( ! $post ) {
    77 			break;
    93 			break;
    78 		}
    94 		}
    79 
    95 
    80 		if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'edit_post', $revision->post_parent ) ) {
    96 		if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'edit_post', $revision->post_parent ) ) {
    81 			break;
    97 			break;
    82 		}
    98 		}
    83 
    99 
    84 		// Revisions disabled and we're not looking at an autosave
   100 		// Bail if revisions are disabled and this is not an autosave.
    85 		if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
   101 		if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
    86 			$redirect = 'edit.php?post_type=' . $post->post_type;
   102 			$redirect = 'edit.php?post_type=' . $post->post_type;
    87 			break;
   103 			break;
    88 		}
   104 		}
    89 
   105 
    90 		$post_edit_link = get_edit_post_link();
   106 		$post_edit_link = get_edit_post_link();
    91 		$post_title     = '<a href="' . $post_edit_link . '">' . _draft_or_post_title() . '</a>';
   107 		$post_title     = '<a href="' . $post_edit_link . '">' . _draft_or_post_title() . '</a>';
    92 		/* translators: %s: post title */
   108 		/* translators: %s: Post title. */
    93 		$h1             = sprintf( __( 'Compare Revisions of &#8220;%s&#8221;' ), $post_title );
   109 		$h1             = sprintf( __( 'Compare Revisions of &#8220;%s&#8221;' ), $post_title );
    94 		$return_to_post = '<a href="' . $post_edit_link . '">' . __( '&larr; Return to editor' ) . '</a>';
   110 		$return_to_post = '<a href="' . $post_edit_link . '">' . __( '&larr; Return to editor' ) . '</a>';
    95 		$title          = __( 'Revisions' );
   111 		$title          = __( 'Revisions' );
    96 
   112 
    97 		$redirect = false;
   113 		$redirect = false;
   108 	exit;
   124 	exit;
   109 }
   125 }
   110 
   126 
   111 // This is so that the correct "Edit" menu item is selected.
   127 // This is so that the correct "Edit" menu item is selected.
   112 if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) {
   128 if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) {
   113 	$parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
   129 	$parent_file = 'edit.php?post_type=' . $post->post_type;
   114 } else {
   130 } else {
   115 	$parent_file = $submenu_file = 'edit.php';
   131 	$parent_file = 'edit.php';
   116 }
   132 }
       
   133 $submenu_file = $parent_file;
   117 
   134 
   118 wp_enqueue_script( 'revisions' );
   135 wp_enqueue_script( 'revisions' );
   119 wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) );
   136 wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) );
   120 
   137 
   121 /* Revisions Help Tab */
   138 /* Revisions Help Tab */
   134 		'content' => $revisions_overview,
   151 		'content' => $revisions_overview,
   135 	)
   152 	)
   136 );
   153 );
   137 
   154 
   138 $revisions_sidebar  = '<p><strong>' . __( 'For more information:' ) . '</strong></p>';
   155 $revisions_sidebar  = '<p><strong>' . __( 'For more information:' ) . '</strong></p>';
   139 $revisions_sidebar .= '<p>' . __( '<a href="https://codex.wordpress.org/Revision_Management">Revisions Management</a>' ) . '</p>';
   156 $revisions_sidebar .= '<p>' . __( '<a href="https://wordpress.org/support/article/revisions/">Revisions Management</a>' ) . '</p>';
   140 $revisions_sidebar .= '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>';
   157 $revisions_sidebar .= '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>';
   141 
   158 
   142 get_current_screen()->set_help_sidebar( $revisions_sidebar );
   159 get_current_screen()->set_help_sidebar( $revisions_sidebar );
   143 
   160 
   144 require_once( ABSPATH . 'wp-admin/admin-header.php' );
   161 require_once ABSPATH . 'wp-admin/admin-header.php';
   145 
   162 
   146 ?>
   163 ?>
   147 
   164 
   148 <div class="wrap">
   165 <div class="wrap">
   149 	<h1 class="long-header"><?php echo $h1; ?></h1>
   166 	<h1 class="long-header"><?php echo $h1; ?></h1>
   150 	<?php echo $return_to_post; ?>
   167 	<?php echo $return_to_post; ?>
   151 </div>
   168 </div>
   152 <?php
   169 <?php
   153 wp_print_revision_templates();
   170 wp_print_revision_templates();
   154 
   171 
   155 require_once( ABSPATH . 'wp-admin/admin-footer.php' );
   172 require_once ABSPATH . 'wp-admin/admin-footer.php';