home *** CD-ROM | disk | FTP | other *** search
- <?php
-
- require_once('admin.php');
-
- wp_reset_vars(array('revision', 'left', 'right', 'action'));
- $revision_id = absint($revision);
- $diff = absint($diff);
- $left = absint($left);
- $right = absint($right);
-
- $parent_file = $redirect = 'edit.php';
-
- switch ( $action ) :
- case 'delete' : // stubs
- case 'edit' :
- if ( constant('WP_POST_REVISIONS') ) // stub
- $redirect = remove_query_arg( 'action' );
- else // Revisions disabled
- $redirect = 'edit.php';
- break;
- case 'restore' :
- if ( !$revision = wp_get_post_revision( $revision_id ) )
- break;
- if ( !current_user_can( 'edit_post', $revision->post_parent ) )
- break;
- if ( !$post = get_post( $revision->post_parent ) )
- break;
-
- if ( !constant('WP_POST_REVISIONS') && !wp_is_post_autosave( $revision ) ) // Revisions disabled and we're not looking at an autosave
- break;
-
- check_admin_referer( "restore-post_$post->ID|$revision->ID" );
-
- 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 ) )
- break;
-
- if ( !current_user_can( 'read_post', $left_revision->ID ) || !current_user_can( 'read_post', $right_revision->ID ) )
- 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' );
- 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 ) );
- 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 ) )
- )
- 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_post_revision( $revision_id ) )
- break;
- if ( !$post = get_post( $revision->post_parent ) )
- break;
-
- 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
- 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;
-
- $redirect = false;
- break;
- endswitch;
-
- if ( !$redirect && !in_array( $post->post_type, array( 'post', 'page' ) ) )
- $redirect = 'edit.php';
-
- if ( $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' );
-
- ?>
-
- <div class="wrap">
-
- <h2 class="long-header"><?php echo $h2; ?></h2>
-
- <table class="form-table ie-fixed">
- <col class="th" />
- <?php if ( 'diff' == $action ) : ?>
- <tr id="revision">
- <th scope="row"></th>
- <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>
- </th>
- </tr>
- <?php endif;
-
- // use get_post_to_edit filters?
- $identical = true;
- foreach ( _wp_post_revision_fields() as $field => $field_title ) :
- if ( 'diff' == $action ) {
- $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field );
- $right_content = apply_filters( "_wp_post_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_post_revision_field_$field", 'htmlspecialchars' );
- $content = apply_filters( "_wp_post_revision_field_$field", $revision->$field, $field );
- }
- ?>
-
- <tr id="revision-field-<?php echo $field; ?>">
- <th scope="row"><?php echo wp_specialchars( $field_title ); ?></th>
- <td><div class="pre"><?php echo $content; ?></div></td>
- </tr>
-
- <?php
-
- endforeach;
-
- if ( 'diff' == $action && $identical ) :
-
- ?>
-
- <tr><td colspan="2"><div class="updated"><p><?php _e( 'These revisions are identical.' ); ?></p></div></td></tr>
-
- <?php
-
- endif;
-
- ?>
-
- </table>
-
- <br class="clear" />
-
- <h2><?php echo $title; ?></h2>
-
- <?php
-
- $args = array( 'format' => 'form-table', 'parent' => true, 'right' => $right, 'left' => $left );
- if ( !constant( 'WP_POST_REVISIONS' ) )
- $args['type'] = 'autosave';
-
- wp_list_post_revisions( $post, $args );
-
- ?>
-
- </div>
-
- <?php
-
- require_once( 'admin-footer.php' );
-