Skip to content
Closed
14 changes: 8 additions & 6 deletions src/js/_enqueues/admin/inline-edit-post.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = $( '<img />', {
'class': 'avatar avatar-18 photo',
width: 18,
Expand All @@ -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 ) {
Expand Down
4 changes: 4 additions & 0 deletions src/wp-admin/css/list-tables.css
Original file line number Diff line number Diff line change
Expand Up @@ -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%;
}
Expand Down
37 changes: 29 additions & 8 deletions src/wp-admin/includes/class-wp-posts-list-table.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '';
Expand Down Expand Up @@ -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 ) {
Expand Down Expand Up @@ -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(
'<a href="%s" aria-label="%s">%s</a>',
get_edit_post_link( $post->ID ),
/* translators: %s: Post title. */
esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $title ) ),
__( 'Edit' )
esc_attr(
sprintf(
$is_rtc_locked
/* translators: %s: Post title. */
? __( 'Join editing &#8220;%s&#8221;', 'post list' )
/* translators: %s: Post title. */
: __( 'Edit &#8220;%s&#8221;' ),
$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' )
);

/**
Expand Down
29 changes: 19 additions & 10 deletions src/wp-admin/includes/misc.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) {
Expand All @@ -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;
Expand Down
Loading