bp_nouveau_ajax_messages_send_reply()
Description Description
Source Source
File: bp-templates/bp-nouveau/includes/messages/ajax.php
function bp_nouveau_ajax_messages_send_reply() {
$response = array(
'feedback' => __( 'There was a problem sending your reply. Please try again.', 'buddypress' ),
'type' => 'error',
);
// Verify nonce
if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'messages_send_message' ) ) {
wp_send_json_error( $response );
}
if ( empty( $_POST['content'] ) || empty( $_POST['thread_id'] ) ) {
$response['feedback'] = __( 'Your reply was not sent. Please enter some content.', 'buddypress' );
wp_send_json_error( $response );
}
$thread_id = (int) $_POST['thread_id'];
if ( ! bp_current_user_can( 'bp_moderate' ) && ( ! messages_is_valid_thread( $thread_id ) || ! messages_check_thread_access( $thread_id ) ) ) {
wp_send_json_error( $response );
}
$new_reply = messages_new_message( array(
'thread_id' => $thread_id,
'subject' => ! empty( $_POST['subject'] ) ? $_POST['subject'] : false,
'content' => $_POST['content']
) );
// Send the reply.
if ( empty( $new_reply ) ) {
wp_send_json_error( $response );
}
// Get the message by pretending we're in the message loop.
global $thread_template;
$bp = buddypress();
$reset_action = $bp->current_action;
// Override bp_current_action().
$bp->current_action = 'view';
bp_thread_has_messages( array( 'thread_id' => $thread_id ) );
// Set the current message to the 2nd last.
$thread_template->message = end( $thread_template->thread->messages );
$thread_template->message = prev( $thread_template->thread->messages );
// Set current message to current key.
$thread_template->current_message = key( $thread_template->thread->messages );
// Now manually iterate message like we're in the loop.
bp_thread_the_message();
// Manually call oEmbed
// this is needed because we're not at the beginning of the loop.
bp_messages_embed();
// Output single message template part.
$reply = 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_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,
) );
$reply['star_link'] = $star_link;
$reply['is_starred'] = array_search( 'unstar', explode( '/', $star_link ) );
}
$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 ) ) {
$reply = array_merge( $reply, $extra_content );
}
// Clean up the loop.
bp_thread_messages();
// Remove the bp_current_action() override.
$bp->current_action = $reset_action;
wp_send_json_success( array(
'messages' => array( $reply ),
'feedback' => __( 'Your reply was sent successfully', 'buddypress' ),
'type' => 'success',
) );
}
Changelog Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |