BP_Messages_Thread::get_current_threads_for_user( array $args = array() )
Get current message threads for a user.
Description
Parameters
- $args
-
(Optional) Array of arguments
Default value: array()
Return
(array|bool) Array on success. Boolean false on failure.
Source
File: bp-messages/classes/class-bp-messages-thread.php
public static function get_current_threads_for_user( $args = array() ) { global $wpdb; $bp = buddypress(); // Backward compatibility with old method of passing arguments. if ( ! is_array( $args ) || func_num_args() > 1 ) { _deprecated_argument( __METHOD__, '2.2.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddyboss' ), __METHOD__, __FILE__ ) ); $old_args_keys = array( 0 => 'user_id', 1 => 'box', 2 => 'type', 3 => 'limit', 4 => 'page', 5 => 'search_terms', ); $args = bp_core_parse_args_array( $old_args_keys, func_get_args() ); } $r = bp_parse_args( $args, array( 'user_id' => false, 'box' => 'inbox', 'type' => 'all', 'limit' => null, 'page' => null, 'search_terms' => '', 'include' => false, 'meta_query' => array() ) ); $pag_sql = $type_sql = $search_sql = $user_id_sql = $sender_sql = $having_sql = ''; $current_user_participants_ids = []; $meta_query_sql = array( 'join' => '', 'where' => '' ); if ( $r['limit'] && $r['page'] ) { $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $r['page'] - 1 ) * $r['limit'] ), intval( $r['limit'] ) ); } $r['user_id'] = (int) $r['user_id']; $where_sql = '1 = 1'; if ( ! empty( $r['include'] ) ) { $user_threads_query = $r['include']; } else { $user_threads_query = $wpdb->prepare( " SELECT DISTINCT(thread_id) FROM {$bp->messages->table_name_recipients} WHERE user_id = %d AND is_deleted = 0 ", $r['user_id'] ); } if ( ! empty( $r['search_terms'] ) ) { $search_terms_like = '%' . bp_esc_like( $r['search_terms'] ) . '%'; $where_sql = $wpdb->prepare( "m.message LIKE %s", $search_terms_like ); $current_user_participants = $wpdb->get_results( $q = $wpdb->prepare( " SELECT DISTINCT(r.user_id), u.display_name FROM {$bp->messages->table_name_recipients} r LEFT JOIN {$wpdb->users} u ON r.user_id = u.ID WHERE r.thread_id IN ($user_threads_query) AND ( u.display_name LIKE %s OR u.user_login LIKE %s OR u.user_nicename LIKE %s ) ", $search_terms_like, $search_terms_like, $search_terms_like ) ); $current_user_participants_ids = array_map( 'intval', wp_list_pluck( $current_user_participants, 'user_id' ) ); $current_user_participants_ids = array_diff( $current_user_participants_ids, [ bp_loggedin_user_id() ] ); if( $current_user_participants_ids ) { $user_ids = implode(',', array_unique($current_user_participants_ids)); $where_sql = $wpdb->prepare( " (m.message LIKE %s OR r.user_id IN ({$user_ids})) ", $search_terms_like ); } } $where_sql .= " AND r.thread_id IN ($user_threads_query)"; // Process meta query into SQL. $meta_query = self::get_meta_query_sql( $r['meta_query'] ); if ( ! empty( $meta_query['join'] ) ) { $meta_query_sql['join'] = $meta_query['join']; } if ( ! empty( $meta_query['where'] ) ) { $meta_query_sql['where'] = $meta_query['where']; } // Set up SQL array. $sql = array(); $sql['select'] = 'SELECT m.thread_id, MAX(m.date_sent) AS date_sent, GROUP_CONCAT(DISTINCT r.user_id ORDER BY r.user_id separator \',\' ) as recipient_list'; $sql['from'] = "FROM {$bp->messages->table_name_recipients} r INNER JOIN {$bp->messages->table_name_messages} m ON m.thread_id = r.thread_id {$meta_query_sql['join']}"; $sql['where'] = "WHERE {$where_sql} {$meta_query_sql['where']}"; $sql['misc'] = "GROUP BY m.thread_id {$having_sql} ORDER BY date_sent DESC {$pag_sql}"; // Get thread IDs. $thread_ids = $wpdb->get_results( $qq = implode( ' ', $sql ) ); // print_r($qq);die(); if ( empty( $thread_ids ) ) { return false; } // Adjust $sql to work for thread total. $sql['select'] = 'SELECT COUNT( DISTINCT m.thread_id )'; unset( $sql['misc'] ); $total_threads = $wpdb->get_var( implode( ' ', $sql ) ); // Sort threads by date_sent. foreach( (array) $thread_ids as $thread ) { $sorted_threads[ $thread->thread_id ] = strtotime( $thread->date_sent ); } arsort( $sorted_threads ); $threads = array(); foreach ( (array) $sorted_threads as $thread_id => $date_sent ) { $threads[] = new BP_Messages_Thread( $thread_id, 'ASC', array( 'update_meta_cache' => false ) ); } /** * Filters the results of the query for a user's message threads. * * @since BuddyPress 2.2.0 * * @param array $value { * @type array $threads Array of threads. Passed by reference. * @type int $total_threads Number of threads found by the query. * } */ return apply_filters( 'bp_messages_thread_current_threads', array( 'threads' => &$threads, 'total' => (int) $total_threads ) ); }
Changelog
Version | Description |
---|---|
BuddyPress 1.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.