Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
10/28/2024 05:27:43 PM (5 months ago)
Author:
espellcaste
Message:

Improve deleted-user private messages in the web and REST API.

Private messages from a deleted user are properly anonymized in both the web and REST API.

Props imath, niftythree.

Closes https://github.com/buddypress/buddypress/pull/384
Fixes #9160

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-templates/bp-nouveau/includes/messages/ajax.php

    r13897 r14061  
    163163        wp_send_json_error( $response );
    164164    }
     165}
     166
     167/**
     168 * Returns recipient's data for the Backbone UI.
     169 *
     170 * @since 15.0.0
     171 *
     172 * @param integer $user_id The User ID.
     173 * @return array
     174 */
     175function bp_nouveau_ajax_get_message_recipients_data( $user_id ) {
     176    $user_link   = bp_core_get_userlink( $user_id, false, true );
     177    $avatar_args = array(
     178        'item_id' => $user_id,
     179        'object'  => 'user',
     180        'type'    => 'thumb',
     181        'width'   => 28,
     182        'height'  => 28,
     183        'html'    => false,
     184    );
     185
     186    if ( ! $user_link ) {
     187        return array(
     188            'avatar'    => esc_url( bp_core_avatar_default( 'gravatar', $avatar_args ) ),
     189            'user_link' => '',
     190            'user_name' => '',
     191        );
     192    }
     193
     194    return array(
     195        'avatar'    => esc_url( bp_core_fetch_avatar( $avatar_args ) ),
     196        'user_link' => esc_url( $user_link ),
     197        'user_name' => esc_html( bp_core_get_user_displayname( $user_id ) ),
     198    );
     199}
     200
     201/**
     202 * Returns sender's data for the Backbone UI.
     203 *
     204 * @since 15.0.0
     205 *
     206 * @param integer $user_id The User ID.
     207 * @return array
     208 */
     209function bp_nouveau_ajax_get_message_sender_data( $user_id ) {
     210    $sender_link = bp_core_get_userlink( $user_id, false, true );
     211    $avatar_args = array(
     212        'item_id' => $user_id,
     213        'object'  => 'user',
     214        'type'    => 'thumb',
     215        'width'   => 32,
     216        'height'  => 32,
     217        'html'    => false,
     218    );
     219
     220    if ( ! $sender_link ) {
     221        return array(
     222            'name'   => esc_html__( 'Deleted User', 'buddypress' ),
     223            'link'   => $sender_link,
     224            'avatar' => esc_url( bp_core_avatar_default( 'gravatar', $avatar_args ) ),
     225        );
     226    }
     227
     228    return array(
     229        'name'   => esc_html( bp_core_get_user_displayname( $user_id ) ),
     230        'link'   => esc_url( $sender_link ),
     231        'avatar' => esc_url( bp_core_fetch_avatar( $avatar_args ) ),
     232    );
    165233}
    166234
     
    333401    while ( bp_message_threads() ) : bp_message_thread();
    334402        $last_message_id = (int) $messages_template->thread->last_message_id;
     403        $sender_data     = bp_nouveau_ajax_get_message_sender_data( $messages_template->thread->last_sender_id );
    335404
    336405        $threads->threads[ $i ] = array(
     
    341410            'content'       => do_shortcode( bp_get_message_thread_content() ),
    342411            'unread'        => bp_message_thread_has_unread(),
    343             'sender_name'   => bp_core_get_user_displayname( $messages_template->thread->last_sender_id ),
    344             'sender_link'   => bp_core_get_userlink( $messages_template->thread->last_sender_id, false, true ),
    345             'sender_avatar' => esc_url( bp_core_fetch_avatar( array(
    346                 'item_id' => $messages_template->thread->last_sender_id,
    347                 'object'  => 'user',
    348                 'type'    => 'thumb',
    349                 'width'   => 32,
    350                 'height'  => 32,
    351                 'html'    => false,
    352             ) ) ),
     412            'sender_name'   => $sender_data['name'],
     413            'sender_link'   => $sender_data['link'],
     414            'sender_avatar' => $sender_data['avatar'],
    353415            'count'         => bp_get_message_thread_total_count(),
    354416            'date'          => strtotime( bp_get_message_thread_last_post_date_raw() ) * 1000,
     
    358420        if ( is_array( $messages_template->thread->recipients ) ) {
    359421            foreach ( $messages_template->thread->recipients as $recipient ) {
    360                 $threads->threads[ $i ]['recipients'][] = array(
    361                     'avatar' => esc_url( bp_core_fetch_avatar( array(
    362                         'item_id' => $recipient->user_id,
    363                         'object'  => 'user',
    364                         'type'    => 'thumb',
    365                         'width'   => 28,
    366                         'height'  => 28,
    367                         'html'    => false,
    368                     ) ) ),
    369                     'user_link' => bp_core_get_userlink( $recipient->user_id, false, true ),
    370                     'user_name' => bp_members_get_user_slug( $recipient->user_id ),
    371                 );
     422                $threads->threads[ $i ]['recipients'][] = bp_nouveau_ajax_get_message_recipients_data( $recipient->user_id );
    372423            }
    373424        }
     
    421472    $bp->current_action = $reset_action;
    422473
    423     // Return the successfull reply.
     474    // Return the successful reply.
    424475    wp_send_json_success( $threads );
    425476}
     
    508559        if ( is_array( $thread_template->thread->recipients ) ) {
    509560            foreach ( $thread_template->thread->recipients as $recipient ) {
    510                 $thread->thread['recipients'][] = array(
    511                     'avatar' => esc_url( bp_core_fetch_avatar( array(
    512                         'item_id' => $recipient->user_id,
    513                         'object'  => 'user',
    514                         'type'    => 'thumb',
    515                         'width'   => 28,
    516                         'height'  => 28,
    517                         'html'    => false,
    518                     ) ) ),
    519                     'user_link' => bp_core_get_userlink( $recipient->user_id, false, true ),
    520                     'user_name' => bp_members_get_user_slug( $recipient->user_id ),
    521                 );
     561                $thread->thread['recipients'][] = bp_nouveau_ajax_get_message_recipients_data( $recipient->user_id );
    522562            }
    523563        }
     
    528568
    529569    while ( bp_thread_messages() ) : bp_thread_the_message();
     570        $sender_data = bp_nouveau_ajax_get_message_sender_data( bp_get_the_thread_message_sender_id() );
     571
    530572        $thread->messages[ $i ] = array(
    531573            'id'            => bp_get_the_thread_message_id(),
    532574            'content'       => do_shortcode( bp_get_the_thread_message_content() ),
    533575            'sender_id'     => bp_get_the_thread_message_sender_id(),
    534             'sender_name'   => esc_html( bp_get_the_thread_message_sender_name() ),
    535             'sender_link'   => bp_get_the_thread_message_sender_link(),
    536             'sender_avatar' => esc_url( bp_core_fetch_avatar( array(
    537                 'item_id' => bp_get_the_thread_message_sender_id(),
    538                 'object'  => 'user',
    539                 'type'    => 'thumb',
    540                 'width'   => 32,
    541                 'height'  => 32,
    542                 'html'    => false,
    543             ) ) ),
     576            'sender_name'   => $sender_data['name'],
     577            'sender_link'   => $sender_data['link'],
     578            'sender_avatar' => $sender_data['avatar'],
    544579            'date'          => bp_get_the_thread_message_date_sent() * 1000,
    545580            'display_date'  => bp_get_the_thread_message_time_since(),
Note: See TracChangeset for help on using the changeset viewer.