Changeset 13184
- Timestamp:
- 12/12/2021 02:09:02 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-activity/classes/class-bp-activity-activity.php
r13150 r13184 1033 1033 * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting 1034 1034 * of parsing the date_query array and creating the necessary SQL clauses. 1035 * However, since BP_Activity_Activity::get() builds its SQL differently than1036 * WP_Query, we have to alter the return value (stripping the leading AND1037 * keyword from the query).1038 1035 * 1039 1036 * @since 2.1.0 … … 1044 1041 */ 1045 1042 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' ); 1055 1044 } 1056 1045 -
trunk/src/bp-blogs/bp-blogs-functions.php
r13147 r13184 26 26 /** 27 27 * 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 28 32 * 29 33 * @see BP_Blogs_Blog::get() for a description of arguments and return value. … … 38 42 * @type int $per_page Default: 20. 39 43 * @type int $page Default: 1. 44 * @type array $date_query Default: false. 40 45 * @type bool $update_meta_cache Whether to pre-fetch blogmeta. Default: true. 41 46 * } … … 54 59 'per_page' => 20, // The number of results to return per page. 55 60 'page' => 1, // The page to return if limiting per page. 61 'date_query' => false, // Filter blogs by date query. 56 62 'update_meta_cache' => true, // Whether to pre-fetch blogmeta. 57 63 ), … … 60 66 61 67 // 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 ); 71 69 72 70 /** … … 1261 1259 */ 1262 1260 function 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 ); 1264 1268 } 1265 1269 -
trunk/src/bp-blogs/bp-blogs-template.php
r13147 r13184 112 112 * Based on the $args passed, bp_has_blogs() populates the $blogs_template 113 113 * 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 115 121 * 116 122 * @global BP_Blogs_Template $blogs_template {@link BP_Blogs_Template} … … 122 128 * and because bp_has_blogs() determines some default arguments in a 123 129 * dynamic fashion, we list all accepted arguments here as well. 124 *125 * Arguments can be passed as an associative array, or as a URL query126 * string (eg, 'user_id=4&per_page=3').127 130 * 128 131 * @type int $page Which page of results to fetch. Using page=1 without … … 141 144 * When viewing a user profile page, 'user_id' defaults to the 142 145 * 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'. 143 149 * } 144 150 * @return bool Returns true when blogs are found, otherwise false. … … 168 174 'include_blog_ids' => false, 169 175 'search_terms' => $search_terms_default, 176 'date_query' => false, 170 177 'update_meta_cache' => true, 171 178 ), … … 179 186 180 187 // 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 ); 182 189 183 190 /** -
trunk/src/bp-blogs/classes/class-bp-blogs-blog.php
r12544 r13184 164 164 * Retrieve a set of blog-user associations. 165 165 * 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 * } 179 188 * @return array Multidimensional results array, structured as follows: 180 189 * 'blogs' - Array of located blog objects 181 190 * 'total' - A count of the total blogs matching the filter params 182 191 */ 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() ) ) ) { 189 231 $hidden_sql = "AND wb.public = 1"; 190 else232 } else { 191 233 $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'] ) { 198 243 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"; 200 246 break; 201 247 case 'alphabetical': … … 203 249 break; 204 250 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"; 206 253 break; 207 254 case 'random': … … 211 258 212 259 $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'] ) ); 214 261 if ( ! empty( $include_blog_ids ) ) { 215 262 $blog_ids_sql = implode( ',', $include_blog_ids ); … … 217 264 } 218 265 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'] ) . '%'; 221 268 $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 ); 222 269 } else { … … 236 283 wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} 237 284 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} 239 286 GROUP BY b.blog_id {$order_sql} {$pag_sql} 240 287 " ); … … 245 292 {$bp->blogs->table_name} b 246 293 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) 247 295 LEFT JOIN {$bp->blogs->table_name_blogmeta} bm_name ON (b.blog_id = bm_name.blog_id) 248 296 LEFT JOIN {$bp->blogs->table_name_blogmeta} bm_description ON (b.blog_id = bm_description.blog_id) 249 297 WHERE 250 298 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} 254 301 " ); 255 302 … … 259 306 } 260 307 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'] ); 262 309 263 310 // Integer casting. … … 267 314 } 268 315 269 if ( $ update_meta_cache) {316 if ( $r['update_meta_cache'] ) { 270 317 bp_blogs_update_meta_cache( $blog_ids ); 271 318 } -
trunk/src/bp-blogs/classes/class-bp-blogs-template.php
r10517 r13184 84 84 * Constructor method. 85 85 * 86 * @since 1.2.0 87 * @since 10.0.0 Converted to array as main function argument. Added $date_query parameter. 88 * 86 89 * @see BP_Blogs_Blog::get() for a description of parameters. 87 90 * 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'] ); 105 137 106 138 // Backwards compatibility support for blogs by first letter. … … 111 143 } else { 112 144 $this->blogs = bp_blogs_get_blogs( array( 113 'type' => $ type,145 'type' => $r['type'], 114 146 'per_page' => $this->pag_num, 115 147 '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'] 120 153 ) ); 121 154 } 122 155 123 156 // 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'] ) ) { 125 158 $this->total_blog_count = (int) $this->blogs['total']; 126 159 } else { … … 135 168 136 169 // Set the current blog count. 137 if ( empty( $ max ) || ( $max>= (int) $blog_count ) ) {170 if ( empty( $r['max'] ) || ( $r['max'] >= (int) $blog_count ) ) { 138 171 $this->blog_count = (int) $blog_count; 139 172 } else { -
trunk/src/bp-core/classes/class-bp-date-query.php
r10417 r13184 34 34 35 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 44 /** 36 45 * Constructor. 37 46 * 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. 40 53 * 41 54 * @see WP_Date_Query::__construct() 42 55 */ 43 public function __construct( $date_query, $column = '' ) {56 public function __construct( $date_query, $column = '', $prepend_and = false ) { 44 57 if ( ! empty( $column ) ) { 45 58 $this->column = $column; 46 59 add_filter( 'date_query_valid_columns', array( $this, 'register_date_column' ) ); 60 } 61 62 if ( ! empty( $prepend_and ) ) { 63 $this->prepend_and = true; 47 64 } 48 65 … … 67 84 return $retval; 68 85 } 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 } 69 136 } 70 137 endif; -
trunk/src/bp-core/classes/class-bp-user-query.php
r13108 r13184 18 18 * 19 19 * @since 1.7.0 20 * @since 10.0.0 Added $date_query parameter. 20 21 * 21 22 * @param array $query { … … 50 51 * @type array $xprofile_query Filter results by xprofile data. Requires the xprofile component. 51 52 * 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'. 52 56 * @type bool $populate_extras True if you want to fetch extra metadata 53 57 * about returned users, such as total group and friend counts. … … 173 177 'meta_value' => false, 174 178 'xprofile_query' => false, 179 'date_query' => false, 175 180 'populate_extras' => true, 176 181 'count_total' => 'count_query', … … 283 288 $sql['order'] = "DESC"; 284 289 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 285 296 break; 286 297 … … 303 314 $sql['orderby'] = "ORDER BY u.date_recorded"; 304 315 $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; 305 322 } 306 323 -
trunk/src/bp-groups/bp-groups-functions.php
r13108 r13184 914 914 * @since 2.6.0 Added `$group_type`, `$group_type__in`, and `$group_type__not_in` parameters. 915 915 * @since 2.7.0 Added `$update_admin_cache` and `$parent_id` parameters. 916 * @since 10.0.0 Added `$date_query` parameter. 916 917 * 917 918 * @param array|string $args { … … 943 944 'group_type__not_in' => '', // Array or comma-separated list of group types that will be excluded from results. 944 945 '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. 945 947 'show_hidden' => false, // Show hidden groups to non-admins. 946 948 'status' => array(), // Array or comma-separated list of group statuses to limit results to. … … 967 969 'group_type__not_in' => $r['group_type__not_in'], 968 970 'meta_query' => $r['meta_query'], 971 'date_query' => $r['date_query'], 969 972 'show_hidden' => $r['show_hidden'], 970 973 'status' => $r['status'], -
trunk/src/bp-groups/bp-groups-template.php
r13108 r13184 363 363 * @since 2.7.0 Added `$update_admin_cache` parameter. 364 364 * @since 7.0.0 Added `$status` parameter. 365 * @since 10.0.0 Added `$date_query` parameter. 365 366 * 366 367 * @param array|string $args { … … 392 393 * @type array $meta_query An array of meta_query conditions. 393 394 * 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'. 394 398 * @type array|string $include Array or comma-separated list of group IDs. Results will be limited 395 399 * to groups within the list. Default: false. … … 483 487 'status' => $status, 484 488 'meta_query' => false, 489 'date_query' => false, 485 490 'include' => false, 486 491 'exclude' => false, … … 510 515 'status' => $r['status'], 511 516 'meta_query' => $r['meta_query'], 517 'date_query' => $r['date_query'], 512 518 'include' => $r['include'], 513 519 'exclude' => $r['exclude'], -
trunk/src/bp-groups/classes/class-bp-groups-group.php
r13129 r13184 1020 1020 * @since 2.8.0 Changed `$search_terms` parameter handling and added `$search_columns` parameter. 1021 1021 * @since 2.9.0 Added `$slug` parameter. 1022 * @since 10.0.0 Added `$date_query` parameter. 1022 1023 * 1023 1024 * @param array $args { … … 1054 1055 * @type array $meta_query Optional. An array of meta_query conditions. 1055 1056 * 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'. 1056 1060 * @type array|string $value Optional. Array or comma-separated list of group IDs. Results 1057 1061 * will be limited to groups within the list. Default: false. … … 1126 1130 'group_type__not_in' => '', 1127 1131 'meta_query' => false, 1132 'date_query' => false, 1128 1133 'include' => false, 1129 1134 'parent_id' => null, … … 1314 1319 } 1315 1320 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 1316 1330 // Sanitize 'order'. 1317 1331 $order = bp_esc_sql_order( $order ); … … 1439 1453 1440 1454 /** 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() 1442 1456 * 1443 1457 * 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 128 128 * } 129 129 */ 130 function __construct( $args = array() ){ 131 $function_args = func_get_args(); 132 130 function __construct( ...$args ){ 133 131 // 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 ) { 135 133 _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__ ) ); 136 134 … … 150 148 ); 151 149 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 ); 153 153 } 154 154 … … 174 174 'status' => array(), 175 175 'meta_query' => false, 176 'date_query' => false, 176 177 'update_meta_cache' => true, 177 178 'update_admin_cache' => false, … … 218 219 219 220 } 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 ); 241 245 } 242 246 -
trunk/src/bp-members/bp-members-template.php
r13166 r13184 310 310 * @since 1.2.0 311 311 * @since 7.0.0 Added `xprofile_query` parameter. Added `user_ids` parameter. 312 * @since 10.0.0 Added `date_query` parameter. 312 313 * 313 314 * @global BP_Core_Members_Template $members_template … … 357 358 * @type array $xprofile_query Filter results by xprofile data. Requires the xprofile 358 359 * 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'. 359 363 * @type bool $populate_extras Whether to fetch optional data, such as friend counts. 360 364 * Default: true. … … 414 418 415 419 'xprofile_query' => false, 420 'date_query' => false, // Filter members by last activity. 416 421 'populate_extras' => true, // Fetch usermeta? Friend count, last active etc. 417 422 ), -
trunk/src/bp-members/classes/class-bp-core-members-template.php
r13108 r13184 112 112 * @since 1.5.0 113 113 * @since 7.0.0 Added `$xprofile_query` parameter. Added `$user_ids` parameter. 114 * @since 10.0.0 Added `$date_query` parameter. 114 115 * 115 116 * @see BP_User_Query for an in-depth description of parameters. … … 173 174 'member_type__not_in' => '', 174 175 'xprofile_query' => false, 176 'date_query' => false, 175 177 ); 176 178 … … 205 207 'member_type__not_in' => $r['member_type__not_in'], 206 208 'xprofile_query' => $r['xprofile_query'], 209 'date_query' => $r['date_query'], 207 210 ) 208 211 ); -
trunk/src/bp-notifications/classes/class-bp-notifications-notification.php
r13147 r13184 849 849 * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting 850 850 * of parsing the date_query array and creating the necessary SQL clauses. 851 * However, since BP_Notifications_Notification::get() builds its SQL852 * differently than WP_Query, we have to alter the return value (stripping853 * the leading AND keyword from the query).854 851 * 855 852 * @since 2.3.0 … … 860 857 */ 861 858 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' ); 873 860 } 874 861 -
trunk/tests/phpunit/testcases/blogs/class-bp-blogs-blog.php
r12606 r13184 24 24 update_blog_option( $b, 'blog_public', '1' ); 25 25 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 ] ); 27 30 $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' ); 28 31 … … 53 56 update_blog_option( $b, 'blog_public', '1' ); 54 57 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 ] ); 56 62 $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' ); 57 63 … … 150 156 151 157 /* Alphabetical */ 152 $blogs = BP_Blogs_Blog::get( 'alphabetical', false, false, $u);158 $blogs = BP_Blogs_Blog::get( [ 'type' => 'alphabetical', 'user_id' => $u ] ); 153 159 $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' ); 154 160 $this->assertEquals( array( $bs['barfoo'], $bs['foobar'] ), $blog_ids ); … … 156 162 /* Newest */ 157 163 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 ] ); 159 165 $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' ); 160 166 $this->assertEquals( array( $bs['foobar'], $bs['barfoo'] ), $blog_ids ); … … 162 168 /* Active */ 163 169 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 ] ); 165 171 $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' ); 166 172 $this->assertEquals( array( $bs['foobar'],$bs['barfoo'] ), $blog_ids ); 167 173 168 174 /* Random */ 169 $blogs = BP_Blogs_Blog::get( 'random', false, false, $u);175 $blogs = BP_Blogs_Blog::get( [ 'type' => 'random', 'user_id' => $u ] ); 170 176 $this->assertTrue( 2 == count( $blogs['blogs'] ) ); 171 177 172 178 $this->set_current_user( $old_user ); 173 179 } 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 } 174 307 } -
trunk/tests/phpunit/testcases/blogs/template.php
r12791 r13184 228 228 ); 229 229 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 ); 241 231 242 232 $this->assertEquals( 5, $at->pag_page ); … … 269 259 ); 270 260 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 ); 282 262 283 263 $this->assertEquals( 8, $at->pag_page ); … … 310 290 ); 311 291 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 ); 323 293 324 294 $this->assertEquals( 14, $at->pag_num ); … … 351 321 ); 352 322 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 ); 364 324 365 325 $this->assertEquals( 13, $at->pag_num ); -
trunk/tests/phpunit/testcases/core/class-bp-user-query.php
r12450 r13184 780 780 $this->assertSame( '', wp_cache_get( $users[3], 'bp_member_member_type' ) ); 781 781 } 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 782 865 } -
trunk/tests/phpunit/testcases/groups/class-bp-groups-group.php
r13086 r13184 292 292 /** 293 293 * @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 294 382 */ 295 383 public function test_get_normal_search() {
Note: See TracChangeset
for help on using the changeset viewer.