WordPress.org

Make WordPress Core

Ticket #18515: 18515.diff

File 18515.diff, 5.7 KB (added by nacin, 3 years ago)
  • wp-includes/js/autosave.dev.js

     
    1 var autosave, autosaveLast = '', autosavePeriodical, autosaveOldMessage = '', autosaveDelayPreview = false, notSaved = true, blockSave = false, fullscreen; 
     1var autosave, autosaveLast = '', autosavePeriodical, autosaveOldMessage = '', autosaveDelayPreview = false, notSaved = true, blockSave = false, fullscreen, autosaveLockRelease = true; 
    22 
    33jQuery(document).ready( function($) { 
    44        var dotabkey = true; 
     
    99        //Disable autosave after the form has been submitted 
    1010        $("#post").submit(function() { 
    1111                $.cancel(autosavePeriodical); 
     12                autosaveLockRelease = false; 
    1213        }); 
    1314 
    1415        $('input[type="submit"], a.submitdelete', '#submitpost').click(function(){ 
     
    4748                } 
    4849        }; 
    4950 
     51        $(window).unload( function() { 
     52                if ( ! autosaveLockRelease ) 
     53                        return; 
     54                $.ajax({ 
     55                        type: 'POST', 
     56                        url: ajaxurl, 
     57                        async: false, 
     58                        data: { 
     59                                action: 'wp-remove-post-lock', 
     60                                _wpnonce: $('#_wpnonce').val(), 
     61                                post_ID: $('#post_ID').val(), 
     62                                active_post_lock: $('#active_post_lock').val() 
     63                        }, 
     64                }); 
     65        } ); 
     66 
    5067        // preview 
    5168        $('#post-preview').click(function(){ 
    5269                if ( $('#auto_draft').val() == '1' && notSaved ) { 
     
    99116                        sup = res.responses[0].supplemental; 
    100117                        if ( 'disable' == sup['disable_autosave'] ) { 
    101118                                autosave = function() {}; 
     119                                autosaveLockRelease = false; 
    102120                                res = { errors: true }; 
    103121                        } 
    104122 
     123                        if ( sup['active-post-lock'] ) { 
     124                                jQuery('#active_post_lock').val( sup['active-post-lock'] ); 
     125                        } 
     126 
    105127                        if ( sup['alert'] ) { 
    106128                                jQuery('#autosave-alert').remove(); 
    107129                                jQuery('#titlediv').after('<div id="autosave-alert" class="error below-h2"><p>' + sup['alert'] + '</p></div>'); 
  • wp-admin/admin-ajax.php

     
    988988                        $id = $post->ID; 
    989989        } 
    990990 
    991         if ( $do_lock && empty( $_POST['auto_draft'] ) && $id && is_numeric( $id ) ) 
    992                 wp_set_post_lock( $id ); 
     991        if ( $do_lock && empty( $_POST['auto_draft'] ) && $id && is_numeric( $id ) ) { 
     992                $lock_result = wp_set_post_lock( $id ); 
     993                $supplemental['active-post-lock'] = implode( ':', $lock_result ); 
     994        } 
    993995 
    994996        if ( $nonce_age == 2 ) { 
    995997                $supplemental['replace-autosavenonce'] = wp_create_nonce('autosave'); 
     
    15511553        echo json_encode( array( 'message' => $message, 'last_edited' => $last_edited ) ); 
    15521554        die(); 
    15531555        break; 
     1556case 'wp-remove-post-lock' : 
     1557        if ( empty( $_POST['post_ID'] ) || empty( $_POST['active_post_lock'] ) ) 
     1558                die( '0' ); 
     1559        $post_id = (int) $_POST['post_ID']; 
     1560        if ( ! $post = get_post( $post_id ) ) 
     1561                die( '0' ); 
     1562 
     1563        check_ajax_referer( 'update-' . $post->post_type . '_' . $post_id ); 
     1564 
     1565        if ( ! current_user_can( 'edit_post', $post_id ) ) 
     1566                die( '-1' ); 
     1567 
     1568        $active_lock = array_map( 'absint', explode( ':', $_POST['active_post_lock'] ) ); 
     1569        if ( $active_lock[1] != get_current_user_id() ) 
     1570                die( '0' ); 
     1571 
     1572        $new_lock = ( time() - apply_filters( 'wp_check_post_lock_window', AUTOSAVE_INTERVAL * 2 ) + 5 ) . ':' . $active_lock[1]; 
     1573        update_post_meta( $post_id, '_edit_lock', $new_lock, implode( ':', $active_lock ) ); 
     1574        die( '1' ); 
     1575 
    15541576default : 
    15551577        do_action( 'wp_ajax_' . $_POST['action'] ); 
    15561578        die('0'); 
  • wp-admin/includes/post.php

     
    12271227        $user = isset( $lock[1] ) ? $lock[1] : get_post_meta( $post->ID, '_edit_last', true ); 
    12281228 
    12291229        $time_window = apply_filters( 'wp_check_post_lock_window', AUTOSAVE_INTERVAL * 2 ); 
    1230  
    12311230        if ( $time && $time > time() - $time_window && $user != get_current_user_id() ) 
    12321231                return $user; 
    12331232        return false; 
     
    12391238 * @since 2.5.0 
    12401239 * 
    12411240 * @param int $post_id ID of the post to being edited 
    1242  * @return bool Returns false if the post doesn't exist of there is no current user 
     1241 * @return bool|array Returns false if the post doesn't exist of there is no current user, or 
     1242 *      an array of the lock time and the user ID. 
    12431243 */ 
    12441244function wp_set_post_lock( $post_id ) { 
    12451245        if ( !$post = get_post( $post_id ) ) 
     
    12511251        $lock = "$now:$user_id"; 
    12521252 
    12531253        update_post_meta( $post->ID, '_edit_lock', $lock ); 
     1254        return array( $now, $user_id ); 
    12541255} 
    12551256 
    12561257/** 
  • wp-admin/post.php

     
    174174        if ( $last = wp_check_post_lock( $post->ID ) ) { 
    175175                add_action('admin_notices', '_admin_notice_post_locked' ); 
    176176        } else { 
    177                 wp_set_post_lock( $post->ID ); 
     177                $active_post_lock = wp_set_post_lock( $post->ID ); 
    178178                wp_enqueue_script('autosave'); 
    179179        } 
    180180 
  • wp-admin/edit-form-advanced.php

     
    231231<input type="hidden" id="post_type" name="post_type" value="<?php echo esc_attr( $post_type ) ?>" /> 
    232232<input type="hidden" id="original_post_status" name="original_post_status" value="<?php echo esc_attr( $post->post_status) ?>" /> 
    233233<input type="hidden" id="referredby" name="referredby" value="<?php echo esc_url(stripslashes(wp_get_referer())); ?>" /> 
     234<?php if ( ! empty( $active_post_lock ) ) { ?> 
     235<input type="hidden" id="active_post_lock" value="<?php echo esc_attr( implode( ':', $active_post_lock ) ); ?>" /> 
    234236<?php 
     237} 
    235238if ( 'draft' != $post->post_status ) 
    236239        wp_original_referer_field(true, 'previous'); 
    237240