BP_Messages_Thread::get_current_threads_for_user( array $args = array() )
Get current message threads for a user.
Description Description
Parameters Parameters
- $args
-
(Optional) Array of arguments.
- 'user_id'
(int) The user ID. - 'box'
(string) The type of mailbox to get. Either 'inbox' or 'sentbox'. Defaults to 'inbox'. - 'type'
(string) The type of messages to get. Either 'all' or 'unread' or 'read'. Defaults to 'all'. - 'limit'
(int) The number of messages to get. Defaults to null. - 'page'
(int) The page number to get. Defaults to null. - 'search_terms'
(string) The search term to use. Defaults to ''. - 'meta_query'
(array) Meta query arguments. See WP_Meta_Query for more details.
Default value: array()
- 'user_id'
Return Return
(array|bool) Array on success. Boolean false on failure.
Source Source
File: bp-messages/classes/class-bp-messages-thread.php
public static function get_current_threads_for_user( $args = array() ) { global $wpdb; $function_args = func_get_args(); // Backward compatibility with old method of passing arguments. if ( ! is_array( $args ) || count( $function_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.', 'buddypress' ), __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, $function_args ); } $r = bp_parse_args( $args, array( 'user_id' => false, 'box' => 'inbox', 'type' => 'all', 'limit' => null, 'page' => null, 'search_terms' => '', 'meta_query' => array() ) ); $pag_sql = $type_sql = $search_sql = $user_id_sql = $sender_sql = ''; $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'] ) ); } if ( $r['type'] == 'unread' ) { $type_sql = " AND r.unread_count != 0 "; } elseif ( $r['type'] == 'read' ) { $type_sql = " AND r.unread_count = 0 "; } if ( ! empty( $r['search_terms'] ) ) { $search_terms_like = '%' . bp_esc_like( $r['search_terms'] ) . '%'; $search_sql = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like ); } $r['user_id'] = (int) $r['user_id']; // Default deleted SQL. $deleted_sql = 'r.is_deleted = 0'; switch ( $r['box'] ) { case 'sentbox' : $user_id_sql = 'AND ' . $wpdb->prepare( 'm.sender_id = %d', $r['user_id'] ); $sender_sql = 'AND m.sender_id = r.user_id'; break; case 'inbox' : $user_id_sql = 'AND ' . $wpdb->prepare( 'r.user_id = %d', $r['user_id'] ); $sender_sql = 'AND r.sender_only = 0'; break; default : // Omit user-deleted threads from all other custom message boxes. $deleted_sql = $wpdb->prepare( '( r.user_id = %d AND r.is_deleted = 0 )', $r['user_id'] ); break; } // 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']; } $bp = buddypress(); // Set up SQL array. $sql = array(); $sql['select'] = 'SELECT m.thread_id, MAX(m.date_sent) AS date_sent'; $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 {$deleted_sql} {$user_id_sql} {$sender_sql} {$type_sql} {$search_sql} {$meta_query_sql['where']}"; $sql['misc'] = "GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}"; // Get thread IDs. $thread_ids = $wpdb->get_results( implode( ' ', $sql ) ); 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 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 Changelog
Version | Description |
---|---|
1.0.0 | Introduced. |