BP_REST_Messages_Endpoint::prepare_item_for_response( BP_Messages_Thread $thread, WP_REST_Request $request )
Prepares thread data for return as an object.
Description
Parameters
- $thread
-
(Required) Thread object.
- $request
-
(Required) Full details about the request.
Return
(WP_REST_Response)
Source
File: bp-messages/classes/class-bp-rest-messages-endpoint.php
public function prepare_item_for_response( $thread, $request ) {
global $wpdb;
$content = '';
if ( '' === $content ) {
if ( ! empty( $thread->messages ) ) {
foreach ( $thread->messages as $thread_message ) {
$content = trim( wp_strip_all_tags( do_shortcode( $thread_message->message ) ) );
if ( '' !== $content ) {
$thread->last_message_content = $thread_message->message;
$thread->last_message_subject = $thread_message->subject;
break;
}
}
}
}
$last_message = reset( $thread->messages );
if ( ! empty( $last_message ) ) {
$thread->last_message_id = $last_message->id;
}
$excerpt = '';
if ( isset( $thread->last_message_content ) ) {
$excerpt = wp_strip_all_tags( bp_create_excerpt( $thread->last_message_content, 75 ) );
}
$group_id = bp_messages_get_meta( $thread->last_message_id, 'group_id', true );
$first_message = ( method_exists( 'BP_Messages_Thread', 'get_first_message' ) ? BP_Messages_Thread::get_first_message( $thread->thread_id ) : '' );
if ( ! empty( $group_id ) && ! empty( $first_message ) ) {
$group_id = (int) bp_messages_get_meta( $first_message->id, 'group_id', true );
}
if ( (int) $group_id > 0 && ! empty( $first_message ) ) {
$group_message_thread_id = bp_messages_get_meta( $first_message->id, 'group_message_thread_id', true ); // group.
$group_id = (int) bp_messages_get_meta( $first_message->id, 'group_id', true );
$message_users = bp_messages_get_meta( $first_message->id, 'group_message_users', true ); // all - individual.
$message_type = bp_messages_get_meta( $first_message->id, 'group_message_type', true ); // open - private.
$message_from = bp_messages_get_meta( $first_message->id, 'message_from', true ); // group.
if ( bp_is_active( 'groups' ) ) {
$group_name = bp_get_group_name( groups_get_group( $group_id ) );
$group_link = bp_get_group_permalink( groups_get_group( $group_id ) );
} else {
$prefix = apply_filters( 'bp_core_get_table_prefix', $wpdb->base_prefix );
$groups_table = $prefix . 'bp_groups';
// phpcs:ignore
$group_name = $wpdb->get_var( "SELECT `name` FROM `{$groups_table}` WHERE `id` = '{$group_id}';" ); // db call ok; no-cache ok;
$group_link = '';
}
$group_name = ( empty( $group_name ) ) ? __( 'Deleted Group', 'buddyboss' ) : $group_name;
}
if (
isset( $message_from )
&& 'group' === $message_from
&& isset( $group_message_thread_id )
&& $thread->thread_id === (int) $group_message_thread_id
&& isset( $message_users )
&& isset( $message_type )
&& 'all' === $message_users
&& 'open' === $message_type
) {
$is_group_thread = 1;
}
if ( isset( $is_group_thread ) && $is_group_thread ) {
$avatar = array(
'thumb' => bp_core_fetch_avatar(
array(
'html' => false,
'object' => 'group',
'item_id' => $group_id,
'type' => 'thumb',
)
),
'full' => bp_core_fetch_avatar(
array(
'html' => false,
'object' => 'group',
'item_id' => $group_id,
'type' => 'full',
)
),
);
} else {
$recepients = $thread->recipients;
$curren_user_id = ( isset( $request['user_id'] ) && ! empty( $request['user_id'] ) ? $request['user_id'] : bp_current_user_id() );
if ( ! empty( $recepients ) && array_key_exists( $curren_user_id, $recepients ) ) {
unset( $recepients[ $curren_user_id ] );
}
if ( ! empty( $recepients ) && count( $recepients ) > 1 ) {
$avatar = array(
'full' => bp_core_fetch_avatar(
array(
'item_id' => $thread->last_sender_id,
'html' => false,
'type' => 'full',
'object' => 'user',
)
),
'thumb' => bp_core_fetch_avatar(
array(
'item_id' => $thread->last_sender_id,
'html' => false,
'object' => 'user',
)
),
);
} else {
$avatar_user = ! empty( $recepients ) && ! empty( reset( $recepients ) ) ? reset( $recepients )->user_id : $curren_user_id;
$avatar = array(
'full' => bp_core_fetch_avatar(
array(
'item_id' => $avatar_user,
'html' => false,
'type' => 'full',
'object' => 'user',
)
),
'thumb' => bp_core_fetch_avatar(
array(
'item_id' => $avatar_user,
'html' => false,
'object' => 'user',
)
),
);
}
}
$data = array(
'id' => $thread->thread_id,
'message_id' => $thread->last_message_id,
'last_sender_id' => $thread->last_sender_id,
'subject' => array(
'raw' => $thread->last_message_subject,
'rendered' => apply_filters( 'bp_get_message_thread_subject', wp_staticize_emoji( $thread->last_message_subject ) ),
),
'excerpt' => array(
'raw' => $excerpt,
'rendered' => apply_filters( 'bp_get_message_thread_excerpt', $excerpt ),
),
'message' => array(
'raw' => $thread->last_message_content,
'rendered' => apply_filters( 'bp_get_message_thread_content', wp_staticize_emoji( $thread->last_message_content ) ),
),
'date' => bp_rest_prepare_date_response( $thread->last_message_date ),
'start_date' => bp_rest_prepare_date_response( ( isset( $thread->first_message_date ) ? $thread->first_message_date : $thread->last_message_date ) ),
'unread_count' => ! empty( $thread->unread_count ) ? $thread->unread_count : 0,
'sender_ids' => $thread->sender_ids,
'current_user' => ( isset( $request['user_id'] ) && ! empty( $request['user_id'] ) ? $request['user_id'] : bp_loggedin_user_id() ),
'avatar' => $avatar,
'is_group' => ( ! empty( $group_id ) ? $group_id : false ),
'is_group_thread' => ( isset( $is_group_thread ) ? $is_group_thread : false ),
'group_name' => ( isset( $group_name ) ? $group_name : '' ),
'group_link' => ( isset( $group_link ) ? $group_link : '' ),
'group_message_users' => ( isset( $message_users ) ? $message_users : '' ),
'group_message_type' => ( isset( $message_type ) ? $message_type : '' ),
'group_message_from' => ( isset( $message_from ) ? $message_from : '' ),
'recipients_count' => ( ( isset( $thread->recipients ) && count( $thread->recipients ) > 1 ) ? count( $thread->recipients ) - ( isset( $request['user_id'] ) && ! empty( $request['user_id'] ) ? 1 : 0 ) : 0 ),
'recipients' => array(),
'messages' => array(),
);
if ( $thread->messages ) {
// update order of the message to latest one at the end.
$thread_messages = array_reverse( $thread->messages );
$thread->messages = $thread_messages;
// Loop through messages to prepare them for the response.
foreach ( $thread->messages as $message ) {
$data['messages'][] = $this->prepare_message_for_response( $message, $request );
}
}
if ( $thread->recipients ) {
// Loop through recipients to prepare them for the response.
foreach ( $thread->recipients as $recipient ) {
$data['recipients'][ $recipient->user_id ] = $this->prepare_recipient_for_response( $recipient, $request );
}
}
$data['avatar'] = $this->bp_rest_messages_get_avatars( $thread->thread_id );
// Pluck starred message ids.
$data['starred_message_ids'] = array_keys( array_filter( wp_list_pluck( $data['messages'], 'is_starred', 'id' ) ) );
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$data = $this->add_additional_fields_to_object( $data, $request );
$data = $this->filter_response_by_context( $data, $context );
$response = rest_ensure_response( $data );
$response->add_links( $this->prepare_links( $thread ) );
/**
* Filter a thread value returned from the API.
*
* @param WP_REST_Response $response Response generated by the request.
* @param WP_REST_Request $request Request used to generate the response.
* @param BP_Messages_Thread $thread The thread object.
*
* @since 0.1.0
*/
return apply_filters( 'bp_rest_messages_prepare_value', $response, $request, $thread );
}
Changelog
| Version | Description |
|---|---|
| 0.1.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.