Changeset 10521 for trunk/src/bp-members/bp-members-template.php
- Timestamp:
- 02/05/2016 05:15:55 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-members/bp-members-template.php
r10459 r10521 12 12 // Exit if accessed directly. 13 13 defined( 'ABSPATH' ) || exit; 14 15 require dirname( __FILE__ ) . '/classes/class-bp-core-members-template.php'; 14 16 15 17 /** … … 282 284 return apply_filters( 'bp_get_activate_slug', $slug ); 283 285 } 284 285 /**286 * The main member template loop class.287 *288 * Responsible for loading a group of members into a loop for display.289 */290 class BP_Core_Members_Template {291 292 /**293 * The loop iterator.294 *295 * @var int296 */297 public $current_member = -1;298 299 /**300 * The number of members returned by the paged query.301 *302 * @var int303 */304 public $member_count;305 306 /**307 * Array of members located by the query.308 *309 * @var array310 */311 public $members;312 313 /**314 * The member object currently being iterated on.315 *316 * @var object317 */318 public $member;319 320 /**321 * A flag for whether the loop is currently being iterated.322 *323 * @var bool324 */325 public $in_the_loop;326 327 /**328 * The type of member being requested. Used for ordering results.329 *330 * @var string331 */332 public $type;333 334 /**335 * The unique string used for pagination queries.336 *337 * @var string338 */339 public $pag_arg;340 341 /**342 * The page number being requested.343 *344 * @var string345 */346 public $pag_page;347 348 /**349 * The number of items being requested per page.350 *351 * @var string352 */353 public $pag_num;354 355 /**356 * An HTML string containing pagination links.357 *358 * @var string359 */360 public $pag_links;361 362 /**363 * The total number of members matching the query parameters.364 *365 * @var int366 */367 public $total_member_count;368 369 /**370 * Constructor method.371 *372 * @see BP_User_Query for an in-depth description of parameters.373 *374 * @param string $type Sort order.375 * @param int $page_number Page of results.376 * @param int $per_page Number of results per page.377 * @param int $max Max number of results to return.378 * @param int $user_id Limit to friends of a user.379 * @param string $search_terms Limit to users matching search terms.380 * @param array $include Limit results by these user IDs.381 * @param bool $populate_extras Fetch optional extras.382 * @param array $exclude Exclude these IDs from results.383 * @param array $meta_key Limit to users with a meta_key.384 * @param array $meta_value Limit to users with a meta_value (with meta_key).385 * @param string $page_arg Optional. The string used as a query parameter in pagination links.386 * Default: 'upage'.387 * @param array|string $member_type Array or comma-separated string of member types to limit results to.388 * @param array|string $member_type__in Array or comma-separated string of member types to limit results to.389 * @param array|string $member_type__not_in Array or comma-separated string of member types to exclude390 * from results.391 */392 function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value, $page_arg = 'upage', $member_type = '', $member_type__in = '', $member_type__not_in = '' ) {393 394 $this->pag_arg = sanitize_key( $page_arg );395 $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $page_number );396 $this->pag_num = bp_sanitize_pagination_arg( 'num', $per_page );397 $this->type = $type;398 399 if ( !empty( $_REQUEST['letter'] ) )400 $this->members = BP_Core_User::get_users_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page, $populate_extras, $exclude );401 else402 $this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'include' => $include, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras, 'exclude' => $exclude, 'meta_key' => $meta_key, 'meta_value' => $meta_value, 'member_type' => $member_type, 'member_type__in' => $member_type__in, 'member_type__not_in' => $member_type__not_in ) );403 404 if ( !$max || $max >= (int) $this->members['total'] )405 $this->total_member_count = (int) $this->members['total'];406 else407 $this->total_member_count = (int) $max;408 409 $this->members = $this->members['users'];410 411 if ( $max ) {412 if ( $max >= count( $this->members ) ) {413 $this->member_count = count( $this->members );414 } else {415 $this->member_count = (int) $max;416 }417 } else {418 $this->member_count = count( $this->members );419 }420 421 if ( (int) $this->total_member_count && (int) $this->pag_num ) {422 $pag_args = array(423 $this->pag_arg => '%#%',424 );425 426 if ( defined( 'DOING_AJAX' ) && true === (bool) DOING_AJAX ) {427 $base = remove_query_arg( 's', wp_get_referer() );428 } else {429 $base = '';430 }431 432 /**433 * Defaults to an empty array to make sure paginate_links()434 * won't add the $page_arg to the links which would break435 * pagination in case JavaScript is disabled.436 */437 $add_args = array();438 439 if ( ! empty( $search_terms ) ) {440 $query_arg = bp_core_get_component_search_query_arg( 'members' );441 $add_args[ $query_arg ] = urlencode( $search_terms );442 }443 444 $this->pag_links = paginate_links( array(445 'base' => add_query_arg( $pag_args, $base ),446 'format' => '',447 'total' => ceil( (int) $this->total_member_count / (int) $this->pag_num ),448 'current' => (int) $this->pag_page,449 'prev_text' => _x( '←', 'Member pagination previous text', 'buddypress' ),450 'next_text' => _x( '→', 'Member pagination next text', 'buddypress' ),451 'mid_size' => 1,452 'add_args' => $add_args,453 ) );454 }455 }456 457 /**458 * Whether there are members available in the loop.459 *460 * @see bp_has_members()461 *462 * @return bool True if there are items in the loop, otherwise false.463 */464 function has_members() {465 if ( $this->member_count )466 return true;467 468 return false;469 }470 471 /**472 * Set up the next member and iterate index.473 *474 * @return object The next member to iterate over.475 */476 function next_member() {477 $this->current_member++;478 $this->member = $this->members[$this->current_member];479 480 return $this->member;481 }482 483 /**484 * Rewind the members and reset member index.485 */486 function rewind_members() {487 $this->current_member = -1;488 if ( $this->member_count > 0 ) {489 $this->member = $this->members[0];490 }491 }492 493 /**494 * Whether there are members left in the loop to iterate over.495 *496 * This method is used by {@link bp_members()} as part of the while loop497 * that controls iteration inside the members loop, eg:498 * while ( bp_members() ) { ...499 *500 * @see bp_members()501 *502 * @return bool True if there are more members to show, otherwise false.503 */504 function members() {505 if ( $this->current_member + 1 < $this->member_count ) {506 return true;507 } elseif ( $this->current_member + 1 == $this->member_count ) {508 509 /**510 * Fires right before the rewinding of members listing.511 *512 * @since 1.5.0513 */514 do_action('member_loop_end');515 // Do some cleaning up after the loop.516 $this->rewind_members();517 }518 519 $this->in_the_loop = false;520 return false;521 }522 523 /**524 * Set up the current member inside the loop.525 *526 * Used by {@link bp_the_member()} to set up the current member data527 * while looping, so that template tags used during that iteration make528 * reference to the current member.529 *530 * @see bp_the_member()531 */532 function the_member() {533 534 $this->in_the_loop = true;535 $this->member = $this->next_member();536 537 // Loop has just started.538 if ( 0 == $this->current_member ) {539 540 /**541 * Fires if the current member is the first in the loop.542 *543 * @since 1.5.0544 */545 do_action( 'member_loop_start' );546 }547 548 }549 }550 551 /**552 * Rewind the members and reset member index.553 */554 function bp_rewind_members() {555 global $members_template;556 557 return $members_template->rewind_members();558 }559 286 560 287 /**
Note: See TracChangeset
for help on using the changeset viewer.