Ticket #5272: bp-blogs-classes.php.patch
File bp-blogs-classes.php.patch, 12.6 KB (added by , 11 years ago) |
---|
-
bp-blogs-classes.php
6 6 * @package BuddyPress 7 7 * @subpackage BlogsClasses 8 8 */ 9 10 9 // Exit if accessed directly 11 10 if ( !defined( 'ABSPATH' ) ) exit; 12 11 12 13 13 /** 14 14 * The main BuddyPress blog class. 15 15 * … … 19 19 * @since BuddyPress (1.0.0) 20 20 */ 21 21 class BP_Blogs_Blog { 22 22 23 public $id; 23 24 public $user_id; 24 25 public $blog_id; … … 103 104 104 105 /** 105 106 * Retrieve a set of blog-user associations. 106 * 107 * @param array $args { 108 * An array of arguments. All items are optional. 107 109 * @param string $type The order in which results should be returned. 108 110 * 'active', 'alphabetical', 'newest', or 'random'. 109 111 * @param int|bool $limit Optional. The maximum records to return. … … 114 116 * retrieved. Default: 0. 115 117 * @param string|bool $search_terms Optional. Search by text stored in 116 118 * blogmeta (such as the blog name). Default: false. 119 * @param bool $show_hidden. Whether to include private blogs of user 120 * } 117 121 * @return array Multidimensional results array, structured as follows: 118 122 * 'blogs' - Array of located blog objects 119 123 * 'total' - A count of the total blogs matching the filter params 120 124 */ 121 public static function get( $type, $limit = false, $page = false, $user_id = 0, $search_terms = false) {125 public static function get($args = array()) { 122 126 global $bp, $wpdb; 127 // Backward compatibility with old method of passing arguments 128 if (!is_array($args) || func_num_args() > 1) { 129 _deprecated_argument(__METHOD__, '2', 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__)); 130 $old_args_keys = array( 131 0 => 'type', 132 1 => 'per_page', 133 2 => 'page', 134 3 => 'user_id', 135 4 => 'search_terms', 136 5 => 'show_hidden', 137 ); 123 138 124 if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) ) 139 $func_args = func_get_args(); 140 $args = bp_core_parse_args_array($old_args_keys, $func_args); 141 } 142 143 $defaults = array( 144 'type' => 'active', 145 'per_page' => false, 146 'page' => false, 147 'user_id' => 0, 148 'search_terms' => false, // Terms to search by 149 'show_hidden' => false, // Show blogs marked hidden 150 ); 151 $r = wp_parse_args($args, $defaults); 152 extract($r); 153 154 $hidden_sql = ''; 155 if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) { 125 156 $hidden_sql = "AND wb.public = 1"; 126 else 127 $hidden_sql = ''; 157 } 128 158 129 $pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit )) : '';159 $pag_sql = ( $per_page && $page ) ? $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page)) : ''; 130 160 131 161 $user_sql = !empty( $user_id ) ? $wpdb->prepare( " AND b.user_id = %d", $user_id ) : ''; 132 162 … … 234 264 if ( !$user_id ) 235 265 $user_id = bp_displayed_user_id(); 236 266 237 // Show logged in users their hidden blogs. 238 if ( !bp_is_my_profile() && !$show_hidden)267 // Show logged in users their hidden blogs or user can moderate 268 if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) 239 269 $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id, b.id, bm1.meta_value as name, wb.domain, wb.path FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm1 WHERE b.blog_id = wb.blog_id AND b.blog_id = bm1.blog_id AND bm1.meta_key = 'name' AND wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND b.user_id = %d ORDER BY b.blog_id", $user_id ) ); 240 270 else 241 271 $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id, b.id, bm1.meta_value as name, wb.domain, wb.path FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm1 WHERE b.blog_id = wb.blog_id AND b.blog_id = bm1.blog_id AND bm1.meta_key = 'name' AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND b.user_id = %d ORDER BY b.blog_id", $user_id ) ); 242 272 243 $total_blog_count = BP_Blogs_Blog::total_blog_count_for_user( $user_id);273 $total_blog_count = BP_Blogs_Blog::total_blog_count_for_user($user_id, $show_hidden); 244 274 245 275 $user_blogs = array(); 276 246 277 foreach ( (array) $blogs as $blog ) { 247 278 $user_blogs[$blog->blog_id] = new stdClass; 248 279 $user_blogs[$blog->blog_id]->id = $blog->id; … … 294 325 * 295 326 * @param int $user_id Optional. ID of the user whose blogs are being 296 327 * queried. Defaults to logged-in user. 328 * @param bool $show_hidden. Whether to count also private blogs 297 329 * @return int Blog count for the user. 298 330 */ 299 public static function total_blog_count_for_user( $user_id = null) {331 public static function total_blog_count_for_user($user_id = null, $show_hidden = false) { 300 332 global $bp, $wpdb; 301 333 302 334 if ( !$user_id ) 303 335 $user_id = bp_displayed_user_id(); 304 336 305 // If the user is logged in return the blog count including their hidden blogs. 306 if ( ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) || bp_current_user_can( 'bp_moderate' ) ) { 337 // If the user is logged in return the blog count including their hidden blogs or is show hidden user blogs is set. 338 if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) { 339 return $wpdb->get_var($wpdb->prepare("SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id)); 340 } else { 307 341 return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id ) ); 308 } else {309 return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id ) );310 342 } 311 343 } 312 344 … … 317 349 * blogmeta table. 318 350 * 319 351 * @param string $filter The search term. 320 * @param int $limit Optional. The maximum number of itemsto return.352 * @param int $per_page Optional. The maximum number of items per page to return. 321 353 * Default: null (no limit). 322 354 * @param int $page Optional. The page of results to return. Default: 323 355 * null (no limit). 356 * @param bool $show_hidden Optional. Whether to search in private blogs. Default: 357 * FALSE. 324 358 * @return array Multidimensional results array, structured as follows: 325 359 * 'blogs' - Array of located blog objects 326 360 * 'total' - A count of the total blogs matching the query. 327 361 */ 328 public static function search_blogs( $filter, $limit = null, $page = null) {362 public static function search_blogs($filter, $per_page = null, $page = null, $show_hidden = FALSE) { 329 363 global $wpdb, $bp; 330 364 331 365 $filter = esc_sql( like_escape( $filter ) ); 332 366 333 367 $hidden_sql = ''; 334 if ( !bp_current_user_can( 'bp_moderate' ) ) 368 369 370 if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) 335 371 $hidden_sql = "AND wb.public = 1"; 336 372 337 if ( $limit && $page) {338 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ));373 if ($per_page && $page) { 374 $pag_sql = $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page)); 339 375 } 340 376 341 377 $paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC{$pag_sql}" ); … … 350 386 * Query will include hidden blogs if the logged-in user has the 351 387 * 'bp_moderate' cap. 352 388 * 353 * @param int $limit Optional. The maximum number of items to return.389 * @param int $per_page Optional. The maximum number of items to return per page. 354 390 * Default: null (no limit). 355 391 * @param int $page Optional. The page of results to return. Default: 356 392 * null (no limit). 393 * @param bool $show_hidden Optional. Whether to search in private blogs. Default: 394 * FALSE. 357 395 * @return array Multidimensional results array, structured as follows: 358 396 * 'blogs' - Array of located blog objects 359 397 * 'total' - A count of the total blogs. 360 398 */ 361 public static function get_all( $limit = null, $page = null) {399 public static function get_all($per_page = null, $page = null, $show_hidden = false) { 362 400 global $bp, $wpdb; 401 $hidden_sql = ''; 402 if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) { 403 $hidden_sql = "AND wb.public = 1"; 404 } 405 $pag_sql = ( $per_page && $page ) ? $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page)) : ''; 363 406 364 $hidden_sql = !bp_current_user_can( 'bp_moderate' ) ? "AND wb.public = 1" : '';365 $pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ) : '';366 367 407 $paged_blogs = $wpdb->get_results( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql} {$pag_sql}" ); 368 408 $total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql}" ); 369 409 … … 377 417 * 'bp_moderate' cap. 378 418 * 379 419 * @param string $letter. The letter you're looking for. 380 * @param int $limitOptional. The maximum number of items to return.420 * @param int $per_page Optional. The maximum number of items to return. 381 421 * Default: null (no limit). 382 422 * @param int $page Optional. The page of results to return. Default: 383 423 * null (no limit). 424 * @param bool $show_hidden Optional. Whether to search in private blogs. Default: 425 * FALSE. 384 426 * @return array Multidimensional results array, structured as follows: 385 427 * 'blogs' - Array of located blog objects. 386 428 * 'total' - A count of the total blogs matching the query. 387 429 */ 388 public static function get_by_letter( $letter, $limit = null, $page = null) {430 public static function get_by_letter($letter, $per_page = null, $page = null, $show_hidden = false) { 389 431 global $bp, $wpdb; 390 391 432 $letter = esc_sql( like_escape( $letter ) ); 392 393 433 $hidden_sql = ''; 394 if ( !bp_current_user_can( 'bp_moderate' ) ) 434 if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) { 395 435 $hidden_sql = "AND wb.public = 1"; 396 397 if ( $limit && $page ) 398 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ));399 436 } 437 if ($per_page && $page) { 438 $pag_sql = $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page)); 439 } 400 440 $paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND bm.meta_value LIKE '$letter%%' {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC{$pag_sql}" ); 401 441 $total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND bm.meta_value LIKE '$letter%%' {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC" ); 402 442 … … 488 528 489 529 return false; 490 530 } 491 } 531 } 532 No newline at end of file