diff --git a/src/js/_enqueues/admin/inline-edit-post.js b/src/js/_enqueues/admin/inline-edit-post.js
index 6f313fc0558c7..5e0eb2746a206 100644
--- a/src/js/_enqueues/admin/inline-edit-post.js
+++ b/src/js/_enqueues/admin/inline-edit-post.js
@@ -613,18 +613,20 @@ $( function() {
wp.heartbeat.interval( 10 );
}
}).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) {
- var locked = data['wp-check-locked-posts'] || {};
+ var locked = data['wp-check-locked-posts'] || {},
+ isRtc = window._wpCollaborationEnabled,
+ lockedClass = isRtc ? 'wp-collaborative-editing' : 'wp-locked';
$('#the-list tr').each( function(i, el) {
var key = el.id, row = $(el), lock_data, avatar;
if ( locked.hasOwnProperty( key ) ) {
- if ( ! row.hasClass('wp-locked') ) {
+ if ( ! row.hasClass( lockedClass ) ) {
lock_data = locked[key];
row.find('.column-title .locked-text').text( lock_data.text );
row.find('.check-column checkbox').prop('checked', false);
- if ( lock_data.avatar_src ) {
+ if ( ! isRtc && lock_data.avatar_src ) {
avatar = $( '
', {
'class': 'avatar avatar-18 photo',
width: 18,
@@ -635,10 +637,10 @@ $( function() {
} );
row.find('.column-title .locked-avatar').empty().append( avatar );
}
- row.addClass('wp-locked');
+ row.addClass( lockedClass );
}
- } else if ( row.hasClass('wp-locked') ) {
- row.removeClass( 'wp-locked' ).find( '.locked-info span' ).empty();
+ } else if ( row.hasClass( lockedClass ) ) {
+ row.removeClass( lockedClass ).find( '.locked-info span' ).empty();
}
});
}).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) {
diff --git a/src/wp-admin/css/list-tables.css b/src/wp-admin/css/list-tables.css
index 11edc53e0a1e0..2e04dc5e8ee90 100644
--- a/src/wp-admin/css/list-tables.css
+++ b/src/wp-admin/css/list-tables.css
@@ -635,6 +635,10 @@ tr.wp-locked .row-actions .trash {
display: none;
}
+.wp-collaborative-editing .locked-info {
+ display: block;
+}
+
#menu-locations-wrap .widefat {
width: 60%;
}
diff --git a/src/wp-admin/includes/class-wp-posts-list-table.php b/src/wp-admin/includes/class-wp-posts-list-table.php
index f9c08ad5c73ee..8cff2b87fad03 100644
--- a/src/wp-admin/includes/class-wp-posts-list-table.php
+++ b/src/wp-admin/includes/class-wp-posts-list-table.php
@@ -1119,10 +1119,16 @@ public function column_title( $post ) {
$lock_holder = wp_check_post_lock( $post->ID );
if ( $lock_holder ) {
- $lock_holder = get_userdata( $lock_holder );
- $locked_avatar = get_avatar( $lock_holder->ID, 18 );
- /* translators: %s: User's display name. */
- $locked_text = esc_html( sprintf( __( '%s is currently editing' ), $lock_holder->display_name ) );
+ if ( get_option( 'wp_collaboration_enabled' ) ) {
+ $locked_avatar = '';
+ /* translators: Collaboration status message for a singular post in the post list. Can be any type of post. */
+ $locked_text = esc_html_x( 'Currently being edited', 'post list' );
+ } else {
+ $lock_holder = get_userdata( $lock_holder );
+ $locked_avatar = get_avatar( $lock_holder->ID, 18 );
+ /* translators: %s: User's display name. */
+ $locked_text = esc_html( sprintf( __( '%s is currently editing' ), $lock_holder->display_name ) );
+ }
} else {
$locked_avatar = '';
$locked_text = '';
@@ -1427,7 +1433,11 @@ public function single_row( $post, $level = 0 ) {
$lock_holder = wp_check_post_lock( $post->ID );
if ( $lock_holder ) {
- $classes .= ' wp-locked';
+ if ( get_option( 'wp_collaboration_enabled' ) ) {
+ $classes .= ' wp-collaborative-editing';
+ } else {
+ $classes .= ' wp-locked';
+ }
}
if ( $post->post_parent ) {
@@ -1481,12 +1491,23 @@ protected function handle_row_actions( $item, $column_name, $primary ) {
$title = _draft_or_post_title();
if ( $can_edit_post && 'trash' !== $post->post_status ) {
+ $is_rtc_locked = get_option( 'wp_collaboration_enabled' ) && wp_check_post_lock( $post->ID );
+
$actions['edit'] = sprintf(
'%s',
get_edit_post_link( $post->ID ),
- /* translators: %s: Post title. */
- esc_attr( sprintf( __( 'Edit “%s”' ), $title ) ),
- __( 'Edit' )
+ esc_attr(
+ sprintf(
+ $is_rtc_locked
+ /* translators: %s: Post title. */
+ ? __( 'Join editing “%s”', 'post list' )
+ /* translators: %s: Post title. */
+ : __( 'Edit “%s”' ),
+ $title
+ )
+ ),
+ /* translators: Action link text for a singular post in the post list. Can be any type of post. */
+ $is_rtc_locked ? _x( 'Join', 'post list' ) : __( 'Edit' )
);
/**
diff --git a/src/wp-admin/includes/misc.php b/src/wp-admin/includes/misc.php
index f60e1aedf037a..36adf8c971c5b 100644
--- a/src/wp-admin/includes/misc.php
+++ b/src/wp-admin/includes/misc.php
@@ -1133,7 +1133,8 @@ function _customizer_mobile_viewport_meta( $viewport_meta ) {
* @return array The Heartbeat response.
*/
function wp_check_locked_posts( $response, $data, $screen_id ) {
- $checked = array();
+ $checked = array();
+ $is_rtc_enabled = (bool) get_option( 'wp_collaboration_enabled' );
if ( array_key_exists( 'wp-check-locked-posts', $data ) && is_array( $data['wp-check-locked-posts'] ) ) {
foreach ( $data['wp-check-locked-posts'] as $key ) {
@@ -1149,15 +1150,23 @@ function wp_check_locked_posts( $response, $data, $screen_id ) {
$user = get_userdata( $user_id );
if ( $user && current_user_can( 'edit_post', $post_id ) ) {
- $send = array(
- 'name' => $user->display_name,
- /* translators: %s: User's display name. */
- 'text' => sprintf( __( '%s is currently editing' ), $user->display_name ),
- );
-
- if ( get_option( 'show_avatars' ) ) {
- $send['avatar_src'] = get_avatar_url( $user->ID, array( 'size' => 18 ) );
- $send['avatar_src_2x'] = get_avatar_url( $user->ID, array( 'size' => 36 ) );
+ if ( $is_rtc_enabled ) {
+ $send = array(
+ /* translators: Collaboration status message for a singular post in the post list. Can be any type of post. */
+ 'text' => _x( 'Currently being edited', 'post list' ),
+ 'collaborative' => true,
+ );
+ } else {
+ $send = array(
+ 'name' => $user->display_name,
+ /* translators: %s: User's display name. */
+ 'text' => sprintf( __( '%s is currently editing' ), $user->display_name ),
+ );
+
+ if ( get_option( 'show_avatars' ) ) {
+ $send['avatar_src'] = get_avatar_url( $user->ID, array( 'size' => 18 ) );
+ $send['avatar_src_2x'] = get_avatar_url( $user->ID, array( 'size' => 36 ) );
+ }
}
$checked[ $key ] = $send;