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. |