Skip to:
Content

BuddyPress.org

Changeset 13184


Ignore:
Timestamp:
12/12/2021 02:09:02 PM (2 years ago)
Author:
imath
Message:

Support date queries for Members, Groups and Sites

According to components, date queries can be restricted to a limited list of loop types:

  • For Members, the $type parameter in bp_has_members() needs to be either active, newest, random or online.
  • For Groups, the $type parameter in bp_has_groups() needs to be either active or newest.
  • For sites, the $type parameter in bp_has_blogs() needs to be either active or newest.

Props r-a-y

Fixes #8488

Location:
trunk
Files:
18 edited

Legend:

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

    r13150 r13184  
    10331033     * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
    10341034     * of parsing the date_query array and creating the necessary SQL clauses.
    1035      * However, since BP_Activity_Activity::get() builds its SQL differently than
    1036      * WP_Query, we have to alter the return value (stripping the leading AND
    1037      * keyword from the query).
    10381035     *
    10391036     * @since 2.1.0
     
    10441041     */
    10451042    public static function get_date_query_sql( $date_query = array() ) {
    1046         $sql = '';
    1047 
    1048         // Date query.
    1049         if ( ! empty( $date_query ) && is_array( $date_query ) ) {
    1050             $date_query = new BP_Date_Query( $date_query, 'date_recorded' );
    1051             $sql = preg_replace( '/^\sAND/', '', $date_query->get_sql() );
    1052         }
    1053 
    1054         return $sql;
     1043        return BP_Date_Query::get_where_sql( $date_query, 'a.date_recorded' );
    10551044    }
    10561045
  • trunk/src/bp-blogs/bp-blogs-functions.php

    r13147 r13184  
    2626/**
    2727 * Retrieve a set of blogs.
     28 *
     29 * @since 1.2.0
     30 * @since 2.0.0 Added $include_blog_ids, $update_meta_cache parameters
     31 * @since 10.0.0 Added $date_query parameter
    2832 *
    2933 * @see BP_Blogs_Blog::get() for a description of arguments and return value.
     
    3842 *     @type int         $per_page          Default: 20.
    3943 *     @type int         $page              Default: 1.
     44 *     @type array       $date_query        Default: false.
    4045 *     @type bool        $update_meta_cache Whether to pre-fetch blogmeta. Default: true.
    4146 * }
     
    5459            'per_page'          => 20,       // The number of results to return per page.
    5560            'page'              => 1,        // The page to return if limiting per page.
     61            'date_query'        => false,    // Filter blogs by date query.
    5662            'update_meta_cache' => true,     // Whether to pre-fetch blogmeta.
    5763        ),
     
    6066
    6167    // Get the blogs.
    62     $blogs = BP_Blogs_Blog::get(
    63         $r['type'],
    64         $r['per_page'],
    65         $r['page'],
    66         $r['user_id'],
    67         $r['search_terms'],
    68         $r['update_meta_cache'],
    69         $r['include_blog_ids']
    70     );
     68    $blogs = BP_Blogs_Blog::get( $r );
    7169
    7270    /**
     
    12611259 */
    12621260function bp_blogs_get_random_blogs( $limit = null, $page = null ) {
    1263     return BP_Blogs_Blog::get( 'random', $limit, $page );
     1261    return BP_Blogs_Blog::get(
     1262        array(
     1263            'type'  => 'random',
     1264            'limit' => $limit,
     1265            'page'  => $page
     1266        )
     1267    );
    12641268}
    12651269
  • trunk/src/bp-blogs/bp-blogs-template.php

    r13147 r13184  
    112112 * Based on the $args passed, bp_has_blogs() populates the $blogs_template
    113113 * global, enabling the use of BuddyPress templates and template functions to
    114  * display a list of activity items.
     114 * display a list of blogs.
     115 *
     116 * @since 1.0.0
     117 * @since 1.2.0 Added $type, $page, $search_terms parameters
     118 * @since 1.6.0 Added $page_arg parameter
     119 * @since 2.0.0 Added $include_blog_ids, $update_meta_cache parameters
     120 * @since 10.0.0 Added $date_query parameter
    115121 *
    116122 * @global BP_Blogs_Template $blogs_template {@link BP_Blogs_Template}
     
    122128 *     and because bp_has_blogs() determines some default arguments in a
    123129 *     dynamic fashion, we list all accepted arguments here as well.
    124  *
    125  *     Arguments can be passed as an associative array, or as a URL query
    126  *     string (eg, 'user_id=4&per_page=3').
    127130 *
    128131 *     @type int      $page             Which page of results to fetch. Using page=1 without
     
    141144 *                                      When viewing a user profile page, 'user_id' defaults to the
    142145 *                                      ID of the displayed user. Otherwise the default is false.
     146 *     @type array    $date_query       Filter results by site last activity date. See first parameter of
     147 *                                      {@link WP_Date_Query::__construct()} for syntax. Only applicable if
     148 *                                      $type is either 'newest' or 'active'.
    143149 * }
    144150 * @return bool Returns true when blogs are found, otherwise false.
     
    168174            'include_blog_ids'  => false,
    169175            'search_terms'      => $search_terms_default,
     176            'date_query'        => false,
    170177            'update_meta_cache' => true,
    171178        ),
     
    179186
    180187    // Get the blogs.
    181     $blogs_template = new BP_Blogs_Template( $r['type'], $r['page'], $r['per_page'], $r['max'], $r['user_id'], $r['search_terms'], $r['page_arg'], $r['update_meta_cache'], $r['include_blog_ids'] );
     188    $blogs_template = new BP_Blogs_Template( $r );
    182189
    183190    /**
  • trunk/src/bp-blogs/classes/class-bp-blogs-blog.php

    r12544 r13184  
    164164     * Retrieve a set of blog-user associations.
    165165     *
    166      * @param string      $type              The order in which results should be returned.
    167      *                                       'active', 'alphabetical', 'newest', or 'random'.
    168      * @param int|bool    $limit             Optional. The maximum records to return.
    169      *                                       Default: false.
    170      * @param int|bool    $page              Optional. The page of records to return.
    171      *                                       Default: false (unlimited results).
    172      * @param int         $user_id           Optional. ID of the user whose blogs are being
    173      *                                       retrieved. Default: 0.
    174      * @param string|bool $search_terms      Optional. Search by text stored in
    175      *                                       blogmeta (such as the blog name). Default: false.
    176      * @param bool        $update_meta_cache Whether to pre-fetch metadata for
    177      *                                       blogs. Default: true.
    178      * @param array|bool  $include_blog_ids  Array of blog IDs to include.
     166     * @since 1.2.0
     167     * @since 10.0.0 Converted to array as main function argument. Added $date_query parameter.
     168     *
     169     * @param array $data {
     170     *     Array of site data to query for.
     171     *     @type string      $type              The order in which results should be returned.
     172     *                                          'active', 'alphabetical', 'newest', or 'random'.
     173     *     @type int|bool    $limit             Optional. The maximum records to return.
     174     *                                          Default: false.
     175     *     @type int|bool    $page              Optional. The page of records to return.
     176     *                                          Default: false (unlimited results).
     177     *     @type int         $user_id           Optional. ID of the user whose blogs are being
     178     *                                          retrieved. Default: 0.
     179     *     @type string|bool $search_terms      Optional. Search by text stored in
     180     *                                          blogmeta (such as the blog name). Default: false.
     181     *     @type bool        $update_meta_cache Whether to pre-fetch metadata for
     182     *                                          blogs. Default: true.
     183     *     @type array|bool  $include_blog_ids  Optional. Array of blog IDs to include.
     184     *     @type array       $date_query        Optional. Filter results by site last activity date. See first
     185     *                                          paramter of {@link WP_Date_Query::__construct()} for syntax. Only
     186     *                                          applicable if $type is either 'newest' or 'active'.
     187     * }
    179188     * @return array Multidimensional results array, structured as follows:
    180189     *               'blogs' - Array of located blog objects
    181190     *               'total' - A count of the total blogs matching the filter params
    182191     */
    183     public static function get( $type, $limit = false, $page = false, $user_id = 0, $search_terms = false, $update_meta_cache = true, $include_blog_ids = false ) {
    184         global $wpdb;
    185 
    186         $bp = buddypress();
    187 
    188         if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
     192    public static function get( ...$args ) {
     193        global $wpdb;
     194
     195        $bp = buddypress();
     196
     197        // Backward compatibility with old method of passing arguments.
     198        if ( ! is_array( $args[0] ) || count( $args ) > 1 ) {
     199            _deprecated_argument( __METHOD__, '10.0.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__ ) );
     200
     201            $old_args_keys = [
     202                0  => 'type',
     203                1  => 'limit',
     204                2  => 'page',
     205                3  => 'user_id',
     206                4  => 'search_terms',
     207                5  => 'update_meta_cache',
     208                6  => 'include_blog_ids',
     209            ];
     210
     211            $args = bp_core_parse_args_array( $old_args_keys, $args );
     212        } else {
     213            $args = reset( $args );
     214        }
     215
     216        $r = wp_parse_args(
     217            $args,
     218            array(
     219                'type'              => 'active',
     220                'limit'             => false,
     221                'page'              => false,
     222                'user_id'           => 0,
     223                'search_terms'      => false,
     224                'update_meta_cache' => true,
     225                'include_blog_ids'  => false,
     226                'date_query'        => false,
     227            )
     228        );
     229
     230        if ( ! is_user_logged_in() || ( ! bp_current_user_can( 'bp_moderate' ) && ( $r['user_id'] != bp_loggedin_user_id() ) ) ) {
    189231            $hidden_sql = "AND wb.public = 1";
    190         else
     232        } else {
    191233            $hidden_sql = '';
    192 
    193         $pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ) : '';
    194 
    195         $user_sql = !empty( $user_id ) ? $wpdb->prepare( " AND b.user_id = %d", $user_id ) : '';
    196 
    197         switch ( $type ) {
     234        }
     235
     236        $pag_sql = ( $r['limit'] && $r['page'] ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $r['page'] - 1 ) * $r['limit']), intval( $r['limit'] ) ) : '';
     237
     238        $user_sql = ! empty( $r['user_id'] ) ? $wpdb->prepare( " AND b.user_id = %d", $r['user_id'] ) : '';
     239
     240        $date_query_sql = '';
     241
     242        switch ( $r['type'] ) {
    198243            case 'active': default:
    199                 $order_sql = "ORDER BY bm.meta_value DESC";
     244                $date_query_sql = BP_Date_Query::get_where_sql( $r['date_query'], 'bm.meta_value', true );
     245                $order_sql      = "ORDER BY bm.meta_value DESC";
    200246                break;
    201247            case 'alphabetical':
     
    203249                break;
    204250            case 'newest':
    205                 $order_sql = "ORDER BY wb.registered DESC";
     251                $date_query_sql = BP_Date_Query::get_where_sql( $r['date_query'], 'wb.registered', true );
     252                $order_sql      = "ORDER BY wb.registered DESC";
    206253                break;
    207254            case 'random':
     
    211258
    212259        $include_sql = '';
    213         $include_blog_ids = array_filter( wp_parse_id_list( $include_blog_ids ) );
     260        $include_blog_ids = array_filter( wp_parse_id_list( $r['include_blog_ids'] ) );
    214261        if ( ! empty( $include_blog_ids ) ) {
    215262            $blog_ids_sql = implode( ',', $include_blog_ids );
     
    217264        }
    218265
    219         if ( ! empty( $search_terms ) ) {
    220             $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
     266        if ( ! empty( $r['search_terms'] ) ) {
     267            $search_terms_like = '%' . bp_esc_like( $r['search_terms'] ) . '%';
    221268            $search_terms_sql  = $wpdb->prepare( 'AND (bm_name.meta_value LIKE %s OR bm_description.meta_value LIKE %s)', $search_terms_like, $search_terms_like );
    222269        } else {
     
    236283              wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql}
    237284              AND bm.meta_key = 'last_activity' AND bm_name.meta_key = 'name' AND bm_description.meta_key = 'description'
    238               {$search_terms_sql} {$user_sql} {$include_sql}
     285              {$search_terms_sql} {$user_sql} {$include_sql} {$date_query_sql}
    239286            GROUP BY b.blog_id {$order_sql} {$pag_sql}
    240287        " );
     
    245292              {$bp->blogs->table_name} b
    246293              LEFT JOIN {$wpdb->base_prefix}blogs wb ON (b.blog_id = wb.blog_id)
     294              LEFT JOIN {$bp->blogs->table_name_blogmeta} bm ON (b.blog_id = bm.blog_id)
    247295              LEFT JOIN {$bp->blogs->table_name_blogmeta} bm_name ON (b.blog_id = bm_name.blog_id)
    248296              LEFT JOIN {$bp->blogs->table_name_blogmeta} bm_description ON (b.blog_id = bm_description.blog_id)
    249297            WHERE
    250298              wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql}
    251               AND
    252               bm_name.meta_key = 'name' AND bm_description.meta_key = 'description'
    253               {$search_terms_sql} {$user_sql} {$include_sql}
     299              AND bm.meta_key = 'last_activity' AND bm_name.meta_key = 'name' AND bm_description.meta_key = 'description'
     300              {$search_terms_sql} {$user_sql} {$include_sql} {$date_query_sql}
    254301        " );
    255302
     
    259306        }
    260307
    261         $paged_blogs = BP_Blogs_Blog::get_blog_extras( $paged_blogs, $blog_ids, $type );
     308        $paged_blogs = BP_Blogs_Blog::get_blog_extras( $paged_blogs, $blog_ids, $r['type'] );
    262309
    263310        // Integer casting.
     
    267314        }
    268315
    269         if ( $update_meta_cache ) {
     316        if ( $r['update_meta_cache'] ) {
    270317            bp_blogs_update_meta_cache( $blog_ids );
    271318        }
  • trunk/src/bp-blogs/classes/class-bp-blogs-template.php

    r10517 r13184  
    8484     * Constructor method.
    8585     *
     86     * @since 1.2.0
     87     * @since 10.0.0 Converted to array as main function argument. Added $date_query parameter.
     88     *
    8689     * @see BP_Blogs_Blog::get() for a description of parameters.
    8790     *
    88      * @param string     $type              See {@link BP_Blogs_Blog::get()}.
    89      * @param string     $page              See {@link BP_Blogs_Blog::get()}.
    90      * @param string     $per_page          See {@link BP_Blogs_Blog::get()}.
    91      * @param string     $max               See {@link BP_Blogs_Blog::get()}.
    92      * @param string     $user_id           See {@link BP_Blogs_Blog::get()}.
    93      * @param string     $search_terms      See {@link BP_Blogs_Blog::get()}.
    94      * @param string     $page_arg          The string used as a query parameter in
    95      *                                      pagination links. Default: 'bpage'.
    96      * @param bool       $update_meta_cache Whether to pre-fetch metadata for
    97      *                                      queried blogs.
    98      * @param array|bool $include_blog_ids  Array of blog IDs to include.
    99      */
    100     public function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage', $update_meta_cache = true, $include_blog_ids = false ) {
    101 
    102         $this->pag_arg  = sanitize_key( $page_arg );
    103         $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $page     );
    104         $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $per_page );
     91     * @param array $args {
     92     *     Array of arguments. See {@link BP_Blogs_Blog::get()}.
     93     * }
     94     */
     95    public function __construct( ...$args ) {
     96        // Backward compatibility with old method of passing arguments.
     97        if ( ! is_array( $args[0] ) || count( $args ) > 1 ) {
     98            _deprecated_argument( __METHOD__, '10.0.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__ ) );
     99
     100            $old_args_keys = [
     101                0  => 'type',
     102                1  => 'page',
     103                2  => 'per_page',
     104                3  => 'max',
     105                4  => 'user_id',
     106                5  => 'search_terms',
     107                6  => 'page_arg',
     108                7  => 'update_meta_cache',
     109                8  => 'include_blog_ids',
     110            ];
     111
     112            $args = bp_core_parse_args_array( $old_args_keys, $args );
     113        } else {
     114            $args = reset( $args );
     115        }
     116
     117        $r = bp_parse_args(
     118            $args,
     119            array(
     120                'type'              => '',
     121                'page'              => false,
     122                'per_page'          => false,
     123                'max'               => false,
     124                'user_id'           => false,
     125                'search_terms'      => false,
     126                'page_arg'          => 'bpage',
     127                'update_meta_cache' => true,
     128                'include_blog_ids'  => false,
     129                'date_query'        => false,
     130            ),
     131            'blogs_template'
     132        );
     133
     134        $this->pag_arg  = sanitize_key( $r['page_arg'] );
     135        $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page'] );
     136        $this->pag_num  = bp_sanitize_pagination_arg( 'num', $r['per_page'] );
    105137
    106138        // Backwards compatibility support for blogs by first letter.
     
    111143        } else {
    112144            $this->blogs = bp_blogs_get_blogs( array(
    113                 'type'              => $type,
     145                'type'              => $r['type'],
    114146                'per_page'          => $this->pag_num,
    115147                'page'              => $this->pag_page,
    116                 'user_id'           => $user_id,
    117                 'search_terms'      => $search_terms,
    118                 'update_meta_cache' => $update_meta_cache,
    119                 'include_blog_ids'  => $include_blog_ids,
     148                'user_id'           => $r['user_id'],
     149                'search_terms'      => $r['search_terms'],
     150                'update_meta_cache' => $r['update_meta_cache'],
     151                'include_blog_ids'  => $r['include_blog_ids'],
     152                'date_query'        => $r['date_query']
    120153            ) );
    121154        }
    122155
    123156        // Set the total blog count.
    124         if ( empty( $max ) || ( $max >= (int) $this->blogs['total'] ) ) {
     157        if ( empty( $r['max'] ) || ( $r['max'] >= (int) $this->blogs['total'] ) ) {
    125158            $this->total_blog_count = (int) $this->blogs['total'];
    126159        } else {
     
    135168
    136169        // Set the current blog count.
    137         if ( empty( $max ) || ( $max >= (int) $blog_count ) ) {
     170        if ( empty( $r['max'] ) || ( $r['max'] >= (int) $blog_count ) ) {
    138171            $this->blog_count = (int) $blog_count;
    139172        } else {
  • trunk/src/bp-core/classes/class-bp-date-query.php

    r10417 r13184  
    3434
    3535    /**
     36     * Whether to prepend the 'AND' operator to the WHERE SQL clause.
     37     *
     38     * @since 10.0.0
     39     *
     40     * @var bool
     41     */
     42    public $prepend_and = false;
     43
     44    /**
    3645     * Constructor.
    3746     *
    38      * @param array  $date_query Date query arguments.
    39      * @param string $column     THe DB column to query against.
     47     * @since 2.1.0
     48     * @since 10.0.0 Added $prepend_and argument.
     49     *
     50     * @param array  $date_query  Date query arguments.
     51     * @param string $column      The DB column to query against.
     52     * @param bool   $prepend_and Whether to prepend the 'AND' operator to the WHERE SQL clause.
    4053     *
    4154     * @see WP_Date_Query::__construct()
    4255     */
    43     public function __construct( $date_query, $column = '' ) {
     56    public function __construct( $date_query, $column = '', $prepend_and = false ) {
    4457        if ( ! empty( $column ) ) {
    4558            $this->column = $column;
    4659            add_filter( 'date_query_valid_columns', array( $this, 'register_date_column' ) );
     60        }
     61
     62        if ( ! empty( $prepend_and ) ) {
     63            $this->prepend_and = true;
    4764        }
    4865
     
    6784        return $retval;
    6885    }
     86
     87    /**
     88     * Generate SQL clauses to be appended to a main query.
     89     *
     90     * Since BuddyPress builds its SQL queries differently than WP_Query, we have
     91     * to override the parent method to remove the leading 'AND' operator from the
     92     * WHERE clause.
     93     *
     94     * @since 10.0.0
     95     *
     96     * @return array {
     97     *     Array containing JOIN and WHERE SQL clauses to append to the main query.
     98     *
     99     *     @type string $join  SQL fragment to append to the main JOIN clause.
     100     *     @type string $where SQL fragment to append to the main WHERE clause.
     101     * }
     102     */
     103    protected function get_sql_clauses() {
     104        // If we want to have the leading 'AND' operator, just use parent method.
     105        if ( $this->prepend_and ) {
     106            return parent::get_sql_clauses();
     107        }
     108
     109        // If we're here, that means we do not want the leading 'AND' operator.
     110        return $this->get_sql_for_query( $this->queries );
     111    }
     112
     113    /**
     114     * Helper method to generate and fetch the WHERE SQL clause for a date query.
     115     *
     116     * See {@link BP_Date_Query::__construct()} for all argument documentation.
     117     *
     118     * @since 10.0.0
     119     *
     120     * @param  array  $date_query  Date query arguments.
     121     * @param  string $column      DB column to query against date.
     122     * @param  bool   $prepend_and Whether to prepend the 'AND' operator to the WHERE clause.
     123     * @return string
     124     */
     125    public static function get_where_sql( $date_query = array(), $column = '', $prepend_and = false ) {
     126        $sql = '';
     127
     128        // Generate and fetch the WHERE clause for a date query.
     129        if ( ! empty( $date_query ) && is_array( $date_query ) && ! empty( $column ) ) {
     130            $date_query = new self( $date_query, $column, $prepend_and );
     131            $sql = $date_query->get_sql();
     132        }
     133
     134        return $sql;
     135    }
    69136}
    70137endif;
  • trunk/src/bp-core/classes/class-bp-user-query.php

    r13108 r13184  
    1818 *
    1919 * @since 1.7.0
     20 * @since 10.0.0 Added $date_query parameter.
    2021 *
    2122 * @param array $query {
     
    5051 *     @type array             $xprofile_query      Filter results by xprofile data. Requires the xprofile component.
    5152 *                                                  See {@see BP_XProfile_Query} for details.
     53 *     @type array             $date_query          Filter results by member last activity date. See first parameter of
     54 *                                                  {@link WP_Date_Query::__construct()} for syntax. Only applicable if
     55 *                                                  $type is either 'active', 'random', 'newest', or 'online'.
    5256 *     @type bool              $populate_extras     True if you want to fetch extra metadata
    5357 *                                                  about returned users, such as total group and friend counts.
     
    173177                    'meta_value'          => false,
    174178                    'xprofile_query'      => false,
     179                    'date_query'          => false,
    175180                    'populate_extras'     => true,
    176181                    'count_total'         => 'count_query',
     
    283288                $sql['order']   = "DESC";
    284289
     290                // Date query.
     291                $date_query = BP_Date_Query::get_where_sql( $date_query, 'u.date_recorded' );
     292                if ( ! empty( $date_query ) ) {
     293                    $sql['where']['date_query'] = $date_query;
     294                }
     295
    285296                break;
    286297
     
    303314                    $sql['orderby'] = "ORDER BY u.date_recorded";
    304315                    $sql['order'] = "DESC";
     316                }
     317
     318                // Date query.
     319                $date_query = BP_Date_Query::get_where_sql( $date_query, 'u.date_recorded' );
     320                if ( ! empty( $date_query ) ) {
     321                    $sql['where']['date_query'] = $date_query;
    305322                }
    306323
  • trunk/src/bp-groups/bp-groups-functions.php

    r13108 r13184  
    914914 * @since 2.6.0 Added `$group_type`, `$group_type__in`, and `$group_type__not_in` parameters.
    915915 * @since 2.7.0 Added `$update_admin_cache` and `$parent_id` parameters.
     916 * @since 10.0.0 Added `$date_query` parameter.
    916917 *
    917918 * @param array|string $args {
     
    943944            'group_type__not_in' => '',             // Array or comma-separated list of group types that will be excluded from results.
    944945            'meta_query'         => false,          // Filter by groupmeta. See WP_Meta_Query for syntax.
     946            'date_query'         => false,          // Filter by group last activity date. See WP_Date_Query for syntax.
    945947            'show_hidden'        => false,          // Show hidden groups to non-admins.
    946948            'status'             => array(),        // Array or comma-separated list of group statuses to limit results to.
     
    967969        'group_type__not_in' => $r['group_type__not_in'],
    968970        'meta_query'         => $r['meta_query'],
     971        'date_query'         => $r['date_query'],
    969972        'show_hidden'        => $r['show_hidden'],
    970973        'status'             => $r['status'],
  • trunk/src/bp-groups/bp-groups-template.php

    r13108 r13184  
    363363 * @since 2.7.0 Added `$update_admin_cache` parameter.
    364364 * @since 7.0.0 Added `$status` parameter.
     365 * @since 10.0.0 Added `$date_query` parameter.
    365366 *
    366367 * @param array|string $args {
     
    392393 *     @type array        $meta_query         An array of meta_query conditions.
    393394 *                                            See {@link WP_Meta_Query::queries} for description.
     395 *     @type array        $date_query         Filter results by group last activity date. See first parameter of
     396 *                                            {@link WP_Date_Query::__construct()} for syntax. Only applicable if
     397 *                                            $type is either 'newest' or 'active'.
    394398 *     @type array|string $include            Array or comma-separated list of group IDs. Results will be limited
    395399 *                                            to groups within the list. Default: false.
     
    483487            'status'             => $status,
    484488            'meta_query'         => false,
     489            'date_query'         => false,
    485490            'include'            => false,
    486491            'exclude'            => false,
     
    510515        'status'             => $r['status'],
    511516        'meta_query'         => $r['meta_query'],
     517        'date_query'         => $r['date_query'],
    512518        'include'            => $r['include'],
    513519        'exclude'            => $r['exclude'],
  • trunk/src/bp-groups/classes/class-bp-groups-group.php

    r13129 r13184  
    10201020     * @since 2.8.0 Changed `$search_terms` parameter handling and added `$search_columns` parameter.
    10211021     * @since 2.9.0 Added `$slug` parameter.
     1022     * @since 10.0.0 Added `$date_query` parameter.
    10221023     *
    10231024     * @param array $args {
     
    10541055     *     @type array        $meta_query         Optional. An array of meta_query conditions.
    10551056     *                                            See {@link WP_Meta_Query::queries} for description.
     1057     *     @type array        $date_query         Optional. Filter results by group last activity date. See first
     1058     *                                            paramter of {@link WP_Date_Query::__construct()} for syntax. Only
     1059     *                                            applicable if $type is either 'newest' or 'active'.
    10561060     *     @type array|string $value              Optional. Array or comma-separated list of group IDs. Results
    10571061     *                                            will be limited to groups within the list. Default: false.
     
    11261130            'group_type__not_in' => '',
    11271131            'meta_query'         => false,
     1132            'date_query'         => false,
    11281133            'include'            => false,
    11291134            'parent_id'          => null,
     
    13141319        }
    13151320
     1321        // Process date query for 'date_created' and 'last_activity' sort.
     1322        if ( 'date_created' === $orderby || 'last_activity' === $orderby ) {
     1323            $date_query_sql = BP_Date_Query::get_where_sql( $r['date_query'], self::convert_orderby_to_order_by_term( $orderby ) );
     1324
     1325            if ( ! empty( $date_query_sql ) ) {
     1326                $where_conditions['date'] = $date_query_sql;
     1327            }
     1328        }
     1329
    13161330        // Sanitize 'order'.
    13171331        $order = bp_esc_sql_order( $order );
     
    14391453
    14401454    /**
    1441      * Get the SQL for the 'meta_query' param in BP_Activity_Activity::get()
     1455     * Get the SQL for the 'meta_query' param in BP_Groups_Group::get()
    14421456     *
    14431457     * We use WP_Meta_Query to do the heavy lifting of parsing the
  • trunk/src/bp-groups/classes/class-bp-groups-template.php

    r13108 r13184  
    128128     * }
    129129     */
    130     function __construct( $args = array() ){
    131         $function_args = func_get_args();
    132 
     130    function __construct( ...$args ){
    133131        // Backward compatibility with old method of passing arguments.
    134         if ( ! is_array( $args ) || count( $function_args ) > 1 ) {
     132        if ( ! is_array( $args[0] ) || count( $args ) > 1 ) {
    135133            _deprecated_argument( __METHOD__, '1.7', 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__ ) );
    136134
     
    150148            );
    151149
    152             $args = bp_core_parse_args_array( $old_args_keys, $function_args );
     150            $args = bp_core_parse_args_array( $old_args_keys, $args );
     151        } else {
     152            $args = reset( $args );
    153153        }
    154154
     
    174174            'status'             => array(),
    175175            'meta_query'         => false,
     176            'date_query'         => false,
    176177            'update_meta_cache'  => true,
    177178            'update_admin_cache' => false,
     
    218219
    219220        } else {
    220             $this->groups = groups_get_groups( array(
    221                 'type'               => $type,
    222                 'order'              => $order,
    223                 'orderby'            => $orderby,
    224                 'per_page'           => $this->pag_num,
    225                 'page'               => $this->pag_page,
    226                 'user_id'            => $user_id,
    227                 'search_terms'       => $search_terms,
    228                 'search_columns'     => $search_columns,
    229                 'meta_query'         => $meta_query,
    230                 'group_type'         => $group_type,
    231                 'group_type__in'     => $group_type__in,
    232                 'group_type__not_in' => $group_type__not_in,
    233                 'status'             => $status,
    234                 'include'            => $include,
    235                 'exclude'            => $exclude,
    236                 'parent_id'          => $parent_id,
    237                 'update_meta_cache'  => $update_meta_cache,
    238                 'update_admin_cache' => $update_admin_cache,
    239                 'show_hidden'        => $show_hidden,
    240             ) );
     221            $this->groups = groups_get_groups(
     222                    array(
     223                    'type'               => $type,
     224                    'order'              => $order,
     225                    'orderby'            => $orderby,
     226                    'per_page'           => $this->pag_num,
     227                    'page'               => $this->pag_page,
     228                    'user_id'            => $user_id,
     229                    'search_terms'       => $search_terms,
     230                    'search_columns'     => $search_columns,
     231                    'meta_query'         => $meta_query,
     232                    'date_query'         => $date_query,
     233                    'group_type'         => $group_type,
     234                    'group_type__in'     => $group_type__in,
     235                    'group_type__not_in' => $group_type__not_in,
     236                    'status'             => $status,
     237                    'include'            => $include,
     238                    'exclude'            => $exclude,
     239                    'parent_id'          => $parent_id,
     240                    'update_meta_cache'  => $update_meta_cache,
     241                    'update_admin_cache' => $update_admin_cache,
     242                    'show_hidden'        => $show_hidden,
     243                )
     244            );
    241245        }
    242246
  • trunk/src/bp-members/bp-members-template.php

    r13166 r13184  
    310310 * @since 1.2.0
    311311 * @since 7.0.0 Added `xprofile_query` parameter. Added `user_ids` parameter.
     312 * @since 10.0.0 Added `date_query` parameter.
    312313 *
    313314 * @global BP_Core_Members_Template $members_template
     
    357358 *     @type array                 $xprofile_query      Filter results by xprofile data. Requires the xprofile
    358359 *                                                      component. See {@see BP_XProfile_Query} for details.
     360 *     @type array                 $date_query          Filter results by member last activity date. See first parameter of
     361 *                                                      {@link WP_Date_Query::__construct()} for syntax. Only applicable if
     362 *                                                      $type is either 'active', 'random', 'newest', or 'online'.
    359363 *     @type bool                  $populate_extras     Whether to fetch optional data, such as friend counts.
    360364 *                                                      Default: true.
     
    414418
    415419            'xprofile_query'      => false,
     420            'date_query'          => false,    // Filter members by last activity.
    416421            'populate_extras'     => true,     // Fetch usermeta? Friend count, last active etc.
    417422        ),
  • trunk/src/bp-members/classes/class-bp-core-members-template.php

    r13108 r13184  
    112112     * @since 1.5.0
    113113     * @since 7.0.0 Added `$xprofile_query` parameter. Added `$user_ids` parameter.
     114     * @since 10.0.0 Added `$date_query` parameter.
    114115     *
    115116     * @see BP_User_Query for an in-depth description of parameters.
     
    173174            'member_type__not_in' => '',
    174175            'xprofile_query'      => false,
     176            'date_query'          => false,
    175177        );
    176178
     
    205207                    'member_type__not_in' => $r['member_type__not_in'],
    206208                    'xprofile_query'      => $r['xprofile_query'],
     209                    'date_query'          => $r['date_query'],
    207210                )
    208211            );
  • trunk/src/bp-notifications/classes/class-bp-notifications-notification.php

    r13147 r13184  
    849849     * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
    850850     * of parsing the date_query array and creating the necessary SQL clauses.
    851      * However, since BP_Notifications_Notification::get() builds its SQL
    852      * differently than WP_Query, we have to alter the return value (stripping
    853      * the leading AND keyword from the query).
    854851     *
    855852     * @since 2.3.0
     
    860857     */
    861858    public static function get_date_query_sql( $date_query = array() ) {
    862 
    863         // Bail if not a proper date query format.
    864         if ( empty( $date_query ) || ! is_array( $date_query ) ) {
    865             return '';
    866         }
    867 
    868         // Date query.
    869         $date_query = new BP_Date_Query( $date_query, 'date_notified' );
    870 
    871         // Strip the leading AND - it's handled in get().
    872         return preg_replace( '/^\sAND/', '', $date_query->get_sql() );
     859        return BP_Date_Query::get_where_sql( $date_query, 'n.date_notified' );
    873860    }
    874861
  • trunk/tests/phpunit/testcases/blogs/class-bp-blogs-blog.php

    r12606 r13184  
    2424        update_blog_option( $b, 'blog_public', '1' );
    2525
    26         $blogs = BP_Blogs_Blog::get( 'active', false, false, 0, 'Foo' );
     26        $blogs = BP_Blogs_Blog::get( [
     27            'type'         => 'active',
     28            'search_terms' => 'Foo'
     29        ] );
    2730        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    2831
     
    5356        update_blog_option( $b, 'blog_public', '1' );
    5457
    55         $blogs = BP_Blogs_Blog::get( 'active', false, false, 0, 'Full' );
     58        $blogs = BP_Blogs_Blog::get( [
     59            'type'         => 'active',
     60            'search_terms' => 'Full'
     61        ] );
    5662        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    5763
     
    150156
    151157        /* Alphabetical */
    152         $blogs = BP_Blogs_Blog::get( 'alphabetical', false, false, $u );
     158        $blogs = BP_Blogs_Blog::get( [ 'type' => 'alphabetical', 'user_id' => $u ] );
    153159        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    154160        $this->assertEquals( array( $bs['barfoo'], $bs['foobar'] ), $blog_ids );
     
    156162        /* Newest */
    157163        update_blog_details( $bs['barfoo'], array( 'registered' => $b_time ) );
    158         $blogs = BP_Blogs_Blog::get( 'newest', false, false, $u );
     164        $blogs = BP_Blogs_Blog::get( [ 'type' => 'newest', 'user_id' => $u ] );
    159165        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    160166        $this->assertEquals( array( $bs['foobar'], $bs['barfoo'] ), $blog_ids );
     
    162168        /* Active */
    163169        bp_blogs_update_blogmeta( $bs['barfoo'], 'last_activity', $b_time );
    164         $blogs = BP_Blogs_Blog::get( 'active', false, false, $u );
     170        $blogs = BP_Blogs_Blog::get( [ 'type' => 'active', 'user_id' => $u ] );
    165171        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    166172        $this->assertEquals( array( $bs['foobar'],$bs['barfoo'] ), $blog_ids );
    167173
    168174        /* Random */
    169         $blogs = BP_Blogs_Blog::get( 'random', false, false, $u );
     175        $blogs = BP_Blogs_Blog::get( [ 'type' => 'random', 'user_id' => $u ] );
    170176        $this->assertTrue( 2 == count( $blogs['blogs'] ) );
    171177
    172178        $this->set_current_user( $old_user );
    173179    }
     180
     181    /**
     182     * @group date_query
     183     */
     184    public function test_get_with_date_query_before() {
     185        if ( ! is_multisite() ) {
     186            $this->markTestSkipped();
     187        }
     188
     189        $old_user = get_current_user_id();
     190        $u = self::factory()->user->create();
     191        $this->set_current_user( $u );
     192
     193        $r = [
     194            'user_id' => $u
     195        ];
     196
     197        $b1 = self::factory()->blog->create( $r );
     198        $b2 = self::factory()->blog->create( $r );
     199        $b3 = self::factory()->blog->create( $r );
     200
     201        bp_blogs_record_existing_blogs();
     202
     203        // Set last activity for each site.
     204        bp_blogs_update_blogmeta( $b1, 'last_activity', date( 'Y-m-d H:i:s', time() ) );
     205        bp_blogs_update_blogmeta( $b2, 'last_activity', '2008-03-25 17:13:55' );
     206        bp_blogs_update_blogmeta( $b3, 'last_activity', '2010-01-01 12:00' );
     207
     208        // 'date_query' before test
     209        $sites = BP_Blogs_Blog::get( array(
     210            'date_query' => array( array(
     211                'before' => array(
     212                    'year'  => 2010,
     213                    'month' => 1,
     214                    'day'   => 1,
     215                ),
     216            ) )
     217        ) );
     218
     219        $this->assertEquals( [ $b2 ], wp_list_pluck( $sites['blogs'], 'blog_id' ) );
     220    }
     221
     222    /**
     223     * @group date_query
     224     */
     225    public function test_get_with_date_query_range() {
     226        if ( ! is_multisite() ) {
     227            $this->markTestSkipped();
     228        }
     229
     230        $old_user = get_current_user_id();
     231        $u = self::factory()->user->create();
     232        $this->set_current_user( $u );
     233
     234        $r = [
     235            'user_id' => $u
     236        ];
     237
     238        $b1 = self::factory()->blog->create( $r );
     239        $b2 = self::factory()->blog->create( $r );
     240        $b3 = self::factory()->blog->create( $r );
     241
     242        bp_blogs_record_existing_blogs();
     243
     244        // Set last activity for each site.
     245        bp_blogs_update_blogmeta( $b1, 'last_activity', date( 'Y-m-d H:i:s', time() ) );
     246        bp_blogs_update_blogmeta( $b2, 'last_activity', '2008-03-25 17:13:55' );
     247        bp_blogs_update_blogmeta( $b3, 'last_activity', '2001-01-01 12:00' );
     248
     249        // 'date_query' range test
     250        $sites = BP_Blogs_Blog::get( array(
     251            'date_query' => array( array(
     252                'after'  => 'January 2nd, 2001',
     253                'before' => array(
     254                    'year'  => 2010,
     255                    'month' => 1,
     256                    'day'   => 1,
     257                ),
     258                'inclusive' => true,
     259            ) )
     260        ) );
     261
     262        $this->assertEquals( [ $b2 ], wp_list_pluck( $sites['blogs'], 'blog_id' ) );
     263    }
     264
     265    /**
     266     * @group date_query
     267     */
     268    public function test_get_with_date_query_after() {
     269        if ( ! is_multisite() ) {
     270            $this->markTestSkipped();
     271        }
     272
     273        $old_user = get_current_user_id();
     274        $u = self::factory()->user->create();
     275        $this->set_current_user( $u );
     276
     277        $r = [
     278            'user_id' => $u
     279        ];
     280
     281        $b1 = self::factory()->blog->create( $r );
     282        $b2 = self::factory()->blog->create( $r );
     283        $b3 = self::factory()->blog->create( $r );
     284
     285        bp_blogs_record_existing_blogs();
     286
     287        // Set last activity for each site.
     288        bp_blogs_update_blogmeta( $b1, 'last_activity', date( 'Y-m-d H:i:s', time() ) );
     289        bp_blogs_update_blogmeta( $b2, 'last_activity', '2008-03-25 17:13:55' );
     290        bp_blogs_update_blogmeta( $b3, 'last_activity', '2001-01-01 12:00' );
     291
     292        /*
     293         * Set initial site's last activity to two days ago so our expected site
     294         * is the only match.
     295         */
     296        bp_blogs_update_blogmeta( 1, 'last_activity', date( 'Y-m-d H:i:s', strtotime( '-2 days' ) ) );
     297
     298        // 'date_query' after and relative test
     299        $sites = BP_Blogs_Blog::get( array(
     300            'date_query' => array( array(
     301                'after' => '1 day ago'
     302            ) )
     303        ) );
     304
     305        $this->assertEquals( [ $b1 ], wp_list_pluck( $sites['blogs'], 'blog_id' ) );
     306    }
    174307}
  • trunk/tests/phpunit/testcases/blogs/template.php

    r12791 r13184  
    228228        );
    229229
    230         $at = new BP_Blogs_Template(
    231             $r['type'],
    232             $r['page'],
    233             $r['per_page'],
    234             $r['max'],
    235             $r['user_id'],
    236             $r['search_terms'],
    237             $r['page_arg'],
    238             $r['update_meta_cache'],
    239             $r['include_blog_ids']
    240         );
     230        $at = new BP_Blogs_Template( $r );
    241231
    242232        $this->assertEquals( 5, $at->pag_page );
     
    269259        );
    270260
    271         $at = new BP_Blogs_Template(
    272             $r['type'],
    273             $r['page'],
    274             $r['per_page'],
    275             $r['max'],
    276             $r['user_id'],
    277             $r['search_terms'],
    278             $r['page_arg'],
    279             $r['update_meta_cache'],
    280             $r['include_blog_ids']
    281         );
     261        $at = new BP_Blogs_Template( $r );
    282262
    283263        $this->assertEquals( 8, $at->pag_page );
     
    310290        );
    311291
    312         $at = new BP_Blogs_Template(
    313             $r['type'],
    314             $r['page'],
    315             $r['per_page'],
    316             $r['max'],
    317             $r['user_id'],
    318             $r['search_terms'],
    319             $r['page_arg'],
    320             $r['update_meta_cache'],
    321             $r['include_blog_ids']
    322         );
     292        $at = new BP_Blogs_Template( $r );
    323293
    324294        $this->assertEquals( 14, $at->pag_num );
     
    351321        );
    352322
    353         $at = new BP_Blogs_Template(
    354             $r['type'],
    355             $r['page'],
    356             $r['per_page'],
    357             $r['max'],
    358             $r['user_id'],
    359             $r['search_terms'],
    360             $r['page_arg'],
    361             $r['update_meta_cache'],
    362             $r['include_blog_ids']
    363         );
     323        $at = new BP_Blogs_Template( $r );
    364324
    365325        $this->assertEquals( 13, $at->pag_num );
  • trunk/tests/phpunit/testcases/core/class-bp-user-query.php

    r12450 r13184  
    780780        $this->assertSame( '', wp_cache_get( $users[3], 'bp_member_member_type' ) );
    781781    }
     782
     783    /**
     784     * @group date_query
     785     */
     786    public function test_date_query_before() {
     787        $u1 = self::factory()->user->create( array(
     788            'last_activity' => date( 'Y-m-d H:i:s', time() ),
     789        ) );
     790        $u2 = self::factory()->user->create( array(
     791            'last_activity' => '2008-03-25 17:13:55',
     792        ) );
     793        $u3 = self::factory()->user->create( array(
     794            'last_activity' => '2010-01-01 12:00',
     795        ) );
     796
     797        // 'date_query' before test
     798        $query = new BP_User_Query( array(
     799            'date_query' => array( array(
     800                'before' => array(
     801                    'year'  => 2010,
     802                    'month' => 1,
     803                    'day'   => 1,
     804                ),
     805            ) )
     806        ) );
     807
     808        $this->assertEquals( $u2, $query->user_ids[0] );
     809    }
     810
     811    /**
     812     * @group date_query
     813     */
     814    public function test_date_query_range() {
     815        $u1 = self::factory()->user->create( array(
     816            'last_activity' => date( 'Y-m-d H:i:s', time() ),
     817        ) );
     818        $u2 = self::factory()->user->create( array(
     819            'last_activity' => '2008-03-25 17:13:55',
     820        ) );
     821        $u3 = self::factory()->user->create( array(
     822            'last_activity' => '2001-01-01 12:00',
     823        ) );
     824
     825        // 'date_query' range test
     826        $query = new BP_User_Query( array(
     827            'date_query' => array( array(
     828                'after'  => 'January 2nd, 2001',
     829                'before' => array(
     830                    'year'  => 2010,
     831                    'month' => 1,
     832                    'day'   => 1,
     833                ),
     834                'inclusive' => true,
     835            ) )
     836        ) );
     837
     838        $this->assertEquals( $u2, $query->user_ids[0] );
     839    }
     840
     841    /**
     842     * @group date_query
     843     */
     844    public function test_date_query_after() {
     845        $u1 = self::factory()->user->create( array(
     846            'last_activity' => date( 'Y-m-d H:i:s', time() ),
     847        ) );
     848        $u2 = self::factory()->user->create( array(
     849            'last_activity' => '2008-03-25 17:13:55',
     850        ) );
     851        $u3 = self::factory()->user->create( array(
     852            'last_activity' => '2001-01-01 12:00',
     853        ) );
     854
     855        // 'date_query' after and relative test
     856        $query = new BP_User_Query( array(
     857            'date_query' => array( array(
     858                'after' => '1 day ago'
     859            ) )
     860        ) );
     861
     862        $this->assertEquals( $u1, $query->user_ids[0] );
     863    }
     864
    782865}
  • trunk/tests/phpunit/testcases/groups/class-bp-groups-group.php

    r13086 r13184  
    292292    /**
    293293     * @group get
     294     * @group date_query
     295     */
     296    public function test_get_with_date_query_before() {
     297        $u1 = self::factory()->group->create( array(
     298            'last_activity' => date( 'Y-m-d H:i:s', time() ),
     299        ) );
     300        $u2 = self::factory()->group->create( array(
     301            'last_activity' => '2008-03-25 17:13:55',
     302        ) );
     303        $u3 = self::factory()->group->create( array(
     304            'last_activity' => '2010-01-01 12:00',
     305        ) );
     306
     307        // 'date_query' before test
     308        $groups = BP_Groups_Group::get( array(
     309            'type' => 'active',
     310            'date_query' => array( array(
     311                'before' => array(
     312                    'year'  => 2010,
     313                    'month' => 1,
     314                    'day'   => 1,
     315                ),
     316            ) )
     317        ) );
     318
     319        $this->assertEquals( [ $u2 ], wp_list_pluck( $groups['groups'], 'id' ) );
     320    }
     321
     322    /**
     323     * @group get
     324     * @group date_query
     325     */
     326    public function test_get_with_date_query_range() {
     327        $u1 = self::factory()->group->create( array(
     328            'last_activity' => date( 'Y-m-d H:i:s', time() ),
     329        ) );
     330        $u2 = self::factory()->group->create( array(
     331            'last_activity' => '2008-03-25 17:13:55',
     332        ) );
     333        $u3 = self::factory()->group->create( array(
     334            'last_activity' => '2001-01-01 12:00',
     335        ) );
     336
     337        // 'date_query' range test
     338        $groups = BP_Groups_Group::get( array(
     339            'type' => 'active',
     340            'date_query' => array( array(
     341                'after'  => 'January 2nd, 2001',
     342                'before' => array(
     343                    'year'  => 2010,
     344                    'month' => 1,
     345                    'day'   => 1,
     346                ),
     347                'inclusive' => true,
     348            ) )
     349        ) );
     350
     351        $this->assertEquals( [ $u2 ], wp_list_pluck( $groups['groups'], 'id' ) );
     352    }
     353
     354    /**
     355     * @group get
     356     * @group date_query
     357     */
     358    public function test_get_with_date_query_after() {
     359        $u1 = self::factory()->group->create( array(
     360            'last_activity' => date( 'Y-m-d H:i:s', time() ),
     361        ) );
     362        $u2 = self::factory()->group->create( array(
     363            'last_activity' => '2008-03-25 17:13:55',
     364        ) );
     365        $u3 = self::factory()->group->create( array(
     366            'last_activity' => '2001-01-01 12:00',
     367        ) );
     368
     369        // 'date_query' after and relative test
     370        $groups = BP_Groups_Group::get( array(
     371            'type' => 'active',
     372            'date_query' => array( array(
     373                'after' => '1 day ago'
     374            ) )
     375        ) );
     376
     377        $this->assertEquals( [ $u1 ], wp_list_pluck( $groups['groups'], 'id' ) );
     378    }
     379
     380    /**
     381     * @group get
    294382     */
    295383    public function test_get_normal_search() {
Note: See TracChangeset for help on using the changeset viewer.