Changeset 10516 for trunk/src/bp-activity/bp-activity-template.php
- Timestamp:
- 02/05/2016 03:54:56 AM (10 years ago)
- File:
-
- 1 edited
-
trunk/src/bp-activity/bp-activity-template.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-activity/bp-activity-template.php
r10487 r10516 10 10 // Exit if accessed directly. 11 11 defined( 'ABSPATH' ) || exit; 12 13 require dirname( __FILE__ ) . '/classes/class-bp-activity-template.php'; 12 14 13 15 /** … … 106 108 return apply_filters( 'bp_get_activity_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_activity_root_slug() ) ); 107 109 } 108 109 /**110 * The main activity template loop class.111 *112 * This is responsible for loading a group of activity items and displaying them.113 *114 * @since 1.0.0115 */116 class BP_Activity_Template {117 118 /**119 * The loop iterator.120 *121 * @since 1.0.0122 * @var int123 */124 public $current_activity = -1;125 126 /**127 * The activity count.128 *129 * @since 1.0.0130 * @var int131 */132 public $activity_count;133 134 /**135 * The total activity count.136 *137 * @since 1.0.0138 * @var int139 */140 public $total_activity_count;141 142 /**143 * Array of activities located by the query.144 *145 * @since 1.0.0146 * @var array147 */148 public $activities;149 150 /**151 * The activity object currently being iterated on.152 *153 * @since 1.0.0154 * @var object155 */156 public $activity;157 158 /**159 * A flag for whether the loop is currently being iterated.160 *161 * @since 1.0.0162 * @var bool163 */164 public $in_the_loop;165 166 /**167 * URL parameter key for activity pagination. Default: 'acpage'.168 *169 * @since 2.1.0170 * @var string171 */172 public $pag_arg;173 174 /**175 * The page number being requested.176 *177 * @since 1.0.0178 * @var int179 */180 public $pag_page;181 182 /**183 * The number of items being requested per page.184 *185 * @since 1.0.0186 * @var int187 */188 public $pag_num;189 190 /**191 * An HTML string containing pagination links.192 *193 * @since 1.0.0194 * @var string195 */196 public $pag_links;197 198 /**199 * The displayed user's full name.200 *201 * @since 1.0.0202 * @var string203 */204 public $full_name;205 206 /**207 * Constructor method.208 *209 * The arguments passed to this class constructor are of the same210 * format as {@link BP_Activity_Activity::get()}.211 *212 * @since 1.5.0213 *214 * @see BP_Activity_Activity::get() for a description of the argument215 * structure, as well as default values.216 *217 * @param array $args {218 * Array of arguments. Supports all arguments from219 * BP_Activity_Activity::get(), as well as 'page_arg' and220 * 'include'. Default values for 'per_page' and 'display_comments'221 * differ from the originating function, and are described below.222 * @type string $page_arg The string used as a query parameter in223 * pagination links. Default: 'acpage'.224 * @type array|bool $include Pass an array of activity IDs to225 * retrieve only those items, or false to noop the 'include'226 * parameter. 'include' differs from 'in' in that 'in' forms227 * an IN clause that works in conjunction with other filters228 * passed to the function, while 'include' is interpreted as229 * an exact list of items to retrieve, which skips all other230 * filter-related parameters. Default: false.231 * @type int|bool $per_page Default: 20.232 * @type string|bool $display_comments Default: 'threaded'.233 * }234 */235 public function __construct( $args ) {236 $bp = buddypress();237 238 // Backward compatibility with old method of passing arguments.239 if ( !is_array( $args ) || func_num_args() > 1 ) {240 _deprecated_argument( __METHOD__, '1.6', 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__ ) );241 242 $old_args_keys = array(243 0 => 'page',244 1 => 'per_page',245 2 => 'max',246 3 => 'include',247 4 => 'sort',248 5 => 'filter',249 6 => 'search_terms',250 7 => 'display_comments',251 8 => 'show_hidden',252 9 => 'exclude',253 10 => 'in',254 11 => 'spam',255 12 => 'page_arg'256 );257 258 $func_args = func_get_args();259 $args = bp_core_parse_args_array( $old_args_keys, $func_args );260 }261 262 $defaults = array(263 'page' => 1,264 'per_page' => 20,265 'page_arg' => 'acpage',266 'max' => false,267 'fields' => 'all',268 'count_total' => false,269 'sort' => false,270 'include' => false,271 'exclude' => false,272 'in' => false,273 'filter' => false,274 'scope' => false,275 'search_terms' => false,276 'meta_query' => false,277 'date_query' => false,278 'filter_query' => false,279 'display_comments' => 'threaded',280 'show_hidden' => false,281 'spam' => 'ham_only',282 'update_meta_cache' => true,283 );284 $r = wp_parse_args( $args, $defaults );285 extract( $r );286 287 $this->pag_arg = sanitize_key( $r['page_arg'] );288 $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page'] );289 $this->pag_num = bp_sanitize_pagination_arg( 'num', $r['per_page'] );290 291 // Check if blog/forum replies are disabled.292 $this->disable_blogforum_replies = (bool) bp_core_get_root_option( 'bp-disable-blogforum-comments' );293 294 // Get an array of the logged in user's favorite activities.295 $this->my_favs = maybe_unserialize( bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true ) );296 297 // Fetch specific activity items based on ID's.298 if ( !empty( $include ) ) {299 $this->activities = bp_activity_get_specific( array(300 'activity_ids' => explode( ',', $include ),301 'max' => $max,302 'count_total' => $count_total,303 'page' => $this->pag_page,304 'per_page' => $this->pag_num,305 'sort' => $sort,306 'display_comments' => $display_comments,307 'show_hidden' => $show_hidden,308 'spam' => $spam,309 'update_meta_cache' => $update_meta_cache,310 ) );311 312 // Fetch all activity items.313 } else {314 $this->activities = bp_activity_get( array(315 'display_comments' => $display_comments,316 'max' => $max,317 'count_total' => $count_total,318 'per_page' => $this->pag_num,319 'page' => $this->pag_page,320 'sort' => $sort,321 'search_terms' => $search_terms,322 'meta_query' => $meta_query,323 'date_query' => $date_query,324 'filter_query' => $filter_query,325 'filter' => $filter,326 'scope' => $scope,327 'show_hidden' => $show_hidden,328 'exclude' => $exclude,329 'in' => $in,330 'spam' => $spam,331 'update_meta_cache' => $update_meta_cache,332 ) );333 }334 335 // The total_activity_count property will be set only if a336 // 'count_total' query has taken place.337 if ( ! is_null( $this->activities['total'] ) ) {338 if ( ! $max || $max >= (int) $this->activities['total'] ) {339 $this->total_activity_count = (int) $this->activities['total'];340 } else {341 $this->total_activity_count = (int) $max;342 }343 }344 345 $this->has_more_items = $this->activities['has_more_items'];346 347 $this->activities = $this->activities['activities'];348 349 if ( $max ) {350 if ( $max >= count($this->activities) ) {351 $this->activity_count = count( $this->activities );352 } else {353 $this->activity_count = (int) $max;354 }355 } else {356 $this->activity_count = count( $this->activities );357 }358 359 $this->full_name = bp_get_displayed_user_fullname();360 361 // Fetch parent content for activity comments so we do not have to query in the loop.362 foreach ( (array) $this->activities as $activity ) {363 if ( 'activity_comment' != $activity->type ) {364 continue;365 }366 367 $parent_ids[] = $activity->item_id;368 }369 370 if ( !empty( $parent_ids ) ) {371 $activity_parents = bp_activity_get_specific( array( 'activity_ids' => $parent_ids ) );372 }373 374 if ( !empty( $activity_parents['activities'] ) ) {375 foreach( $activity_parents['activities'] as $parent ) {376 $this->activity_parents[$parent->id] = $parent;377 }378 379 unset( $activity_parents );380 }381 382 if ( (int) $this->total_activity_count && (int) $this->pag_num ) {383 $this->pag_links = paginate_links( array(384 'base' => add_query_arg( $this->pag_arg, '%#%' ),385 'format' => '',386 'total' => ceil( (int) $this->total_activity_count / (int) $this->pag_num ),387 'current' => (int) $this->pag_page,388 'prev_text' => _x( '←', 'Activity pagination previous text', 'buddypress' ),389 'next_text' => _x( '→', 'Activity pagination next text', 'buddypress' ),390 'mid_size' => 1,391 'add_args' => array(),392 ) );393 }394 }395 396 /**397 * Whether there are activity items available in the loop.398 *399 * @since 1.0.0400 *401 * @see bp_has_activities()402 *403 * @return bool True if there are items in the loop, otherwise false.404 */405 function has_activities() {406 if ( $this->activity_count ) {407 return true;408 }409 410 return false;411 }412 413 /**414 * Set up the next activity item and iterate index.415 *416 * @since 1.0.0417 *418 * @return object The next activity item to iterate over.419 */420 public function next_activity() {421 $this->current_activity++;422 $this->activity = $this->activities[ $this->current_activity ];423 424 return $this->activity;425 }426 427 /**428 * Rewind the posts and reset post index.429 *430 * @since 1.0.0431 */432 public function rewind_activities() {433 $this->current_activity = -1;434 if ( $this->activity_count > 0 ) {435 $this->activity = $this->activities[0];436 }437 }438 439 /**440 * Whether there are activity items left in the loop to iterate over.441 *442 * This method is used by {@link bp_activities()} as part of the while loop443 * that controls iteration inside the activities loop, eg:444 * while ( bp_activities() ) { ...445 *446 * @since 1.0.0447 *448 * @see bp_activities()449 *450 * @return bool True if there are more activity items to show,451 * otherwise false.452 */453 public function user_activities() {454 if ( ( $this->current_activity + 1 ) < $this->activity_count ) {455 return true;456 } elseif ( ( $this->current_activity + 1 ) == $this->activity_count ) {457 458 /**459 * Fires right before the rewinding of activity posts.460 *461 * @since 1.1.0462 */463 do_action( 'activity_loop_end' );464 465 // Do some cleaning up after the loop.466 $this->rewind_activities();467 }468 469 $this->in_the_loop = false;470 471 return false;472 }473 474 /**475 * Set up the current activity item inside the loop.476 *477 * Used by {@link bp_the_activity()} to set up the current activity item478 * data while looping, so that template tags used during that iteration479 * make reference to the current activity item.480 *481 * @since 1.0.0482 *483 * @see bp_the_activity()484 */485 public function the_activity() {486 487 $this->in_the_loop = true;488 $this->activity = $this->next_activity();489 490 if ( is_array( $this->activity ) ) {491 $this->activity = (object) $this->activity;492 }493 494 // Loop has just started.495 if ( $this->current_activity == 0 ) {496 497 /**498 * Fires if the current activity item is the first in the activity loop.499 *500 * @since 1.1.0501 */502 do_action('activity_loop_start');503 }504 }505 }506 110 507 111 /**
Note: See TracChangeset
for help on using the changeset viewer.