Skip to:
Content

BuddyPress.org

Ticket #6063: 6063.sql-clauses.patch

File 6063.sql-clauses.patch, 3.1 KB (added by r-a-y, 10 years ago)
  • src/bp-messages/bp-messages-classes.php

    diff --git a/src/bp-messages/bp-messages-classes.php b/src/bp-messages/bp-messages-classes.php
    index 6b3bea6..22eb564 100644
    a b class BP_Messages_Thread { 
    380380                        $search_sql        = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like );
    381381                }
    382382
    383                 if ( 'sentbox' == $r['box'] ) {
    384                         $user_id_sql = $wpdb->prepare( 'm.sender_id = %d', $r['user_id'] );
    385                         $thread_ids  = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
    386                         $total_threads = $wpdb->get_var( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} " );
    387                 } else {
    388                         $user_id_sql = $wpdb->prepare( 'r.user_id = %d', $r['user_id'] );
    389                         $thread_ids = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
    390                         $total_threads = $wpdb->get_var( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql}" );
     383                if ( ! empty( $r['user_id'] ) ) {
     384                        if ( 'sentbox' == $r['box'] ) {
     385                                $user_id_sql  = 'AND ' . $wpdb->prepare( 'm.sender_id = %d', $r['user_id'] );
     386                                $user_id_sql .= ' AND m.sender_id = r.user_id';
     387                        } else {
     388                                $user_id_sql  = 'AND ' . $wpdb->prepare( 'r.user_id = %d', $r['user_id'] );
     389                                $user_id_sql .= ' AND r.sender_only = 0';
     390                        }
    391391                }
    392392
     393                // set up SQL array
     394                $sql = array();
     395                $sql['select'] = 'SELECT m.thread_id, MAX(m.date_sent) AS date_sent';
     396                $sql['from']   = "FROM {$bp->messages->table_name_recipients} r INNER JOIN {$bp->messages->table_name_messages} m";
     397                $sql['where']  = "WHERE m.thread_id = r.thread_id {$user_id_sql} AND r.is_deleted = 0 {$type_sql} {$search_sql}";
     398                $sql['misc']   = "GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}";
     399
     400                // get thread IDs
     401                $thread_ids = $wpdb->get_results( implode( ' ', $sql ) );
    393402                if ( empty( $thread_ids ) ) {
    394403                        return false;
    395404                }
    396405
     406                // adjust $sql to work for thread total
     407                $sql['select'] = 'SELECT COUNT( DISTINCT m.thread_id )';
     408                unset( $sql['misc'] );
     409                $total_threads = $wpdb->get_var( implode( ' ', $sql ) );
     410
    397411                // Sort threads by date_sent
    398412                foreach( (array) $thread_ids as $thread ) {
    399413                        $sorted_threads[$thread->thread_id] = strtotime( $thread->date_sent );