bp_nouveau_ajax_get_thread_messages()
AJAX get messages for each thread.
Description
Source
File: bp-templates/bp-nouveau/includes/messages/ajax.php
function bp_nouveau_ajax_get_thread_messages() {
global $thread_template, $media_template;
if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'bp_nouveau_messages' ) ) {
wp_send_json_error( array(
'feedback' => __( 'Unauthorized request.', 'buddyboss' ),
'type' => 'error'
) );
}
$response = array(
'feedback' => __( 'Sorry, no messages were found.', 'buddyboss' ),
'type' => 'info'
);
$response_no_more = array(
'feedback' => __( 'Sorry, no more messages can be loaded.', 'buddyboss' ),
'type' => 'info'
);
if ( empty( $_POST['id'] ) ) {
wp_send_json_error( $response );
}
$thread_id = (int) $_POST['id'];
$bp = buddypress();
$reset_action = $bp->current_action;
// Override bp_current_action().
$bp->current_action = 'view';
bp_get_thread( array( 'thread_id' => $thread_id ) );
$thread = new stdClass;
// Check recipients if connected or not
if ( bp_force_friendship_to_message() && bp_is_active( 'friends' ) ) {
$recipients = (array) $thread_template->thread->recipients;
// Strip the sender from the recipient list, and unset them if they are
// not alone. If they are alone, let them talk to themselves.
if ( isset( $recipients[ bp_loggedin_user_id() ] ) && ( count( $recipients ) > 1 ) ) {
unset( $recipients[ bp_loggedin_user_id() ] );
}
foreach ( $recipients as $recipient ) {
if ( bp_loggedin_user_id() != $recipient->user_id && ! friends_check_friendship( bp_loggedin_user_id(), $recipient->user_id ) ) {
if ( sizeof( $recipients ) > 1 ) {
$thread->feedback_error = array( 'feedback' => __( 'You need to be connected with all recipients to continue this conversation.', 'buddyboss' ), 'type' => 'error' );
} else {
$thread->feedback_error = array( 'feedback' => __( 'You need to be connected with this member to continue this conversation.', 'buddyboss' ), 'type' => 'error' );
}
break;
}
}
}
// Simulate the loop.
$args = [
'thread_id' => $thread_id,
'per_page' => isset($_POST['per_page']) && $_POST['per_page']? $_POST['per_page'] : 10,
'before' => isset($_POST['before']) && $_POST['before']? $_POST['before'] : null,
];
if ( ! bp_thread_has_messages( $args ) ) {
// Remove the bp_current_action() override.
$bp->current_action = $reset_action;
wp_send_json_error( $args['before']? $response_no_more : $response );
}
if ( empty( $_POST['js_thread'] ) ) {
$thread->thread = array(
'id' => bp_get_the_thread_id(),
'subject' => strip_tags( bp_get_the_thread_subject() ),
'started_date' => date(
get_option('date_format'),
strtotime($thread_template->thread->first_message_date)
)
);
if ( is_array( $thread_template->thread->recipients ) ) {
foreach ( $thread_template->thread->recipients as $recipient ) {
if ( empty( $recipient->is_deleted ) ) {
$thread->thread['recipients'][] = array(
'avatar' => esc_url( bp_core_fetch_avatar( array(
'item_id' => $recipient->user_id,
'object' => 'user',
'type' => 'thumb',
'width' => BP_AVATAR_THUMB_WIDTH,
'height' => BP_AVATAR_THUMB_HEIGHT,
'html' => false,
) ) ),
'user_link' => bp_core_get_userlink( $recipient->user_id, false, true ),
'user_name' => bp_core_get_user_displayname( $recipient->user_id ),
'is_you' => $recipient->user_id == bp_loggedin_user_id()
);
}
}
}
}
$thread->messages = array();
$i = 0;
while ( bp_thread_messages() ) : bp_thread_the_message();
$thread->messages[ $i ] = array(
'id' => bp_get_the_thread_message_id(),
'content' => do_shortcode( bp_get_the_thread_message_content() ),
'sender_id' => bp_get_the_thread_message_sender_id(),
'sender_name' => esc_html( bp_get_the_thread_message_sender_name() ),
'sender_link' => bp_get_the_thread_message_sender_link(),
'sender_is_you' => bp_get_the_thread_message_sender_id() === bp_loggedin_user_id(),
'sender_avatar' => esc_url( bp_core_fetch_avatar( array(
'item_id' => bp_get_the_thread_message_sender_id(),
'object' => 'user',
'type' => 'thumb',
'width' => 32,
'height' => 32,
'html' => false,
) ) ),
'date' => bp_get_the_thread_message_date_sent() * 1000,
'display_date' => bp_get_the_thread_message_time_since(),
);
if ( bp_is_active( 'messages', 'star' ) ) {
$star_link = bp_get_the_message_star_action_link( array(
'message_id' => bp_get_the_thread_message_id(),
'url_only' => true,
) );
$thread->messages[ $i ]['star_link'] = $star_link;
$thread->messages[ $i ]['is_starred'] = array_search( 'unstar', explode( '/', $star_link ) );
$thread->messages[ $i ]['star_nonce'] = wp_create_nonce( 'bp-messages-star-' . bp_get_the_thread_message_id() );
}
if ( bp_is_active( 'media' ) && bp_is_messages_media_support_enabled() ) {
$media_ids = bp_messages_get_meta( bp_get_the_thread_message_id(), 'bp_media_ids', true );
if ( ! empty( $media_ids ) && bp_has_media( array( 'include' => $media_ids, 'order_by' => 'menu_order', 'sort' => 'ASC' ) ) ) {
$thread->messages[ $i ]['media'] = array();
while ( bp_media() ) {
bp_the_media();
$thread->messages[ $i ]['media'][] = array(
'id' => bp_get_media_id(),
'title' => bp_get_media_title(),
'thumbnail' => bp_get_media_attachment_image_thumbnail(),
'full' => bp_get_media_attachment_image(),
'meta' => $media_template->media->attachment_data->meta,
);
}
}
}
if ( bp_is_active( 'media' ) && bp_is_messages_gif_support_enabled() ) {
$gif_data = bp_messages_get_meta( bp_get_the_thread_message_id(), '_gif_data', true );
if ( ! empty( $gif_data ) ) {
$preview_url = wp_get_attachment_url( $gif_data['still'] );
$video_url = wp_get_attachment_url( $gif_data['mp4'] );
$thread->messages[ $i ]['gif'] = array(
'preview_url' => $preview_url,
'video_url' => $video_url,
);
}
}
$extra_content = bp_nouveau_messages_catch_hook_content( array(
'beforeMeta' => 'bp_before_message_meta',
'afterMeta' => 'bp_after_message_meta',
'beforeContent' => 'bp_before_message_content',
'afterContent' => 'bp_after_message_content',
) );
if ( array_filter( $extra_content ) ) {
$thread->messages[ $i ] = array_merge( $thread->messages[ $i ], $extra_content );
}
$i += 1;
endwhile;
$thread->messages = array_filter( $thread->messages );
// Remove the bp_current_action() override.
$bp->current_action = $reset_action;
// pagination
$thread->per_page = $thread_template->thread->messages_perpage;
$thread->messages_count = $thread_template->thread->total_messages;
$thread->next_messages_timestamp = $thread_template->thread->messages[count($thread_template->thread->messages) - 1]->date_sent;
wp_send_json_success( $thread );
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 3.0.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.