WordPress.org

Make WordPress Core

Ticket #23697: 23697-5.patch

File 23697-5.patch, 4.9 KB (added by azaozz, 12 months ago)
  • wp-admin/includes/ajax-actions.php

     
    10381038function wp_ajax_autosave() { 
    10391039        define( 'DOING_AUTOSAVE', true ); 
    10401040 
    1041         $nonce_age = check_ajax_referer( 'autosave', 'autosavenonce' ); 
     1041        check_ajax_referer( 'autosave', 'autosavenonce' ); 
    10421042 
    10431043        $_POST['post_category'] = explode(",", $_POST['catslist']); 
    10441044        if ( $_POST['post_type'] == 'page' || empty($_POST['post_category']) ) 
     
    10901090                        $id = $post->ID; 
    10911091        } 
    10921092 
    1093         if ( $nonce_age == 2 ) { 
    1094                 $supplemental['replace-autosavenonce'] = wp_create_nonce('autosave'); 
    1095                 $supplemental['replace-getpermalinknonce'] = wp_create_nonce('getpermalink'); 
    1096                 $supplemental['replace-samplepermalinknonce'] = wp_create_nonce('samplepermalink'); 
    1097                 $supplemental['replace-closedpostboxesnonce'] = wp_create_nonce('closedpostboxes'); 
    1098                 $supplemental['replace-_ajax_linking_nonce'] = wp_create_nonce( 'internal-linking' ); 
    1099                 $supplemental['replace-_wpnonce'] = wp_create_nonce( 'update-post_' . $post->ID ); 
    1100         } 
    1101  
    11021093        $x = new WP_Ajax_Response( array( 
    11031094                'what' => 'autosave', 
    11041095                'id' => $id, 
  • wp-admin/includes/misc.php

     
    623623                                $send['new_lock'] = implode( ':', $new_lock ); 
    624624                } 
    625625 
     626                if ( ! empty( $received['post_nonce'] ) && 2 === wp_verify_nonce( $received['post_nonce'], 'update-post_' . $post_id ) ) { 
     627                        $send['update_nonces'] = array( 
     628                                'replace-autosavenonce' => wp_create_nonce('autosave'), 
     629                                'replace-getpermalinknonce' => wp_create_nonce('getpermalink'), 
     630                                'replace-samplepermalinknonce' => wp_create_nonce('samplepermalink'), 
     631                                'replace-closedpostboxesnonce' => wp_create_nonce('closedpostboxes'), 
     632                                'replace-_ajax_linking_nonce' => wp_create_nonce( 'internal-linking' ), 
     633                                'replace-_wpnonce' => wp_create_nonce( 'update-post_' . $post_id ), 
     634                        ); 
     635                } 
     636 
    626637                $response['wp-refresh-post-lock'] = $send; 
    627638        } 
    628639 
  • wp-admin/js/post.js

     
    252252}; 
    253253 
    254254$(document).on( 'heartbeat-send.refresh-lock', function( e, data ) { 
    255         var lock = $('#active_post_lock').val(), post_id = $('#post_ID').val(), send = {}; 
     255        var lock = $('#active_post_lock').val(), 
     256                post_id = $('#post_ID').val(), 
     257                post_nonce = $('#_wpnonce').val(), 
     258                send = {}; 
    256259 
    257260        if ( !post_id ) 
    258261                return; 
     
    262265        if ( lock ) 
    263266                send['lock'] = lock; 
    264267 
     268        if ( post_nonce ) 
     269                send['post_nonce'] = post_nonce; 
     270 
    265271        data['wp-refresh-post-lock'] = send; 
    266272}); 
    267273 
     
    286292                                        }); 
    287293 
    288294                                        // Save the latest changes and disable 
    289                                         autosave(); 
     295                                        if ( ! autosave() ) 
     296                                                window.onbeforeunload = null; 
     297 
    290298                                        autosave = function(){}; 
    291299                                } 
    292300 
     
    301309                } else if ( received.new_lock ) { 
    302310                        $('#active_post_lock').val( received.new_lock ); 
    303311                } 
     312 
     313                if ( received.update_nonces ) { 
     314                        $.each( received.update_nonces, function( selector, value ) { 
     315                                if ( selector.match(/^replace-/) ) 
     316                                        $( '#' + selector.replace('replace-', '') ).val( value ); 
     317                        }); 
     318                } 
    304319        } 
    305320}); 
    306321 
  • wp-includes/js/autosave.js

     
    254254} 
    255255 
    256256autosave = function() { 
    257         // (bool) is rich editor enabled and active 
     257        var post_data = wp.autosave.getPostData(), 
     258                doAutoSave = post_data.autosave, 
     259                successCallback; 
     260 
    258261        blockSave = true; 
    259         var rich = (typeof tinymce != "undefined") && tinymce.activeEditor && !tinymce.activeEditor.isHidden(), 
    260                 post_data, doAutoSave, ed, origStatus, successCallback; 
    261262 
    262         // Disable buttons until we know the save completed. 
    263         autosave_disable_buttons(); 
    264  
    265         post_data = wp.autosave.getPostData(); 
    266  
    267         // We always send the ajax request in order to keep the post lock fresh. 
    268         // This (bool) tells whether or not to write the post to the DB during the ajax request. 
    269         doAutoSave = post_data.autosave; 
    270  
    271263        // No autosave while thickbox is open (media buttons) 
    272264        if ( jQuery("#TB_window").css('display') == 'block' ) 
    273265                doAutoSave = false; 
     
    281273                autosaveLast = post_data["post_title"] + post_data["content"]; 
    282274                jQuery(document).triggerHandler('wpcountwords', [ post_data["content"] ]); 
    283275        } else { 
    284                 post_data['autosave'] = 0; 
     276                return false; 
    285277        } 
    286278 
     279        // Disable buttons until we know the save completed. 
     280        autosave_disable_buttons(); 
     281 
    287282        if ( post_data["auto_draft"] == '1' ) { 
    288283                successCallback = autosave_saved_new; // new post 
    289284        } else { 
     
    297292                url: ajaxurl, 
    298293                success: successCallback 
    299294        }); 
     295 
     296        return true; 
    300297} 
    301298 
    302299// Autosave in localStorage