bp_nouveau_ajax_groups_send_message()
Send group message to group members.
Description
Source
File: bp-templates/bp-nouveau/includes/groups/ajax.php
function bp_nouveau_ajax_groups_send_message() { global $wpdb, $bp; if ( false === bp_disable_group_messages() ) { return; } if ( empty( $_POST['action'] ) ) { wp_send_json_error(); } $response = array( 'feedback' => '<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>' . __( 'There was a problem loading recipients. Please try again.', 'buddyboss' ) . '</p></div>', 'type' => 'error', ); if ( false === bp_is_active( 'messages' ) ) { wp_send_json_error( $response ); } if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'send_messages_users' ) ) { wp_send_json_error( $response ); } if ( isset( $_POST['gif'] ) && '' !== $_POST['gif'] ) { $_POST['gif_data'] = json_decode( wp_kses_stripslashes( $_POST['gif'] ), true ); } if ( isset( $_POST['media'] ) && '' !== $_POST['media'] ) { $_POST['media'] = json_decode( wp_kses_stripslashes( $_POST['media'] ), true ); } if ( isset( $_POST['document'] ) && '' !== $_POST['document'] ) { $_POST['document'] = json_decode( wp_kses_stripslashes( $_POST['document'] ), true ); } if ( '' === $_POST['content'] && ( ! empty( $_POST['document'] ) || !empty( $_POST['media'] ) ) ) { $_POST['content'] = ' '; } // Get Members list if "All Group Members" selected. if ( 'all' === $_POST['users'] ) { // Fetch all the group members. $args = array( 'per_page' => 9999999999999999999, 'group_id' => trim( $_POST['group'] ), 'exclude' => array( bp_loggedin_user_id() ), 'exclude_admins_mods' => false, ); $group_members = groups_get_group_members( $args ); $members = wp_list_pluck( $group_members['members'], 'ID' ); // We get members array from $_POST['users_list'] because user already selected them. } else { $members = $_POST['users_list']; } if ( empty( $members ) ) { $response['feedback'] = 'No Members Selected.'; wp_send_json_error( $response ); } $group = ( isset( $_POST ) && isset( $_POST['group'] ) && '' !== $_POST['group'] ) ? trim( $_POST['group'] ) : ''; // Group id $message_users = ( isset( $_POST ) && isset( $_POST['users'] ) && '' !== $_POST['users'] ) ? trim( $_POST['users'] ) : ''; // all - individual $message_type = ( isset( $_POST ) && isset( $_POST['type'] ) && '' !== $_POST['type'] ) ? trim( $_POST['type'] ) : ''; // open - private if ( empty( $group ) ) { $response['feedback'] = 'No group Selected.'; wp_send_json_error( $response ); } // If "Group Thread" selected. if ( 'open' === $message_type ) { // "All Group Members" selected. if ( 'all' === $message_users ) { // Comma separated members list to find in meta query. $message_users_ids = implode( ',', $members ); // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "message_users_ids". $_POST['message_meta_users_list'] = $message_users_ids; $group_thread = groups_get_groupmeta( (int) $group, 'group_message_thread' ); $is_deleted = false; $group_thread_id = ''; $_POST['message_thread_type'] = ''; if ( '' !== $group_thread ) { $total_threads = $wpdb->get_results( $wpdb->prepare( "SELECT is_deleted FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", (int) $group_thread ) ); // db call ok; no-cache ok; foreach ( $total_threads as $thread ) { if ( 1 === (int) $thread->is_deleted ) { $is_deleted = true; break; } } if ( $is_deleted ) { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } if ( '' !== $group_thread && ! $is_deleted && isset( $_POST['message_thread_type'] ) && empty( $_POST['message_thread_type'] ) ) { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; $group_thread_id = $group_thread; } else { // Backward compatibility when we dont store thread_id in group meta. $meta = array( array( 'key' => 'group_id', 'value' => $group, 'compare' => '=', ), array( 'key' => 'group_message_users', 'value' => 'all', 'compare' => '=', ), array( 'key' => 'group_message_type', 'value' => 'open', 'compare' => '=', ), array( 'key' => 'message_users_ids', 'value' => $message_users_ids, ), ); // Check if there is already previously group thread created. if ( bp_has_message_threads( array( 'meta_query' => $meta ) ) ) { $thread_id = 0; while ( bp_message_threads() ) { bp_message_thread(); $thread_id = bp_get_message_thread_id(); if ( $thread_id ) { break; } } // If $thread_id found then add as a reply to that thread. if ( $thread_id ) { $group_thread_id = $thread_id; // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; // Create a new group thread. } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } // Create a new group thread. } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } /** * Create Message based on the `message_thread_type` and `group_thread_id`. */ if ( isset( $_POST['message_thread_type'] ) && 'new' === $_POST['message_thread_type'] ) { $send = bp_groups_messages_new_message( array( 'recipients' => $members, 'subject' => wp_trim_words( $_POST['content'], messages_get_default_subject_length() ), 'content' => $_POST['content'], 'error_type' => 'wp_error', 'append_thread' => false, ) ); if ( ! is_wp_error( $send ) && ! empty( $send ) ) { groups_update_groupmeta( (int) $group, 'group_message_thread', $send ); } bp_groups_messages_validate_message( $send ); } elseif ( isset( $_POST['message_thread_type'] ) && 'reply' === $_POST['message_thread_type'] && ! empty( $group_thread_id ) ) { groups_update_groupmeta( (int) $group, 'group_message_thread', $group_thread_id ); $new_reply = bp_groups_messages_new_message( array( 'thread_id' => $group_thread_id, 'subject' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'content' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'date_sent' => bp_core_current_time(), 'mark_visible' => true, 'error_type' => 'wp_error', ) ); bp_groups_messages_validate_message( $new_reply ); } // "Individual Members" Selected. } else { $meta = array( array( 'key' => 'group_message_type', 'value' => 'open', 'compare' => '!=', ), ); $individual_thread_id = 0; $_POST['message_thread_type'] = ''; // Check if there is already previously individual group thread created. if ( bp_has_message_threads( array( 'meta_query' => $meta ) ) ) { $thread_id = 0; while ( bp_message_threads() ) { bp_message_thread(); $thread_id = bp_get_message_thread_id(); if ( $thread_id ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); $current_recipients = $members; $members_recipients = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members_recipients[] = (int) $single_recipients; } // check both previous and current recipients are same. $is_recipient_match = ( is_array( $previous_thread_recipients ) && is_array( $members_recipients ) && count( $previous_thread_recipients ) === count( $members_recipients ) && array_diff( $previous_thread_recipients, $members_recipients ) === array_diff( $members_recipients, $previous_thread_recipients ) ); $group_thread = (int) groups_get_groupmeta( (int) $group, 'group_message_thread' ); // If recipients are matched. if ( $is_recipient_match && (int) $thread_id !== $group_thread ) { break; } } } // If $thread_id found then add as a reply to that thread. if ( $thread_id ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); $last_message = BP_Messages_Thread::get_last_message( $thread_id ); $message_type = bp_messages_get_meta( $last_message->id, 'group_message_users', true ); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); $current_recipients = $members; $members_recipients = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members_recipients[] = (int) $single_recipients; } // check both previous and current recipients are same. $is_recipient_match = ( is_array( $previous_thread_recipients ) && is_array( $members_recipients ) && count( $previous_thread_recipients ) === count( $members_recipients ) && array_diff( $previous_thread_recipients, $members_recipients ) === array_diff( $members_recipients, $previous_thread_recipients ) ); $group_thread = (int) groups_get_groupmeta( (int) $group, 'group_message_thread' ); // If recipients are matched. if ( $is_recipient_match && (int) $thread_id !== $group_thread ) { $individual_thread_id = $thread_id; // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; // Else recipients not matched. } else { $previous_threads = BP_Messages_Message::get_existing_threads( $members, bp_loggedin_user_id() ); $existing_thread = 0; if ( $previous_threads ) { foreach ( $previous_threads as $thread ) { $is_active_recipient = BP_Messages_Thread::is_thread_recipient( $thread->thread_id, bp_loggedin_user_id() ); if ( $is_active_recipient ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread->thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); $current_recipients = $members; $members = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members[] = (int) $single_recipients; } // check both previous and current recipients are same. $is_recipient_match = ( is_array( $previous_thread_recipients ) && is_array( $members ) && count( $previous_thread_recipients ) === count( $members ) && array_diff( $previous_thread_recipients, $members ) === array_diff( $members, $previous_thread_recipients ) ); // check any messages of this thread should not be a open & all. $message_ids = wp_list_pluck( $thread->messages, 'id' ); $add_existing = true; foreach ( $message_ids as $id ) { // group_message_users not open. $message_users = bp_messages_get_meta( $id, 'group_message_users', true ); // all - individual. if ( 'all' === $message_users ) { $add_existing = false; break; } } // If recipients are matched. if ( $is_recipient_match && $add_existing ) { $existing_thread = (int) $thread->thread_id; } } } if ( $existing_thread > 0 ) { $individual_thread_id = $existing_thread; // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } // Else no thread found. } else { $previous_threads = BP_Messages_Message::get_existing_threads( $members, bp_loggedin_user_id() ); $existing_thread = 0; if ( $previous_threads ) { foreach ( $previous_threads as $thread ) { $is_active_recipient = BP_Messages_Thread::is_thread_recipient( $thread->thread_id, bp_loggedin_user_id() ); if ( $is_active_recipient ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread->thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); $current_recipients = $members; $members = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members[] = (int) $single_recipients; } // check both previous and current recipients are same. $is_recipient_match = ( is_array( $previous_thread_recipients ) && is_array( $members ) && count( $previous_thread_recipients ) === count( $members ) && array_diff( $previous_thread_recipients, $members ) === array_diff( $members, $previous_thread_recipients ) ); // check any messages of this thread should not be a open & all. $message_ids = wp_list_pluck( $thread->messages, 'id' ); $add_existing = true; foreach ( $message_ids as $id ) { // group_message_users not open $message_users = bp_messages_get_meta( $id, 'group_message_users', true ); // all - individual. if ( 'all' === $message_users ) { $add_existing = false; break; } } // If recipients are matched. if ( $is_recipient_match && $add_existing ) { $existing_thread = (int) $thread->thread_id; } } } if ( $existing_thread > 0 ) { $individual_thread_id = $existing_thread; // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } // Else no previous thread found. } else { $previous_threads = BP_Messages_Message::get_existing_threads( $members, bp_loggedin_user_id() ); $existing_thread = 0; if ( $previous_threads ) { foreach ( $previous_threads as $thread ) { $is_active_recipient = BP_Messages_Thread::is_thread_recipient( $thread->thread_id, bp_loggedin_user_id() ); if ( $is_active_recipient ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread->thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); $current_recipients = $members; $members = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members[] = (int) $single_recipients; } // check both previous and current recipients are same. $is_recipient_match = ( is_array( $previous_thread_recipients ) && is_array( $members ) && count( $previous_thread_recipients ) === count( $members ) && array_diff( $previous_thread_recipients, $members ) === array_diff( $members, $previous_thread_recipients ) ); // check any messages of this thread should not be a open & all. $message_ids = wp_list_pluck( $thread->messages, 'id' ); $add_existing = true; foreach ( $message_ids as $id ) { // group_message_users not open $message_users = bp_messages_get_meta( $id, 'group_message_users', true ); // all - individual. if ( 'all' === $message_users ) { $add_existing = false; break; } } // If recipients are matched. if ( $is_recipient_match && $add_existing ) { $existing_thread = (int) $thread->thread_id; } } } if ( $existing_thread > 0 ) { $individual_thread_id = $existing_thread; // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } /** * Create Message based on the `message_thread_type` and `individual_thread_id`. */ if ( isset( $_POST['message_thread_type'] ) && 'new' === $_POST['message_thread_type'] ) { $send = bp_groups_messages_new_message( array( 'recipients' => $members, 'subject' => wp_trim_words( $_POST['content'], messages_get_default_subject_length() ), 'content' => $_POST['content'], 'error_type' => 'wp_error', 'append_thread' => false, ) ); bp_groups_messages_validate_message( $send, 'individual' ); } elseif ( isset( $_POST['message_thread_type'] ) && 'reply' === $_POST['message_thread_type'] && ! empty( $individual_thread_id ) ) { $new_reply = bp_groups_messages_new_message( array( 'thread_id' => $individual_thread_id, 'subject' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'content' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'date_sent' => bp_core_current_time(), 'mark_visible' => true, 'error_type' => 'wp_error', ) ); bp_groups_messages_validate_message( $new_reply, 'individual' ); } } // Else "Private Reply (BCC)" selected. } else { // We have to send Message to all members to "Individual" message in both cases like "All Group Members" OR "Individual Members" selected. foreach ( $members as $member ) { $meta = array( array( 'key' => 'group_message_type', 'value' => 'open', 'compare' => '!=', ), ); $thread_loop_message_member = $member; $thread_loop_message_sent = false; // Find existing thread which are private. if ( bp_has_message_threads( array( 'meta_query' => $meta ) ) ) { $thread_id = 0; $member_thread_id = 0; while ( bp_message_threads() ) { bp_message_thread(); $thread_id = bp_get_message_thread_id(); if ( $thread_id ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); $current_recipients[] = $thread_loop_message_member; $member_arr = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $member_arr[] = (int) $single_recipients; } $first_message = BP_Messages_Thread::get_first_message( $thread_id ); $message_user = bp_messages_get_meta( $first_message->id, 'group_message_users', true ); $message_type = bp_messages_get_meta( $first_message->id, 'group_message_type', true ); // open - private. // check both previous and current recipients are same. $is_recipient_match = ( $previous_thread_recipients == $member_arr ); // If recipients are matched. if ( $is_recipient_match && 'all' !== $message_user ) { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; $member_thread_id = $thread_id; $thread_loop_message_sent = true; // If recipients then break the loop and go ahead because we don't need to check other threads. break; } elseif ( $is_recipient_match && 'all' === $message_user && 'open' !== $message_type ) { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; $member_thread_id = $thread_id; $thread_loop_message_sent = true; // If recipients then break the loop and go ahead because we don't need to check other threads. break; } } } // If there is no any thread matched. if ( false === $thread_loop_message_sent ) { $member_check = array(); $member_check[] = $member; $member_check[] = bp_loggedin_user_id(); $previous_threads = BP_Messages_Message::get_existing_threads( $member_check, bp_loggedin_user_id() ); $existing_thread = 0; if ( $previous_threads ) { foreach ( $previous_threads as $thread ) { $is_active_recipient = BP_Messages_Thread::is_thread_recipient( $thread->thread_id, bp_loggedin_user_id() ); if ( $is_active_recipient ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread->thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); if ( is_array( $member ) ) { $current_recipients = $member; } else { $current_recipients[] = $member; } $members = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members[] = (int) $single_recipients; } $first_message = BP_Messages_Thread::get_first_message( $thread->thread_id ); $message_user = bp_messages_get_meta( $first_message->id, 'group_message_users', true ); $message_type = bp_messages_get_meta( $first_message->id, 'group_message_type', true ); // open - private // check both previous and current recipients are same. $is_recipient_match = ( $previous_thread_recipients == $members ); // If recipients are matched. if ( $is_recipient_match && 'all' !== $message_user ) { $existing_thread = (int) $thread->thread_id; } elseif ( $is_recipient_match && 'all' === $message_user && 'open' !== $message_type ) { $existing_thread = (int) $thread->thread_id; } } } if ( $existing_thread > 0 ) { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; $member_thread_id = $existing_thread; } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } /** * Create Message based on the `message_thread_type` and `member_thread_id`. */ if ( isset( $_POST['message_thread_type'] ) && 'new' === $_POST['message_thread_type'] ) { $message = bp_groups_messages_new_message( array( 'recipients' => $member, 'subject' => wp_trim_words( $_POST['content'], messages_get_default_subject_length() ), 'content' => $_POST['content'], 'error_type' => 'wp_error', 'is_hidden' => true, 'append_thread' => false, ) ); } elseif ( isset( $_POST['message_thread_type'] ) && 'reply' === $_POST['message_thread_type'] && ! empty( $member_thread_id ) ) { $message = bp_groups_messages_new_message( array( 'thread_id' => $member_thread_id, 'subject' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'content' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'date_sent' => bp_core_current_time(), 'mark_visible' => true, 'error_type' => 'wp_error', ) ); } // If no existing private thread found. } else { $member_check = array(); $member_check[] = $member; $member_check[] = bp_loggedin_user_id(); $previous_threads = BP_Messages_Message::get_existing_threads( $member_check, bp_loggedin_user_id() ); $existing_thread = 0; $member_thread_id = 0; if ( $previous_threads ) { foreach ( $previous_threads as $thread ) { $is_active_recipient = BP_Messages_Thread::is_thread_recipient( $thread->thread_id, bp_loggedin_user_id() ); if ( $is_active_recipient ) { // get the thread recipients. $thread = new BP_Messages_Thread( $thread->thread_id ); $thread_recipients = $thread->get_recipients(); $previous_thread_recipients = array(); // Store thread recipients to $previous_ids array. foreach ( $thread_recipients as $thread_recipient ) { if ( $thread_recipient->user_id !== bp_loggedin_user_id() ) { $previous_thread_recipients[] = $thread_recipient->user_id; } } $current_recipients = array(); if ( is_array( $member ) ) { $current_recipients = $member; } else { $current_recipients[] = $member; } $members = array(); // Store current recipients to $members array. foreach ( $current_recipients as $single_recipients ) { $members[] = (int) $single_recipients; } $first_message = BP_Messages_Thread::get_first_message( $thread->thread_id ); $message_user = bp_messages_get_meta( $first_message->id, 'group_message_users', true ); $message_type = bp_messages_get_meta( $first_message->id, 'group_message_type', true ); // open - private. // check both previous and current recipients are same. $is_recipient_match = ( $previous_thread_recipients == $members ); // If recipients are matched. if ( $is_recipient_match && 'all' !== $message_user ) { $existing_thread = (int) $thread->thread_id; } elseif ( $is_recipient_match && 'all' === $message_user && 'open' !== $message_type ) { $existing_thread = (int) $thread->thread_id; } } } if ( $existing_thread > 0 ) { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'reply'; $member_thread_id = $existing_thread; } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } } else { // This post variable will using in "bp_media_messages_save_group_data" function for storing message meta "group_message_thread_type". $_POST['message_thread_type'] = 'new'; } /** * Create Message based on the `message_thread_type` and `member_thread_id`. */ if ( isset( $_POST['message_thread_type'] ) && 'new' === $_POST['message_thread_type'] ) { $message = bp_groups_messages_new_message( array( 'recipients' => $member, 'subject' => wp_trim_words( $_POST['content'], messages_get_default_subject_length() ), 'content' => $_POST['content'], 'error_type' => 'wp_error', 'is_hidden' => true, 'append_thread' => false, ) ); } elseif ( isset( $_POST['message_thread_type'] ) && 'reply' === $_POST['message_thread_type'] && ! empty( $member_thread_id ) ) { $message = bp_groups_messages_new_message( array( 'thread_id' => $member_thread_id, 'subject' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'content' => ! empty( $_POST['content'] ) ? $_POST['content'] : ' ', 'date_sent' => $date_sent = bp_core_current_time(), 'mark_visible' => true, 'error_type' => 'wp_error', ) ); } } } if ( is_wp_error( $message ) ) { $response['feedback'] = $message->get_error_message(); wp_send_json_error( $response ); } elseif ( ! empty( $message ) ) { if ( 'all' !== $_POST['users'] ) { $response['feedback'] = __( 'Your message was sent privately to %%count%% members of this group.', 'buddyboss' ); } else { $response['feedback'] = __( 'Your message was sent privately to all members of this group.', 'buddyboss' ); } $response['redirect_link'] = '<a href="' . bp_loggedin_user_domain() . bp_get_messages_slug() . '"> ' . __( 'View message.', 'buddyboss' ) . '</a>'; $response['type'] = 'success'; wp_send_json_success( $response ); } } }
Changelog
Version | Description |
---|---|
BuddyBoss 1.2.9 | 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.