Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
01/09/2015 07:54:02 PM (11 years ago)
Author:
r-a-y
Message:

Messages: Support meta queries in bp_has_message_threads() stack.

Much like r6948, r6950, this commit adds support for meta queries, but for
the messages component.

This will allow plugin develoeprs to customize the fetching of message
threads based on data stored in the messagemeta table, using a
powerful syntax familiar from WP_Query.

Commit also adds unit tests for the 'meta_query' parameter in
bp_has_message_threads().

Fixes #6063.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-messages/bp-messages-classes.php

    r9332 r9335  
    360360            'limit'        => null,
    361361            'page'         => null,
    362             'search_terms' => ''
     362            'search_terms' => '',
     363            'meta_query'   => array()
    363364        );
    364365        $r = wp_parse_args( $args, $defaults );
    365366
    366367        $pag_sql = $type_sql = $search_sql = $user_id_sql = $sender_sql = '';
     368        $meta_query_sql = array(
     369            'join'  => '',
     370            'where' => ''
     371        );
    367372
    368373        if ( $r['limit'] && $r['page'] ) {
     
    391396        }
    392397
     398        // Process meta query into SQL
     399        $meta_query = self::get_meta_query_sql( $r['meta_query'] );
     400        if ( ! empty( $meta_query['join'] ) ) {
     401            $meta_query_sql['join'] = $meta_query['join'];
     402        }
     403        if ( ! empty( $meta_query['where'] ) ) {
     404            $meta_query_sql['where'] = $meta_query['where'];
     405        }
     406
    393407        // set up SQL array
    394408        $sql = array();
    395409        $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 ON m.thread_id = r.thread_id";
    397         $sql['where']  = "WHERE r.is_deleted = 0 {$user_id_sql} {$sender_sql} {$type_sql} {$search_sql}";
     410        $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']}";
     411        $sql['where']  = "WHERE r.is_deleted = 0 {$user_id_sql} {$sender_sql} {$type_sql} {$search_sql} {$meta_query_sql['where']}";
    398412        $sql['misc']   = "GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}";
    399413
     
    434448         */
    435449        return apply_filters( 'bp_messages_thread_current_threads', array( 'threads' => &$threads, 'total' => (int) $total_threads ) );
     450    }
     451
     452    /**
     453     * Get the SQL for the 'meta_query' param in BP_Messages_Thread::get_current_threads_for_user().
     454     *
     455     * We use WP_Meta_Query to do the heavy lifting of parsing the meta_query array
     456     * and creating the necessary SQL clauses.
     457     *
     458     * @since BuddyPress (2.2.0)
     459     *
     460     * @param array $meta_query An array of meta_query filters. See the
     461     *   documentation for WP_Meta_Query for details.
     462     * @return array $sql_array 'join' and 'where' clauses.
     463     */
     464    public static function get_meta_query_sql( $meta_query = array() ) {
     465        global $wpdb;
     466
     467        $sql_array = array(
     468            'join'  => '',
     469            'where' => '',
     470        );
     471
     472        if ( ! empty( $meta_query ) ) {
     473            $meta_query = new WP_Meta_Query( $meta_query );
     474
     475            // WP_Meta_Query expects the table name at
     476            // $wpdb->messagemeta
     477            $wpdb->messagemeta = buddypress()->messages->table_name_meta;
     478
     479            return $meta_query->get_sql( 'message', 'm', 'id' );
     480        }
     481
     482        return $sql_array;
    436483    }
    437484
Note: See TracChangeset for help on using the changeset viewer.