WordPress.org

Make WordPress Core

Ticket #23497: 23497.14.diff

File 23497.14.diff, 18.3 KB (added by adamsilverstein, 7 years ago)

more updates, fixes

  • wp-includes/post-template.php

     
    14681468        else :
    14691469                echo "<ul class='post-revisions'>\n";
    14701470                echo $rows;
     1471                if ( $restored_from_meta = get_post_meta( $post->ID, '_post_restored_from', true ) ) {
     1472                        $author = get_the_author_meta( 'display_name', $restored_from_meta[ 'restored_by_user' ] );
     1473                        /* translators: revision date format, see http://php.net/date */
     1474                        $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
     1475                        $date = date_i18n( $datef, strtotime( $restored_from_meta[ 'restored_time' ] ) );
     1476                        $timesince = human_time_diff( $restored_from_meta[ 'restored_time' ], current_time( 'timestamp' ) ) . __( ' ago ' );
     1477                        ?>
     1478                        <hr />
     1479                        <div id="revisions-meta-restored">
     1480                                <?php
     1481                                printf( 'Previously restored from Revision ID %d, %s by %s (%s)',
     1482                                $restored_from_meta[ 'restored_revision_id'],
     1483                                $timesince,
     1484                                $author,
     1485                                $date );
     1486                                ?>
     1487                        </div>
     1488                        <?php
    14711489                echo "</ul>";
     1490                }
     1491
    14721492        endif;
    14731493
    14741494}
  • wp-includes/pluggable.php

     
    17221722
    17231723        $r  = "<table class='diff'>\n";
    17241724
    1725         if ( isset( $args[ 'showsplitview' ] ) && 'true' == $args[ 'showsplitview' ] ) {
     1725        if ( ! empty( $args[ 'show_split_view' ] ) ) {
    17261726                $r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />";
    17271727        } else {
    17281728                $r .= "<col class='content' />";
  • wp-admin/includes/ajax-actions.php

     
    21372137function wp_ajax_revisions_data() {
    21382138        check_ajax_referer( 'revisions-ajax-nonce', 'nonce' );
    21392139
    2140         $compareto = isset( $_GET['compareto'] ) ? absint( $_GET['compareto'] ) : 0;
    2141         $showautosaves = isset( $_GET['showautosaves'] ) ? $_GET['showautosaves'] : '';
    2142         $showsplitview = isset( $_GET['showsplitview'] ) ? $_GET['showsplitview'] : '';
    2143         $postid = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : '';
     2140        $compare_to = isset( $_GET['compare_to'] ) ? absint( $_GET['compare_to'] ) : 0;
     2141        $show_autosaves = isset( $_GET['show_autosaves'] ) ? $_GET['show_autosaves'] : '';
     2142        $show_split_view = isset( $_GET['show_split_view'] ) ? $_GET['show_split_view'] : '';
     2143        $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : '';
    21442144
    2145         $comparetwomode = ( '' == $postid ) ? false : true;
     2145        $compare_two_mode = ( '' == $post_id ) ? false : true;
    21462146        //
    2147         //TODO: currently code returns all possible comparisons for the indicated 'compareto' revision
     2147        //TODO: currently code returns all possible comparisons for the indicated 'compare_to' revision
    21482148        //however, the front end prevents users from pulling the right handle past the left or the left pass the right,
    21492149        //so only the possible diffs need be generated
    21502150        //
    21512151        $alltherevisions = array();
    2152         if ( '' == $postid )
    2153                 $postid = $compareto;
     2152        if ( '' == $post_id )
     2153                $post_id = $compare_to;
    21542154
    2155         if ( ! current_user_can( 'read_post', $postid ) )
     2155        if ( ! current_user_can( 'read_post', $post_id ) )
    21562156                continue;
    21572157
    2158         if ( ! $revisions = wp_get_post_revisions( $postid ) )
     2158        if ( ! $revisions = wp_get_post_revisions( $post_id ) )
    21592159                return;
    21602160
    21612161
    21622162        //if we are comparing two revisions, the first 'revision' represented by the leftmost
    21632163        //slider position is the current revision, prepend a comparison to this revision
    2164         if ( $comparetwomode )
    2165                 array_unshift( $revisions, get_post( $postid ) );
     2164        if ( $compare_two_mode )
     2165                array_unshift( $revisions, get_post( $post_id ) );
    21662166
    21672167        $count = 1;
    21682168        foreach ( $revisions as $revision ) :
    2169         if ( 'true' != $showautosaves && wp_is_post_autosave( $revision ) )
     2169        if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
    21702170                        continue;
    21712171
    21722172        $revision_from_date_author = '';
    21732173
    21742174
    2175         $left_revision = get_post( $compareto );
     2175        $left_revision = get_post( $compare_to );
    21762176        $right_revision = get_post( $revision );
    21772177
    21782178        $author = get_the_author_meta( 'display_name', $revision->post_author );
     
    21912191                $date
    21922192        );
    21932193
    2194         if ( $comparetwomode ) {
    2195                 $compareto_gravatar = get_avatar( $left_revision->post_author, 18 );
    2196                 $compareto_author = get_the_author_meta( 'display_name', $left_revision->post_author );
    2197                 $compareto_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
     2194        if ( $compare_two_mode ) {
     2195                $compare_to_gravatar = get_avatar( $left_revision->post_author, 18 );
     2196                $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
     2197                $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
    21982198
    21992199                $revision_from_date_author = sprintf(
    22002200                        '%s %s, %s %s (%s)',
    2201                         $compareto_gravatar,
    2202                         $compareto_author,
     2201                        $compare_to_gravatar,
     2202                        $compare_to_author,
    22032203                        human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
    22042204                        __( ' ago ' ),
    2205                         $compareto_date
     2205                        $compare_to_date
    22062206                );
    22072207        }
    22082208
     
    22122212                                'action' => 'restore' ),
    22132213                                '/wp-admin/revision.php'
    22142214                ),
    2215                 "restore-post_{$compareto}|{$revision->ID}"
     2215                "restore-post_{$compare_to}|{$revision->ID}"
    22162216        );
    22172217
    22182218        //
     
    22362236
    22372237                $args = array();
    22382238
    2239                 if ( 'true' == $showsplitview )
    2240                          $args = array( 'showsplitview' => 'true' );
     2239                if ( ! empty( $show_split_view ) )
     2240                         $args = array( 'show_split_view' => true );
    22412241
    22422242                $content .= wp_text_diff( $left_content, $right_content, $args );
    22432243        }
     
    22452245        //if we are comparing two revisions
    22462246        //and we are on the matching revision
    22472247        //add an error revision indicating unable to compare to self
    2248         if ( $comparetwomode && $compareto == $revision->ID )
     2248        if ( $compare_two_mode && $compare_to == $revision->ID )
    22492249                $alltherevisions[] = array (
    22502250                        'ID' => $revision->ID,
    22512251                        'revision_date_author' => $revision_date_author,
  • wp-admin/js/revisions.js

     
    3030                        _left_diff : 0,
    3131                        _right_diff : 1,
    3232                        _autosaves : false,
    33                         _showsplitview : true,
     33                        _show_split_view : true,
    3434                        _compareoneortwo : 1,
    3535                        left_model_loading : false,             //keep track of model loads
    3636                        right_model_loading : false,    //disallow slider interaction, also repeat loads, while loading
     
    7474
    7575                        reloadmodelsingle : function() {
    7676                                var self = this;
    77                                 self._revisions.url = ajaxurl + '?action=revisions-data&compareto=' + wpRevisionsSettings.post_id +
    78                                                                                         '&showautosaves=' + self.self_autosaves +
    79                                                                                         '&showsplitview=' +  REVAPP._showsplitview +
     77                                self._revisions.url = ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
     78                                                                                        '&show_autosaves=' + self._autosaves +
     79                                                                                        '&show_split_view=' +  REVAPP._show_split_view +
    8080                                                                                        '&nonce=' + wpRevisionsSettings.nonce;
    8181                                self.start_right_model_loading();
    8282                                this._revisions.fetch({ //reload revision data
     
    111111                                if ( 0 == self._left_diff ) {
    112112                                        self._right_handle_revisions.url =
    113113                                                ajaxurl +
    114                                                 '?action=revisions-data&compareto=' + wpRevisionsSettings.post_id +
     114                                                '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
    115115                                                '&post_id=' + wpRevisionsSettings.post_id +
    116                                                 '&showautosaves=' + self._autosaves +
    117                                                 '&showsplitview=' +  self._showsplitview +
     116                                                '&show_autosaves=' + self._autosaves +
     117                                                '&show_split_view=' +  self._show_split_view +
    118118                                                '&nonce=' + wpRevisionsSettings.nonce;
    119119                                } else {
    120120                                        self._right_handle_revisions.url =
    121121                                                ajaxurl +
    122                                                 '?action=revisions-data&compareto=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +
     122                                                '?action=revisions-data&compare_to=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +
    123123                                                '&post_id=' + wpRevisionsSettings.post_id +
    124                                                 '&showautosaves=' + self._autosaves +
    125                                                 '&showsplitview=' +  self._showsplitview +
     124                                                '&show_autosaves=' + self._autosaves +
     125                                                '&show_split_view=' +  self._show_split_view +
    126126                                                '&nonce=' + wpRevisionsSettings.nonce;
    127127                                }
    128128
    129129                                self._left_handle_revisions.url =
    130130                                        ajaxurl +
    131                                         '?action=revisions-data&compareto=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
     131                                        '?action=revisions-data&compare_to=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
    132132                                        '&post_id=' + wpRevisionsSettings.post_id +
    133                                         '&showautosaves=' + self._autosaves +
    134                                         '&showsplitview=' +  self._showsplitview +
     133                                        '&show_autosaves=' + self._autosaves +
     134                                        '&show_split_view=' +  self._show_split_view +
    135135                                        '&nonce=' + wpRevisionsSettings.nonce;
    136136
    137137                                self._left_handle_revisions.fetch({
    138138
     139                                        /*
     140                                        //TODO - add a load progress bar for fetch
     141                                        //
    139142                                        xhr: function() {
    140143                                                var xhr = $.ajaxSettings.xhr();
    141144                                                xhr.onprogress = self.handleProgress;
     
    149152                                                        window.console && console.log( Math.round( percentComplete * 100) + "%" );
    150153                                                }
    151154                                        },
    152 
     155                                        */
    153156                                        success : function(){
    154157                                                self.stop_left_model_loading();
    155158                                        },
     
    166169                                                self.stop_right_model_loading();
    167170                                        },
    168171
    169                                         error : function () {
    170                                                 window.console && console.log( 'Error loading revision data' );
     172                                        error : function ( response ) {
     173                                                window.console && console.log( 'Error loading revision data - ' + response.toSource() );
    171174                                                self.stop_right_model_loading();
    172175                                        }
    173176                                });
     
    217220
    218221        wp.revisions.Collection = Backbone.Collection.extend({
    219222                model : wp.revisions.Model,
    220                 url : ajaxurl + '?action=revisions-data&compareto=' + wpRevisionsSettings.post_id + '&showautosaves=false&showsplitview=true&nonce=' + wpRevisionsSettings.nonce
     223                url : ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id + '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce
    221224        });
    222225
    223226        _.extend(wp.revisions.views, {
     
    264267                                        this.comparetwochecked = '';
    265268                                        if ( this.model.at( REVAPP._right_diff - 1 ) ) {
    266269                                                addhtml = this.template( _.extend(
    267                                                         this.model.at( REVAPP._right_diff-1 ).toJSON(),
     270                                                        this.model.at( REVAPP._right_diff - 1 ).toJSON(),
    268271                                                        { comparetwochecked : this.comparetwochecked } //keep the checkmark checked
    269272                                                ) );
    270273                                        }
     
    345348                                var self = this;
    346349
    347350                                if ( $( 'input#showsplitview' ).is( ':checked' ) ) {
    348                                         REVAPP._showsplitview = 'true';
     351                                        REVAPP._show_split_view = 'true';
    349352                                        $('.revisiondiffcontainer').addClass('diffsplit');
    350353                                } else {
    351                                         REVAPP._showsplitview = '';
     354                                        REVAPP._show_split_view = '';
    352355                                        $('.revisiondiffcontainer').removeClass('diffsplit');
    353356                                }
    354357
     
    364367                        tagName : 'revisionvinteract',
    365368                        className : 'revisionvinteract-container',
    366369                        template : wp.template('revisionvinteract'),
     370                        _restoreword : '',
    367371
    368372                        initialize : function() {
     373                                this._restoreword = $( 'input#restore' ).attr( 'value' );
    369374                        },
    370375
     376                        reset_restore_button : function() {
     377                                $( 'input#restore' ).attr( 'value', this._restoreword + ' ' + REVAPP._revisions.at( REVAPP._right_diff - 1 ).get( 'ID' ) );
     378                        },
     379
    371380                        render : function() {
    372381                                var self = this;
    373382
     
    376385                                $( '#diff_max, #diff_maxof' ).html( this.model.length );
    377386                                $( '#diff_count' ).html( REVAPP._right_diff );
    378387                                $( '#diff_left_count_inner' ).html( 0 == REVAPP._left_diff ? '' : 'revision' + REVAPP._left_diff );
     388                                self.reset_restore_button();
    379389
    380390                                var modelcount = REVAPP._revisions.length;
    381391
    382                                 slider = $("#slider");
     392                                slider = $( "#slider" );
    383393                                if ( 1 == REVAPP._compareoneortwo ) {
    384394                                        //set up the slider with a single handle
    385395                                        slider.slider({
     
    396406                                                        REVAPP._right_diff =( ui.value+1 );
    397407                                                        $( '#diff_count' ).html( REVAPP._right_diff );
    398408                                                        REVAPP._revisionView.render();
     409                                                        self.reset_restore_button();
    399410                                                }
    400411                                        });
    401412                                        $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
     
    473484                                                        }
    474485
    475486                                                        REVAPP._revisionView.render(); //render the diff view
     487                                                        self.reset_restore_button();
    476488                                                },
    477489
    478490                                                //when the user stops sliding  in 2 handle mode, recalculate diffs
     
    480492                                                        if ( 2 == REVAPP._compareoneortwo ) {
    481493                                                                //calculate and generate a diff for comparing to the left handle
    482494                                                                //and the right handle, swap out when dragging
    483                                                                 if ( ! (REVAPP.left_model_loading && REVAPP.right_model.loading ) ) {
     495                                                                if ( ! (REVAPP.left_model_loading && REVAPP.right_model_loading ) ) {
    484496                                                                        REVAPP.reloadleftright();
    485497                                                                }
    486498                                                        }
     
    507519
    508520                                $( '#diff_count' ).html( REVAPP._right_diff );
    509521                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
     522                                this.reset_restore_button();
    510523                        },
    511524
    512525                        //go the the previous revision
     
    518531
    519532                                $( '#diff_count' ).html( REVAPP._right_diff );
    520533                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
     534                                this.reset_restore_button();
    521535                        }
    522536                })
    523537        });
  • wp-admin/revision.php

     
    1010require_once('./admin.php');
    1111wp_reset_vars( array( 'revision', 'action' ) );
    1212
    13 $revision_id = absint($revision);
     13$revision_id = absint( $revision );
    1414$redirect = 'edit.php';
    1515
    1616switch ( $action ) :
    1717case 'restore' :
    18         if ( !$revision = wp_get_post_revision( $revision_id ) )
     18        if ( ! $revision = wp_get_post_revision( $revision_id ) )
    1919                break;
    20         if ( !current_user_can( 'edit_post', $revision->post_parent ) )
     20        if ( ! current_user_can( 'edit_post', $revision->post_parent ) )
    2121                break;
    22         if ( !$post = get_post( $revision->post_parent ) )
     22        if ( ! $post = get_post( $revision->post_parent ) )
    2323                break;
    2424
    2525        // Revisions disabled and we're not looking at an autosave
    26         if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
     26        if ( ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) ) && ! wp_is_post_autosave( $revision ) ) {
    2727                $redirect = 'edit.php?post_type=' . $post->post_type;
    2828                break;
    2929        }
    3030        check_admin_referer( "restore-post_{$post->ID}|{$revision->ID}" );
    3131
     32        //store revision event in post meta
     33        $restore_details = array(
     34                'restored_revision_id' => $revision->ID,
     35                'restored_by_user' => get_current_user_id(),
     36                'restored_time' => time()
     37        );
     38        wp_update_post_meta( $post->ID, '_post_restored_from', $restore_details );
     39
    3240        wp_restore_post_revision( $revision->ID );
    3341        $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) );
    3442        break;
    3543case 'view' :
    3644case 'edit' :
    3745default :
    38         if ( !$revision = wp_get_post_revision( $revision_id ) )
     46        if ( ! $revision = wp_get_post_revision( $revision_id ) )
    3947                break;
    40         if ( !$post = get_post( $revision->post_parent ) )
     48        if ( ! $post = get_post( $revision->post_parent ) )
    4149                break;
    4250
    43         if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) )
     51        if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'read_post', $post->ID ) )
    4452                break;
    4553
    4654        // Revisions disabled and we're not looking at an autosave
     
    5967endswitch;
    6068
    6169// Empty post_type means either malformed object found, or no valid parent was found.
    62 if ( !$redirect && empty($post->post_type) )
     70if ( ! $redirect && empty( $post->post_type ) )
    6371        $redirect = 'edit.php';
    6472
    65 if ( !empty($redirect) ) {
     73if ( ! empty( $redirect ) ) {
    6674        wp_redirect( $redirect );
    6775        exit;
    6876}
    6977
    7078// This is so that the correct "Edit" menu item is selected.
    71 if ( !empty($post->post_type) && 'post' != $post->post_type )
     79if ( ! empty( $post->post_type ) && 'post' != $post->post_type )
    7280        $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
    7381else
    7482        $parent_file = $submenu_file = 'edit.php';
     
    8492<script type="text/javascript">
    8593var wpRevisionsSettings = <?php echo json_encode( array( 'post_id' => $post->ID, 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ) ) ); ?>;
    8694</script>
     95<?php
     96        $comparetworevisionslink = get_edit_post_link( $revision->ID );
     97?>
    8798
    8899<div id="backbonerevisionsoptions"></div>
    89 
    90 <br class="clear"/>
    91100<div class="wrap">
    92101        <div class="icon32 icon32-posts-post" id="icon-edit"><br></div>
    93102        <div class="revisiondiffcontainer diffsplit currentversion rightmodelloading">
     
    95104                <h2 class="long-header"><?php echo $h2; ?></h2>
    96105                <div id="backbonerevisionsinteract"></div>
    97106                <div id="backbonerevisionsdiff"></div>
    98 <hr />
    99 <?php
    100         $comparetworevisionslink = get_edit_post_link( $revision->ID );
    101 ?>
     107                <hr />
    102108        </div>
    103109</div>
    104110
     
    108114                <div id="difftitlefrom">{{{ data.revision_from_date_author }}} <?php _e( '- compared to -' ); ?></div>
    109115                <div id="difftitle">{{{ data.revision_date_author }}}</div>
    110116                <div id="diffcancel"><input class="button" onClick="document.location='<?php echo get_edit_post_link( $post->ID ); ?>'" type="submit" id="cancel" value="<?php esc_attr_e( 'Cancel' )?>" /></div>
    111                 <div id="diffrestore"><input class="button button-primary" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore' )?>" /></div>
     117                <div id="diffrestore"><input class="button button-primary" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore revision ID' )?>" /></div>
    112118                <div id="comparetworevisions"><input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/> <?php esc_attr_e( 'Compare two revisions' )?></div>
    113119        </div>
    114120        <div id="removedandadded">
     
    120126
    121127<script id="tmpl-revisionvinteract" type="text/html">
    122128        <div id="diffheader">
    123 <div id="diffprevious"><input class="button" type="submit" id="previous" value="Previous" /></div>
    124                         <div id="diffnext"><input class="button" type="submit" id="next" value="Next" /></div>
     129<div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" /></div>
     130                        <div id="diffnext"><input class="button" type="submit" id="next" value="<?php esc_attr_e( 'Next' ); ?>" /></div>
    125131                        <div id="diffslider">
    126132        <div id="revisioncount">
    127133                                        <?php _e( 'Comparing' ); ?>