Skip to:
Content

BuddyPress.org

Ticket #8488: 8488.02.patch

File 8488.02.patch, 56.6 KB (added by imath, 4 months ago)
  • src/bp-activity/classes/class-bp-activity-activity.php

    diff --git src/bp-activity/classes/class-bp-activity-activity.php src/bp-activity/classes/class-bp-activity-activity.php
    index 6370f72d8..cc593b394 100644
    class BP_Activity_Activity { 
    10101010         *
    10111011         * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
    10121012         * of parsing the date_query array and creating the necessary SQL clauses.
    1013          * However, since BP_Activity_Activity::get() builds its SQL differently than
    1014          * WP_Query, we have to alter the return value (stripping the leading AND
    1015          * keyword from the query).
    10161013         *
    10171014         * @since 2.1.0
    10181015         *
    class BP_Activity_Activity { 
    10211018         * @return string
    10221019         */
    10231020        public static function get_date_query_sql( $date_query = array() ) {
    1024                 $sql = '';
    1025 
    1026                 // Date query.
    1027                 if ( ! empty( $date_query ) && is_array( $date_query ) ) {
    1028                         $date_query = new BP_Date_Query( $date_query, 'date_recorded' );
    1029                         $sql = preg_replace( '/^\sAND/', '', $date_query->get_sql() );
    1030                 }
    1031 
    1032                 return $sql;
     1021                return BP_Date_Query::get_where_sql( $date_query, 'a.date_recorded' );
    10331022        }
    10341023
    10351024        /**
  • src/bp-blogs/bp-blogs-functions.php

    diff --git src/bp-blogs/bp-blogs-functions.php src/bp-blogs/bp-blogs-functions.php
    index b27de8ac1..1ae3834e1 100644
    function bp_blogs_has_directory() { 
    2626/**
    2727 * Retrieve a set of blogs.
    2828 *
     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
     32 *
    2933 * @see BP_Blogs_Blog::get() for a description of arguments and return value.
    3034 *
    3135 * @param array|string $args {
    function bp_blogs_has_directory() { 
    3741 *     @type string|bool $search_terms      Default: false.
    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 * }
    4247 * @return array See {@link BP_Blogs_Blog::get()}.
    function bp_blogs_has_directory() { 
    4449function bp_blogs_get_blogs( $args = '' ) {
    4550
    4651        // Parse query arguments.
    47         $r = bp_parse_args( $args, array(
    48                 'type'              => 'active', // 'active', 'alphabetical', 'newest', or 'random'.
    49                 'include_blog_ids'  => false,    // Array of blog IDs to include.
    50                 'user_id'           => false,    // Limit to blogs this user can post to.
    51                 'search_terms'      => false,    // Limit to blogs matching these search terms.
    52                 'per_page'          => 20,       // The number of results to return per page.
    53                 'page'              => 1,        // The page to return if limiting per page.
    54                 'update_meta_cache' => true      // Whether to pre-fetch blogmeta.
    55         ), 'blogs_get_blogs' );
    56 
    57         // Get the blogs.
    58         $blogs = BP_Blogs_Blog::get(
    59                 $r['type'],
    60                 $r['per_page'],
    61                 $r['page'],
    62                 $r['user_id'],
    63                 $r['search_terms'],
    64                 $r['update_meta_cache'],
    65                 $r['include_blog_ids']
     52        $r = bp_parse_args(
     53                $args,
     54                array(
     55                        'type'              => 'active', // 'active', 'alphabetical', 'newest', or 'random'.
     56                        'include_blog_ids'  => false,    // Array of blog IDs to include.
     57                        'user_id'           => false,    // Limit to blogs this user can post to.
     58                        'search_terms'      => false,    // Limit to blogs matching these search terms.
     59                        'per_page'          => 20,       // The number of results to return per page.
     60                        'page'              => 1,        // The page to return if limiting per page.
     61                        'date_query'        => false,    // Filter blogs by date query.
     62                        'update_meta_cache' => true      // Whether to pre-fetch blogmeta.
     63                ),
     64                'blogs_get_blogs'
    6665        );
    6766
    6867        /**
    function bp_blogs_get_blogs( $args = '' ) { 
    7372         * @param array $blogs Array of blog data.
    7473         * @param array $r     Parsed query arguments.
    7574         */
    76         return apply_filters( 'bp_blogs_get_blogs', $blogs, $r );
     75        return apply_filters( 'bp_blogs_get_blogs', BP_Blogs_Blog::get( $r ), $r );
    7776}
    7877
    7978/**
    function bp_blogs_get_all_blogs( $limit = null, $page = null ) { 
    12591258 * @return array See {@BP_Blogs_Blog::get()}.
    12601259 */
    12611260function bp_blogs_get_random_blogs( $limit = null, $page = null ) {
    1262         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        );
    12631268}
    12641269
    12651270/**
  • src/bp-blogs/bp-blogs-template.php

    diff --git src/bp-blogs/bp-blogs-template.php src/bp-blogs/bp-blogs-template.php
    index ac4dd83a7..ccfb6aa9a 100644
    function bp_rewind_blogs() { 
    109109 *
    110110 * Based on the $args passed, bp_has_blogs() populates the $blogs_template
    111111 * global, enabling the use of BuddyPress templates and template functions to
    112  * display a list of activity items.
     112 * display a list of blogs.
    113113 *
    114  * @global object $blogs_template {@link BP_Blogs_Template}
     114 * @since 1.0.0
     115 * @since 1.2.0 Added $type, $page, $search_terms parameters
     116 * @since 1.6.0 Added $page_arg parameter
     117 * @since 2.0.0 Added $include_blog_ids, $update_meta_cache parameters
     118 * @since 10.0.0 Added $date_query parameter
    115119 *
    116120 * @param array|string $args {
    117121 *     Arguments for limiting the contents of the blogs loop. Most arguments
    function bp_rewind_blogs() { 
    120124 *     and because bp_has_blogs() determines some default arguments in a
    121125 *     dynamic fashion, we list all accepted arguments here as well.
    122126 *
    123  *     Arguments can be passed as an associative array, or as a URL query
    124  *     string (eg, 'user_id=4&per_page=3').
    125  *
    126127 *     @type int      $page             Which page of results to fetch. Using page=1 without
    127128 *                                      per_page will result in no pagination. Default: 1.
    128129 *     @type int|bool $per_page         Number of results per page. Default: 20.
    function bp_rewind_blogs() { 
    133134 *     @type string   $type             The order in which results should be fetched.
    134135 *                                      'active', 'alphabetical', 'newest', or 'random'.
    135136 *     @type array    $include_blog_ids Array of blog IDs to limit results to.
    136  *     @type string   $sort             'ASC' or 'DESC'. Default: 'DESC'.
    137137 *     @type string   $search_terms     Limit results by a search term. Default: the value of `$_REQUEST['s']` or
    138138 *                                      `$_REQUEST['sites_search']`, if present.
    139139 *     @type int      $user_id          The ID of the user whose blogs should be retrieved.
    140140 *                                      When viewing a user profile page, 'user_id' defaults to the
    141141 *                                      ID of the displayed user. Otherwise the default is false.
     142 *     @type array    $date_query       Filter results by site last activity date. See first parameter of
     143 *                                      {@link WP_Date_Query::__construct()} for syntax. Only applicable if
     144 *                                      $type is either 'newest' or 'active'.
    142145 * }
    143146 * @return bool Returns true when blogs are found, otherwise false.
    144147 */
    function bp_has_blogs( $args = '' ) { 
    164167                'user_id'           => bp_displayed_user_id(), // Pass a user_id to limit to only blogs this user is a member of.
    165168                'include_blog_ids'  => false,
    166169                'search_terms'      => $search_terms_default,
     170                'date_query'        => false,
    167171                'update_meta_cache' => true
    168172        ), 'has_blogs' );
    169173
    function bp_has_blogs( $args = '' ) { 
    173177        }
    174178
    175179        // Get the blogs.
    176         $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'] );
     180        $blogs_template = new BP_Blogs_Template( $r );
    177181
    178182        /**
    179183         * Filters whether or not there are blogs to list.
  • src/bp-blogs/classes/class-bp-blogs-blog.php

    diff --git src/bp-blogs/classes/class-bp-blogs-blog.php src/bp-blogs/classes/class-bp-blogs-blog.php
    index af38b7863..60875a0d5 100644
    class BP_Blogs_Blog { 
    163163        /**
    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 ) {
     192        public static function get( ...$args ) {
    184193                global $wpdb;
    185194
    186195                $bp = buddypress();
    187196
    188                 if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
     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 = '';
     234                }
     235
     236                $pag_sql = ( $r['limit'] && $r['page'] ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $r['page'] - 1 ) * $r['limit']), intval( $r['limit'] ) ) : '';
    192237
    193                 $pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ) : '';
     238                $user_sql = ! empty( $r['user_id'] ) ? $wpdb->prepare( " AND b.user_id = %d", $r['user_id'] ) : '';
    194239
    195                 $user_sql = !empty( $user_id ) ? $wpdb->prepare( " AND b.user_id = %d", $user_id ) : '';
     240                $date_query_sql = '';
    196241
    197                 switch ( $type ) {
     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':
    202248                                $order_sql = "ORDER BY bm_name.meta_value ASC";
    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':
    208255                                $order_sql = "ORDER BY RAND()";
    class BP_Blogs_Blog { 
    210257                }
    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 );
    216263                        $include_sql  = " AND b.blog_id IN ({$blog_ids_sql})";
    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 {
    223270                        $search_terms_sql = '';
    class BP_Blogs_Blog { 
    235282                        WHERE
    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                " );
    241288
    class BP_Blogs_Blog { 
    250297                          wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql}
    251298                          AND
    252299                          bm_name.meta_key = 'name' AND bm_description.meta_key = 'description'
    253                           {$search_terms_sql} {$user_sql} {$include_sql}
     300                          {$search_terms_sql} {$user_sql} {$include_sql} {$date_query_sql}
    254301                " );
    255302
    256303                $blog_ids = array();
    class BP_Blogs_Blog { 
    258305                        $blog_ids[] = (int) $blog->blog_id;
    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.
    264311                foreach ( (array) $paged_blogs as $key => $data ) {
    class BP_Blogs_Blog { 
    266313                        $paged_blogs[ $key ]->admin_user_id = (int) $paged_blogs[ $key ]->admin_user_id;
    267314                }
    268315
    269                 if ( $update_meta_cache ) {
     316                if ( $r['update_meta_cache'] ) {
    270317                        bp_blogs_update_meta_cache( $blog_ids );
    271318                }
    272319
  • src/bp-blogs/classes/class-bp-blogs-template.php

    diff --git src/bp-blogs/classes/class-bp-blogs-template.php src/bp-blogs/classes/class-bp-blogs-template.php
    index b203c892c..ebabefdb0 100644
    class BP_Blogs_Template { 
    8383        /**
    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.
     91         * @param array $args {
     92         *     Array of arguments. See {@link BP_Blogs_Blog::get()}.
     93         * }
    9994         */
    100         public function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage', $update_meta_cache = true, $include_blog_ids = false ) {
     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                );
    101133
    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 );
     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.
    107139                if ( ! empty( $_REQUEST['letter'] ) ) {
    class BP_Blogs_Template { 
    110142                // Typical blogs query.
    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 {
    127160                        $this->total_blog_count = (int) $max;
    class BP_Blogs_Template { 
    134167                $blog_count = count( $this->blogs );
    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 {
    140173                        $this->blog_count = (int) $max;
  • src/bp-core/classes/class-bp-date-query.php

    diff --git src/bp-core/classes/class-bp-date-query.php src/bp-core/classes/class-bp-date-query.php
    index 792fb222a..6518d6192 100644
    class BP_Date_Query extends WP_Date_Query { 
    3232         */
    3333        public $column;
    3434
     35        /**
     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
    3544        /**
    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' ) );
    4760                }
    4861
     62                if ( ! empty( $prepend_and ) ) {
     63                        $this->prepend_and = true;
     64                }
     65
    4966                parent::__construct( $date_query, $column );
    5067        }
    5168
    class BP_Date_Query extends WP_Date_Query { 
    6683                $retval[] = $this->column;
    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;
  • src/bp-core/classes/class-bp-user-query.php

    diff --git src/bp-core/classes/class-bp-user-query.php src/bp-core/classes/class-bp-user-query.php
    index 68b4fbf56..081dfac5e 100644
    defined( 'ABSPATH' ) || exit; 
    1717 * Member directories, the Friends component, etc.
    1818 *
    1919 * @since 1.7.0
     20 * @since 10.0.0 Added $date_query parameter.
    2021 *
    2122 * @param array $query {
    2223 *     Query arguments. All items are optional.
    defined( 'ABSPATH' ) || exit; 
    4950 *                                                  associated with $meta_key matches $meta_value. Default: false.
    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.
    5458 *     @type string            $count_total         Determines how BP_User_Query will do a count of total users matching
    class BP_User_Query { 
    154158                $this->setup_hooks();
    155159
    156160                if ( ! empty( $this->query_vars_raw ) ) {
    157                         $this->query_vars = wp_parse_args( $this->query_vars_raw, array(
    158                                 'type'                => 'newest',
    159                                 'per_page'            => 0,
    160                                 'page'                => 1,
    161                                 'user_id'             => 0,
    162                                 'search_terms'        => false,
    163                                 'search_wildcard'     => 'both',
    164                                 'include'             => false,
    165                                 'exclude'             => false,
    166                                 'user_ids'            => false,
    167                                 'member_type'         => '',
    168                                 'member_type__in'     => '',
    169                                 'member_type__not_in' => '',
    170                                 'meta_key'            => false,
    171                                 'meta_value'          => false,
    172                                 'xprofile_query'      => false,
    173                                 'populate_extras'     => true,
    174                                 'count_total'         => 'count_query'
    175                         ) );
     161                        $this->query_vars = wp_parse_args(
     162                                $this->query_vars_raw,
     163                                array(
     164                                        'type'                => 'newest',
     165                                        'per_page'            => 0,
     166                                        'page'                => 1,
     167                                        'user_id'             => 0,
     168                                        'search_terms'        => false,
     169                                        'search_wildcard'     => 'both',
     170                                        'include'             => false,
     171                                        'exclude'             => false,
     172                                        'user_ids'            => false,
     173                                        'member_type'         => '',
     174                                        'member_type__in'     => '',
     175                                        'member_type__not_in' => '',
     176                                        'meta_key'            => false,
     177                                        'meta_value'          => false,
     178                                        'xprofile_query'      => false,
     179                                        'date_query'          => false,
     180                                        'populate_extras'     => true,
     181                                        'count_total'         => 'count_query'
     182                                )
     183                        );
    176184
    177185                        /**
    178186                         * Fires before the construction of the BP_User_Query query.
    class BP_User_Query { 
    279287                                $sql['orderby'] = "ORDER BY u.date_recorded";
    280288                                $sql['order']   = "DESC";
    281289
     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
    282296                                break;
    283297
    284298                        // 'active', 'newest', and 'random' queries
    class BP_User_Query { 
    301315                                        $sql['order'] = "DESC";
    302316                                }
    303317
     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;
     322                                }
     323
    304324                                break;
    305325
    306326                        // 'popular' sorts by the 'total_friend_count' usermeta.
  • src/bp-groups/bp-groups-functions.php

    diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
    index 9ecddaad7..e8f22605f 100644
    function groups_get_total_member_count( $group_id ) { 
    783783 * @since 1.2.0
    784784 * @since 2.6.0 Added `$group_type`, `$group_type__in`, and `$group_type__not_in` parameters.
    785785 * @since 2.7.0 Added `$update_admin_cache` and `$parent_id` parameters.
     786 * @since 10.0.0 Added `$date_query` parameter.
    786787 *
    787788 * @param array|string $args {
    788789 *     Array of arguments. Supports all arguments of
    function groups_get_groups( $args = '' ) { 
    810811                'group_type__in'     => '',             // Array or comma-separated list of group types to limit results to.
    811812                'group_type__not_in' => '',             // Array or comma-separated list of group types that will be excluded from results.
    812813                'meta_query'         => false,          // Filter by groupmeta. See WP_Meta_Query for syntax.
     814                'date_query'         => false,          // Filter by group last activity date. See WP_Date_Query for syntax.
    813815                'show_hidden'        => false,          // Show hidden groups to non-admins.
    814816                'status'             => array(),        // Array or comma-separated list of group statuses to limit results to.
    815817                'per_page'           => 20,             // The number of results to return per page.
    function groups_get_groups( $args = '' ) { 
    834836                'group_type__in'     => $r['group_type__in'],
    835837                'group_type__not_in' => $r['group_type__not_in'],
    836838                'meta_query'         => $r['meta_query'],
     839                'date_query'         => $r['date_query'],
    837840                'show_hidden'        => $r['show_hidden'],
    838841                'status'             => $r['status'],
    839842                'per_page'           => $r['per_page'],
  • src/bp-groups/bp-groups-template.php

    diff --git src/bp-groups/bp-groups-template.php src/bp-groups/bp-groups-template.php
    index 91df7d46e..527333183 100644
    function bp_group_type_list( $group_id = 0, $r = array() ) { 
    362362 * @since 2.6.0 Added `$group_type`, `$group_type__in`, and `$group_type__not_in` parameters.
    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 {
    367368 *     Array of parameters. All items are optional.
    function bp_group_type_list( $group_id = 0, $r = array() ) { 
    391392 *     @type array|string $status             Array or comma-separated list of group statuses to limit results to.
    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.
    396400 *     @type array|string $exclude            Array or comma-separated list of group IDs. Results will exclude
    function bp_has_groups( $args = '' ) { 
    480484                'group_type__not_in' => '',
    481485                'status'             => $status,
    482486                'meta_query'         => false,
     487                'date_query'         => false,
    483488                'include'            => false,
    484489                'exclude'            => false,
    485490                'parent_id'          => null,
    function bp_has_groups( $args = '' ) { 
    505510                'group_type__not_in' => $r['group_type__not_in'],
    506511                'status'             => $r['status'],
    507512                'meta_query'         => $r['meta_query'],
     513                'date_query'         => $r['date_query'],
    508514                'include'            => $r['include'],
    509515                'exclude'            => $r['exclude'],
    510516                'parent_id'          => $r['parent_id'],
  • src/bp-groups/classes/class-bp-groups-group.php

    diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
    index f06ec8055..da2453ac4 100644
    class BP_Groups_Group { 
    989989         * @since 2.7.0 Added `$update_admin_cache` and `$parent_id` parameters.
    990990         * @since 2.8.0 Changed `$search_terms` parameter handling and added `$search_columns` parameter.
    991991         * @since 2.9.0 Added `$slug` parameter.
     992         * @since 10.0.0 Added `$date_query` parameter.
    992993         *
    993994         * @param array $args {
    994995         *     Array of parameters. All items are optional.
    class BP_Groups_Group { 
    10231024         *                                            excluded from results.
    10241025         *     @type array        $meta_query         Optional. An array of meta_query conditions.
    10251026         *                                            See {@link WP_Meta_Query::queries} for description.
     1027         *     @type array        $date_query         Optional. Filter results by group last activity date. See first
     1028         *                                            paramter of {@link WP_Date_Query::__construct()} for syntax. Only
     1029         *                                            applicable if $type is either 'newest' or 'active'.
    10261030         *     @type array|string $value              Optional. Array or comma-separated list of group IDs. Results
    10271031         *                                            will be limited to groups within the list. Default: false.
    10281032         *     @type array|string $parent_id          Optional. Array or comma-separated list of group IDs. Results
    class BP_Groups_Group { 
    10861090                        'group_type__in'     => '',
    10871091                        'group_type__not_in' => '',
    10881092                        'meta_query'         => false,
     1093                        'date_query'         => false,
    10891094                        'include'            => false,
    10901095                        'parent_id'          => null,
    10911096                        'update_meta_cache'  => true,
    class BP_Groups_Group { 
    12701275                        $orderby = 'date_created';
    12711276                }
    12721277
     1278                // Process date query for 'date_created' and 'last_activity' sort.
     1279                if ( 'date_created' === $orderby || 'last_activity' === $orderby ) {
     1280                        $date_query_sql = BP_Date_Query::get_where_sql( $r['date_query'], self::convert_orderby_to_order_by_term( $orderby ) );
     1281
     1282                        if ( ! empty( $date_query_sql ) ) {
     1283                                $where_conditions['date'] = $date_query_sql;
     1284                        }
     1285                }
     1286
    12731287                // Sanitize 'order'.
    12741288                $order = bp_esc_sql_order( $order );
    12751289
    class BP_Groups_Group { 
    13951409        }
    13961410
    13971411        /**
    1398          * Get the SQL for the 'meta_query' param in BP_Activity_Activity::get()
     1412         * Get the SQL for the 'meta_query' param in BP_Groups_Group::get()
    13991413         *
    14001414         * We use WP_Meta_Query to do the heavy lifting of parsing the
    14011415         * meta_query array and creating the necessary SQL clauses.
  • src/bp-groups/classes/class-bp-groups-template.php

    diff --git src/bp-groups/classes/class-bp-groups-template.php src/bp-groups/classes/class-bp-groups-template.php
    index 5ad3cc046..63ba82650 100644
    class BP_Groups_Template { 
    127127         *     @type int $page Default: 1.
    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
    137135                        $old_args_keys = array(
    class BP_Groups_Template { 
    149147                                11 => 'page_arg',
    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
    155155                $defaults = array(
    class BP_Groups_Template { 
    173173                        'group_type__not_in' => '',
    174174                        'status'             => array(),
    175175                        'meta_query'         => false,
     176                        'date_query'         => false,
    176177                        'update_meta_cache'  => true,
    177178                        'update_admin_cache' => false,
    178179                );
    class BP_Groups_Template { 
    212213                        $this->groups = array( $group );
    213214
    214215                } else {
    215                         $this->groups = groups_get_groups( array(
    216                                 'type'               => $type,
    217                                 'order'              => $order,
    218                                 'orderby'            => $orderby,
    219                                 'per_page'           => $this->pag_num,
    220                                 'page'               => $this->pag_page,
    221                                 'user_id'            => $user_id,
    222                                 'search_terms'       => $search_terms,
    223                                 'search_columns'     => $search_columns,
    224                                 'meta_query'         => $meta_query,
    225                                 'group_type'         => $group_type,
    226                                 'group_type__in'     => $group_type__in,
    227                                 'group_type__not_in' => $group_type__not_in,
    228                                 'status'             => $status,
    229                                 'include'            => $include,
    230                                 'exclude'            => $exclude,
    231                                 'parent_id'          => $parent_id,
    232                                 'update_meta_cache'  => $update_meta_cache,
    233                                 'update_admin_cache' => $update_admin_cache,
    234                                 'show_hidden'        => $show_hidden,
    235                         ) );
     216                        $this->groups = groups_get_groups(
     217                                        array(
     218                                        'type'               => $type,
     219                                        'order'              => $order,
     220                                        'orderby'            => $orderby,
     221                                        'per_page'           => $this->pag_num,
     222                                        'page'               => $this->pag_page,
     223                                        'user_id'            => $user_id,
     224                                        'search_terms'       => $search_terms,
     225                                        'search_columns'     => $search_columns,
     226                                        'meta_query'         => $meta_query,
     227                                        'date_query'         => $date_query,
     228                                        'group_type'         => $group_type,
     229                                        'group_type__in'     => $group_type__in,
     230                                        'group_type__not_in' => $group_type__not_in,
     231                                        'status'             => $status,
     232                                        'include'            => $include,
     233                                        'exclude'            => $exclude,
     234                                        'parent_id'          => $parent_id,
     235                                        'update_meta_cache'  => $update_meta_cache,
     236                                        'update_admin_cache' => $update_admin_cache,
     237                                        'show_hidden'        => $show_hidden,
     238                                )
     239                        );
    236240                }
    237241
    238242                if ( 'invites' == $type ) {
  • src/bp-members/bp-members-template.php

    diff --git src/bp-members/bp-members-template.php src/bp-members/bp-members-template.php
    index 719874481..b659f94f7 100644
    function bp_members_invitations_slug() { 
    311311 *
    312312 * @since 1.2.0
    313313 * @since 7.0.0 Added `xprofile_query` parameter. Added `user_ids` parameter.
     314 * @since 10.0.0 Added `date_query` parameter.
    314315 *
    315316 * @global object $members_template {@link BP_Members_Template}
    316317 *
    function bp_members_invitations_slug() { 
    358359 *                                                      usermeta value. Default: false.
    359360 *     @type array                 $xprofile_query      Filter results by xprofile data. Requires the xprofile
    360361 *                                                      component. See {@see BP_XProfile_Query} for details.
     362 *     @type array                 $date_query          Filter results by member last activity date. See first parameter of
     363 *                                                      {@link WP_Date_Query::__construct()} for syntax. Only applicable if
     364 *                                                      $type is either 'active', 'random', 'newest', or 'online'.
    361365 *     @type bool                  $populate_extras     Whether to fetch optional data, such as friend counts.
    362366 *                                                      Default: true.
    363367 * }
    function bp_has_members( $args = '' ) { 
    391395        }
    392396
    393397        // Type: active ( default ) | random | newest | popular | online | alphabetical.
    394         $r = bp_parse_args( $args, array(
    395                 'type'                => 'active',
    396                 'page'                => 1,
    397                 'per_page'            => 20,
    398                 'max'                 => false,
    399 
    400                 'page_arg'            => 'upage',  // See https://buddypress.trac.wordpress.org/ticket/3679.
    401 
    402                 'include'             => false,    // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users.
    403                 'exclude'             => false,    // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users.
    404                 'user_ids'            => false,
    405 
    406                 'user_id'             => $user_id, // Pass a user_id to only show friends of this user.
    407                 'member_type'         => $member_type,
    408                 'member_type__in'     => '',
    409                 'member_type__not_in' => '',
    410                 'search_terms'        => $search_terms_default,
    411 
    412                 'meta_key'            => false,    // Only return users with this usermeta.
    413                 'meta_value'          => false,    // Only return users where the usermeta value matches. Requires meta_key.
    414 
    415                 'xprofile_query'      => false,
    416                 'populate_extras'     => true      // Fetch usermeta? Friend count, last active etc.
    417         ), 'has_members' );
     398        $r = bp_parse_args(
     399                $args,
     400                array(
     401                        'type'                => 'active',
     402                        'page'                => 1,
     403                        'per_page'            => 20,
     404                        'max'                 => false,
     405
     406                        'page_arg'            => 'upage',  // See https://buddypress.trac.wordpress.org/ticket/3679.
     407
     408                        'include'             => false,    // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users.
     409                        'exclude'             => false,    // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users.
     410                        'user_ids'            => false,
     411
     412                        'user_id'             => $user_id, // Pass a user_id to only show friends of this user.
     413                        'member_type'         => $member_type,
     414                        'member_type__in'     => '',
     415                        'member_type__not_in' => '',
     416                        'search_terms'        => $search_terms_default,
     417
     418                        'meta_key'            => false,    // Only return users with this usermeta.
     419                        'meta_value'          => false,    // Only return users where the usermeta value matches. Requires meta_key.
     420
     421                        'xprofile_query'      => false,
     422                        'date_query'          => false,    // Filter members by last activity.
     423                        'populate_extras'     => true      // Fetch usermeta? Friend count, last active etc.
     424                ),
     425                'has_members'
     426        );
    418427
    419428        // Pass a filter if ?s= is set.
    420429        if ( is_null( $r['search_terms'] ) ) {
  • src/bp-members/classes/class-bp-core-members-template.php

    diff --git src/bp-members/classes/class-bp-core-members-template.php src/bp-members/classes/class-bp-core-members-template.php
    index ed82ef88f..8f53be680 100644
    class BP_Core_Members_Template { 
    111111         *
    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.
    116117         *
    class BP_Core_Members_Template { 
    172173                        'member_type__in'     => '',
    173174                        'member_type__not_in' => '',
    174175                        'xprofile_query'      => false,
     176                        'date_query'          => false,
    175177                );
    176178                $r = wp_parse_args( $args, $defaults );
    177179
    class BP_Core_Members_Template { 
    200202                                        'member_type__in'     => $r['member_type__in'],
    201203                                        'member_type__not_in' => $r['member_type__not_in'],
    202204                                        'xprofile_query'      => $r['xprofile_query'],
     205                                        'date_query'          => $r['date_query'],
    203206                                )
    204207                        );
    205208                }
  • src/bp-notifications/classes/class-bp-notifications-notification.php

    diff --git src/bp-notifications/classes/class-bp-notifications-notification.php src/bp-notifications/classes/class-bp-notifications-notification.php
    index 34a702628..dd8365460 100644
    class BP_Notifications_Notification { 
    828828         *
    829829         * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
    830830         * of parsing the date_query array and creating the necessary SQL clauses.
    831          * However, since BP_Notifications_Notification::get() builds its SQL
    832          * differently than WP_Query, we have to alter the return value (stripping
    833          * the leading AND keyword from the query).
    834831         *
    835832         * @since 2.3.0
    836833         *
    class BP_Notifications_Notification { 
    839836         * @return string
    840837         */
    841838        public static function get_date_query_sql( $date_query = array() ) {
    842 
    843                 // Bail if not a proper date query format.
    844                 if ( empty( $date_query ) || ! is_array( $date_query ) ) {
    845                         return '';
    846                 }
    847 
    848                 // Date query.
    849                 $date_query = new BP_Date_Query( $date_query, 'date_notified' );
    850 
    851                 // Strip the leading AND - it's handled in get().
    852                 return preg_replace( '/^\sAND/', '', $date_query->get_sql() );
     839                return BP_Date_Query::get_where_sql( $date_query, 'n.date_notified' );
    853840        }
    854841
    855842        /**
  • tests/phpunit/testcases/blogs/class-bp-blogs-blog.php

    diff --git tests/phpunit/testcases/blogs/class-bp-blogs-blog.php tests/phpunit/testcases/blogs/class-bp-blogs-blog.php
    index 7356bcb8d..2e8a33d48 100644
    class BP_Tests_BP_Blogs_Blog_TestCases extends BP_UnitTestCase { 
    2323                // make the blog public or it won't turn up in generic results
    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
    2932                $this->assertEquals( array( $b ), $blog_ids );
    class BP_Tests_BP_Blogs_Blog_TestCases extends BP_UnitTestCase { 
    5255                // make the blog public or it won't turn up in generic results
    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
    5864                $this->assertEquals( array( $b ), $blog_ids );
    class BP_Tests_BP_Blogs_Blog_TestCases extends BP_UnitTestCase { 
    149155                $b_time = date_i18n( 'Y-m-d H:i:s', strtotime( '-5 minutes' ) );
    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 );
    155161
    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 );
    161167
    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}
  • tests/phpunit/testcases/blogs/template.php

    diff --git tests/phpunit/testcases/blogs/template.php tests/phpunit/testcases/blogs/template.php
    index e7fe54147..3c260436f 100644
    class BP_Tests_Blogs_Template extends BP_UnitTestCase { 
    227227                        'update_meta_cache' => true
    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 );
    243233
    class BP_Tests_Blogs_Template extends BP_UnitTestCase { 
    268258                        'update_meta_cache' => true
    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 );
    284264
    class BP_Tests_Blogs_Template extends BP_UnitTestCase { 
    309289                        'update_meta_cache' => true
    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 );
    325295
    class BP_Tests_Blogs_Template extends BP_UnitTestCase { 
    350320                        'update_meta_cache' => true
    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 );
    366326
  • tests/phpunit/testcases/core/class-bp-user-query.php

    diff --git tests/phpunit/testcases/core/class-bp-user-query.php tests/phpunit/testcases/core/class-bp-user-query.php
    index c03ad3076..9b473845e 100644
    class BP_Tests_BP_User_Query_TestCases extends BP_UnitTestCase { 
    779779                $this->assertSame( array( 'foo' ), wp_cache_get( $users[2], 'bp_member_member_type' ) );
    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}
  • tests/phpunit/testcases/groups/class-bp-groups-group.php

    diff --git tests/phpunit/testcases/groups/class-bp-groups-group.php tests/phpunit/testcases/groups/class-bp-groups-group.php
    index b6f0f00ad..5b7e083be 100644
    class BP_Tests_BP_Groups_Group_TestCases extends BP_UnitTestCase { 
    232232                $this->assertEquals( 1, $groups['total'] );
    233233        }
    234234
     235        /**
     236         * @group get
     237         * @group date_query
     238         */
     239        public function test_get_with_date_query_before() {
     240                $u1 = self::factory()->group->create( array(
     241                        'last_activity' => date( 'Y-m-d H:i:s', time() ),
     242                ) );
     243                $u2 = self::factory()->group->create( array(
     244                        'last_activity' => '2008-03-25 17:13:55',
     245                ) );
     246                $u3 = self::factory()->group->create( array(
     247                        'last_activity' => '2010-01-01 12:00',
     248                ) );
     249
     250                // 'date_query' before test
     251                $groups = BP_Groups_Group::get( array(
     252                        'type' => 'active',
     253                        'date_query' => array( array(
     254                                'before' => array(
     255                                        'year'  => 2010,
     256                                        'month' => 1,
     257                                        'day'   => 1,
     258                                ),
     259                        ) )
     260                ) );
     261
     262                $this->assertEquals( [ $u2 ], wp_list_pluck( $groups['groups'], 'id' ) );
     263        }
     264
     265        /**
     266         * @group get
     267         * @group date_query
     268         */
     269        public function test_get_with_date_query_range() {
     270                $u1 = self::factory()->group->create( array(
     271                        'last_activity' => date( 'Y-m-d H:i:s', time() ),
     272                ) );
     273                $u2 = self::factory()->group->create( array(
     274                        'last_activity' => '2008-03-25 17:13:55',
     275                ) );
     276                $u3 = self::factory()->group->create( array(
     277                        'last_activity' => '2001-01-01 12:00',
     278                ) );
     279
     280                // 'date_query' range test
     281                $groups = BP_Groups_Group::get( array(
     282                        'type' => 'active',
     283                        'date_query' => array( array(
     284                                'after'  => 'January 2nd, 2001',
     285                                'before' => array(
     286                                        'year'  => 2010,
     287                                        'month' => 1,
     288                                        'day'   => 1,
     289                                ),
     290                                'inclusive' => true,
     291                        ) )
     292                ) );
     293
     294                $this->assertEquals( [ $u2 ], wp_list_pluck( $groups['groups'], 'id' ) );
     295        }
     296
     297        /**
     298         * @group get
     299         * @group date_query
     300         */
     301        public function test_get_with_date_query_after() {
     302                $u1 = self::factory()->group->create( array(
     303                        'last_activity' => date( 'Y-m-d H:i:s', time() ),
     304                ) );
     305                $u2 = self::factory()->group->create( array(
     306                        'last_activity' => '2008-03-25 17:13:55',
     307                ) );
     308                $u3 = self::factory()->group->create( array(
     309                        'last_activity' => '2001-01-01 12:00',
     310                ) );
     311
     312                // 'date_query' after and relative test
     313                $groups = BP_Groups_Group::get( array(
     314                        'type' => 'active',
     315                        'date_query' => array( array(
     316                                'after' => '1 day ago'
     317                        ) )
     318                ) );
     319
     320                $this->assertEquals( [ $u1 ], wp_list_pluck( $groups['groups'], 'id' ) );
     321        }
     322
    235323        /**
    236324         * @group get
    237325         */