Make WordPress Core


Ignore:
Timestamp:
10/12/2017 04:00:15 AM (7 years ago)
Author:
westonruter
Message:

Customize: Add changeset locking in Customizer to prevent users from overriding each other's changes.

  • Customization locking is checked when changesets are saved and when heartbeat ticks.
  • Lock is lifted immediately upon a user closing the Customizer.
  • Heartbeat is introduced into Customizer.
  • Changes made to user after it was locked by another user are stored as an autosave revision for restoration.
  • Lock notification displays link to preview the other user's changes on the frontend.
  • A user loading a locked Customizer changeset will be presented with an option to take over.
  • Autosave revisions attached to a published changeset are converted into auto-drafts so that they will be presented to users for restoration.
  • Focus constraining is improved in overlay notifications.
  • Escape key is stopped from propagating in overlay notifications, and it dismisses dismissible overlay notifications.
  • Introduces changesetLocked state which is used to disable the Save button and suppress the AYS dialog when leaving the Customizer.
  • Fixes bug where users could be presented with each other's autosave revisions.

Props sayedwp, westonruter, melchoyce.
See #31436, #31897, #39896.
Fixes #42024.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/customize/manager.php

    r41824 r41839  
    14561456            'autosave' => true,
    14571457        ) );
    1458         $this->assertFalse( wp_get_post_autosave( $changeset_post_id ) );
     1458        $this->assertFalse( wp_get_post_autosave( $changeset_post_id, get_current_user_id() ) );
    14591459        $this->assertContains( 'Autosaved Auto-draft Title', get_post( $changeset_post_id )->post_content );
    14601460
     
    14941494
    14951495        // Try autosave.
    1496         $this->assertFalse( wp_get_post_autosave( $changeset_post_id ) );
     1496        $this->assertFalse( wp_get_post_autosave( $changeset_post_id, get_current_user_id() ) );
    14971497        $r = $wp_customize->save_changeset_post( array(
    14981498            'data' => array(
     
    15061506
    15071507        // Verify that autosave happened.
    1508         $autosave_revision = wp_get_post_autosave( $changeset_post_id );
     1508        $autosave_revision = wp_get_post_autosave( $changeset_post_id, get_current_user_id() );
    15091509        $this->assertInstanceOf( 'WP_Post', $autosave_revision );
    15101510        $this->assertContains( 'Draft Title', get_post( $changeset_post_id )->post_content );
     
    26362636                'publishDate',
    26372637                'statusChoices',
     2638                'lockUser',
    26382639            ),
    26392640            array_keys( $data['changeset'] )
Note: See TracChangeset for help on using the changeset viewer.