home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Blogs / wordpress2.6.exe / wordpress2.6 / wp-admin / revision.php < prev    next >
Encoding:
PHP Script  |  2008-07-29  |  6.0 KB  |  214 lines

  1. <?php
  2.  
  3. require_once('admin.php');
  4.  
  5. wp_reset_vars(array('revision', 'left', 'right', 'action'));
  6. $revision_id = absint($revision);
  7. $diff        = absint($diff);
  8. $left        = absint($left);
  9. $right       = absint($right);
  10.  
  11. $parent_file = $redirect = 'edit.php';
  12.  
  13. switch ( $action ) :
  14. case 'delete' : // stubs
  15. case 'edit' :
  16.     if ( constant('WP_POST_REVISIONS') ) // stub
  17.         $redirect = remove_query_arg( 'action' );
  18.     else // Revisions disabled
  19.         $redirect = 'edit.php';
  20.     break;
  21. case 'restore' :
  22.     if ( !$revision = wp_get_post_revision( $revision_id ) )
  23.         break;
  24.     if ( !current_user_can( 'edit_post', $revision->post_parent ) )
  25.         break;
  26.     if ( !$post = get_post( $revision->post_parent ) )
  27.         break;
  28.  
  29.     if ( !constant('WP_POST_REVISIONS') && !wp_is_post_autosave( $revision ) ) // Revisions disabled and we're not looking at an autosave
  30.         break;
  31.  
  32.     check_admin_referer( "restore-post_$post->ID|$revision->ID" );
  33.  
  34.     wp_restore_post_revision( $revision->ID );
  35.     $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) );
  36.     break;
  37. case 'diff' :
  38.     if ( !$left_revision  = get_post( $left ) )
  39.         break;
  40.     if ( !$right_revision = get_post( $right ) )
  41.         break;
  42.  
  43.     if ( !current_user_can( 'read_post', $left_revision->ID ) || !current_user_can( 'read_post', $right_revision->ID ) )
  44.         break;
  45.  
  46.     // If we're comparing a revision to itself, redirect to the 'view' page for that revision or the edit page for that post
  47.     if ( $left_revision->ID == $right_revision->ID ) {
  48.         $redirect = get_edit_post_link( $left_revision->ID );
  49.         include( 'js/revisions-js.php' );
  50.         break;
  51.     }
  52.  
  53.     // Don't allow reverse diffs?
  54.     if ( strtotime($right_revision->post_modified_gmt) < strtotime($left_revision->post_modified_gmt) ) {
  55.         $redirect = add_query_arg( array( 'left' => $right, 'right' => $left ) );
  56.         break;
  57.     }
  58.  
  59.     if ( $left_revision->ID == $right_revision->post_parent ) // right is a revision of left
  60.         $post =& $left_revision;
  61.     elseif ( $left_revision->post_parent == $right_revision->ID ) // left is a revision of right
  62.         $post =& $right_revision;
  63.     elseif ( $left_revision->post_parent == $right_revision->post_parent ) // both are revisions of common parent
  64.         $post = get_post( $left_revision->post_parent );
  65.     else
  66.         break; // Don't diff two unrelated revisions
  67.  
  68.     if ( !constant('WP_POST_REVISIONS') ) { // Revisions disabled
  69.         if (
  70.             // we're not looking at an autosave
  71.             ( !wp_is_post_autosave( $left_revision ) && !wp_is_post_autosave( $right_revision ) )
  72.         ||
  73.             // we're not comparing an autosave to the current post
  74.             ( $post->ID !== $left_revision->ID && $post->ID !== $right_revision->ID )
  75.         )
  76.             break;
  77.     }
  78.  
  79.     if (
  80.         // They're the same
  81.         $left_revision->ID == $right_revision->ID
  82.     ||
  83.         // Neither is a revision
  84.         ( !wp_get_post_revision( $left_revision->ID ) && !wp_get_post_revision( $right_revision->ID ) )
  85.     )
  86.         break;
  87.     
  88.     $post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
  89.     $h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title );
  90.  
  91.     $left  = $left_revision->ID;
  92.     $right = $right_revision->ID;
  93.  
  94.     $redirect = false;
  95.     break;
  96. case 'view' :
  97. default :
  98.     if ( !$revision = wp_get_post_revision( $revision_id ) )
  99.         break;
  100.     if ( !$post = get_post( $revision->post_parent ) )
  101.         break;
  102.  
  103.     if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) )
  104.         break;
  105.  
  106.     if ( !constant('WP_POST_REVISIONS') && !wp_is_post_autosave( $revision ) ) // Revisions disabled and we're not looking at an autosave
  107.         break;
  108.  
  109.     $post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
  110.     $revision_title = wp_post_revision_title( $revision, false );
  111.     $h2 = sprintf( __( 'Post Revision for “%1$s” created on %2$s' ), $post_title, $revision_title );
  112.  
  113.     // Sets up the diff radio buttons
  114.     $left  = $revision->ID;
  115.     $right = $post->ID;
  116.  
  117.     $redirect = false;
  118.     break;
  119. endswitch;
  120.  
  121. if ( !$redirect && !in_array( $post->post_type, array( 'post', 'page' ) ) )
  122.     $redirect = 'edit.php';
  123.  
  124. if ( $redirect ) {
  125.     wp_redirect( $redirect );
  126.     exit;
  127. }
  128.  
  129. if ( 'page' == $post->post_type ) {
  130.     $submenu_file = 'edit-pages.php';
  131.     $title = __( 'Page Revisions' );
  132. } else {
  133.     $submenu_file = 'edit.php';
  134.     $title = __( 'Post Revisions' );
  135. }
  136.  
  137. require_once( 'admin-header.php' );
  138.  
  139. ?>
  140.  
  141. <div class="wrap">
  142.  
  143. <h2 class="long-header"><?php echo $h2; ?></h2>
  144.  
  145. <table class="form-table ie-fixed">
  146.     <col class="th" />
  147. <?php if ( 'diff' == $action ) : ?>
  148. <tr id="revision">
  149.     <th scope="row"></th>
  150.     <th scope="col" class="th-full">
  151.         <span class="alignleft"><?php printf( __('Older: %s'), wp_post_revision_title( $left_revision ) ); ?></span>
  152.         <span class="alignright"><?php printf( __('Newer: %s'), wp_post_revision_title( $right_revision ) ); ?></span>
  153.     </th>
  154. </tr>
  155. <?php endif;
  156.  
  157. // use get_post_to_edit filters? 
  158. $identical = true;
  159. foreach ( _wp_post_revision_fields() as $field => $field_title ) :
  160.     if ( 'diff' == $action ) {
  161.         $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field );
  162.         $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field );
  163.         if ( !$content = wp_text_diff( $left_content, $right_content ) )
  164.             continue; // There is no difference between left and right
  165.         $identical = false;
  166.     } else {
  167.         add_filter( "_wp_post_revision_field_$field", 'htmlspecialchars' );
  168.         $content = apply_filters( "_wp_post_revision_field_$field", $revision->$field, $field );
  169.     }
  170.     ?>
  171.  
  172.     <tr id="revision-field-<?php echo $field; ?>">
  173.         <th scope="row"><?php echo wp_specialchars( $field_title ); ?></th>
  174.         <td><div class="pre"><?php echo $content; ?></div></td>
  175.     </tr>
  176.  
  177.     <?php
  178.  
  179. endforeach;
  180.  
  181. if ( 'diff' == $action && $identical ) :
  182.  
  183.     ?>
  184.  
  185.     <tr><td colspan="2"><div class="updated"><p><?php _e( 'These revisions are identical.' ); ?></p></div></td></tr>
  186.  
  187.     <?php
  188.  
  189. endif;
  190.  
  191. ?>
  192.  
  193. </table>
  194.  
  195. <br class="clear" />
  196.  
  197. <h2><?php echo $title; ?></h2>
  198.  
  199. <?php
  200.  
  201. $args = array( 'format' => 'form-table', 'parent' => true, 'right' => $right, 'left' => $left );
  202. if ( !constant( 'WP_POST_REVISIONS' ) )
  203.     $args['type'] = 'autosave';
  204.  
  205. wp_list_post_revisions( $post, $args );
  206.  
  207. ?>
  208.  
  209. </div>
  210.  
  211. <?php
  212.  
  213. require_once( 'admin-footer.php' );
  214.