wp-admin/revision.php


Lines:

1 to 100 of 177
<?php

/**
 * Revisions administration panel
 *
 * Requires wp-admin/includes/revision.php.
 *
 * @package WordPress
 * @subpackage Administration
 * @since 2.6.0
 */


/** WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/includes/revision.php';


/**
 * @global int    $revision Optional. The revision ID.
 * @global string $action   The action to take.
 *                          Accepts 'restore', 'view' or 'edit'.
 * @global int    $from     The revision to compare from.
 * @global int    $to       Optional, required if revision missing. The revision to compare to.
 */
wp_reset_vars( array( 'revision', 'action', 'from', 'to' ) );

$revision_id = absint( $revision );

$from = is_numeric( $from ) ? absint( $from ) : null;
if ( ! $revision_id ) {
  $revision_id = absint( $to );
}
$redirect = 'edit.php';

switch ( $action ) {
  case 'restore':
    $revision = wp_get_post_revision( $revision_id );
    if ( ! $revision ) {
      break;
    }

    if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) {
      break;
    }

    $post = get_post( $revision->post_parent );
    if ( ! $post ) {
      break;
    }

    // Don't restore if revisions are disabled and this is not an autosave.
    if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
      $redirect = 'edit.php?post_type=' . $post->post_type;
      break;
    }

    // Don't restore if the post is locked.
    if ( wp_check_post_lock( $post->ID ) ) {
      break;
    }

    check_admin_referer( "restore-post_{$revision->ID}" );

    /*
		 * Ensure the global $post remains the same after revision is restored.
		 * Because wp_insert_post() and wp_transition_post_status() are called
		 * during the process, plugins can unexpectedly modify $post.
		 */
    $backup_global_post = clone $post;

    wp_restore_post_revision( $revision->ID );

    // Restore the global $post as it was before.
    $post = $backup_global_post;

    $redirect = add_query_arg(
      array(
        'message'  => 5,
        'revision' => $revision->ID,
      ),
      get_edit_post_link( $post->ID, 'url' )
    );
    break;
  case 'view':
  case 'edit':
  default:
    $revision = wp_get_post_revision( $revision_id );
    if ( ! $revision ) {
      break;
    }

    $post = get_post( $revision->post_parent );
    if ( ! $post ) {
      break;
    }

    if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'edit_post', $revision->post_parent ) ) {
      break;

 View on GitHub View on Trac

Called by

    Invoked by

      Calls

      Call hooks

      API Letters: ,,,