[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Activity Template. 4 * 5 * @package BuddyPress 6 * @subpackage ActivityTemplate 7 * @since 1.5.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * The main activity template loop class. 15 * 16 * This is responsible for loading a group of activity items and displaying them. 17 * 18 * @since 1.0.0 19 */ 20 class BP_Activity_Template { 21 22 /** 23 * The loop iterator. 24 * 25 * @since 1.0.0 26 * @var int 27 */ 28 public $current_activity = -1; 29 30 /** 31 * The activity count. 32 * 33 * @since 1.0.0 34 * @var int 35 */ 36 public $activity_count; 37 38 /** 39 * The total activity count. 40 * 41 * @since 1.0.0 42 * @var int 43 */ 44 public $total_activity_count; 45 46 /** 47 * Array of activities located by the query. 48 * 49 * @since 1.0.0 50 * @var array 51 */ 52 public $activities; 53 54 /** 55 * The activity object currently being iterated on. 56 * 57 * @since 1.0.0 58 * @var object 59 */ 60 public $activity; 61 62 /** 63 * A flag for whether the loop is currently being iterated. 64 * 65 * @since 1.0.0 66 * @var bool 67 */ 68 public $in_the_loop; 69 70 /** 71 * URL parameter key for activity pagination. Default: 'acpage'. 72 * 73 * @since 2.1.0 74 * @var string 75 */ 76 public $pag_arg; 77 78 /** 79 * The page number being requested. 80 * 81 * @since 1.0.0 82 * @var int 83 */ 84 public $pag_page; 85 86 /** 87 * The number of items being requested per page. 88 * 89 * @since 1.0.0 90 * @var int 91 */ 92 public $pag_num; 93 94 /** 95 * An HTML string containing pagination links. 96 * 97 * @since 1.0.0 98 * @var string 99 */ 100 public $pag_links; 101 102 /** 103 * The displayed user's full name. 104 * 105 * @since 1.0.0 106 * @var string 107 */ 108 public $full_name; 109 110 /** 111 * Constructor method. 112 * 113 * The arguments passed to this class constructor are of the same 114 * format as {@link BP_Activity_Activity::get()}. 115 * 116 * @since 1.5.0 117 * 118 * @see BP_Activity_Activity::get() for a description of the argument 119 * structure, as well as default values. 120 * 121 * @param array $args { 122 * Array of arguments. Supports all arguments from 123 * BP_Activity_Activity::get(), as well as 'page_arg' and 124 * 'include'. Default values for 'per_page' and 'display_comments' 125 * differ from the originating function, and are described below. 126 * @type string $page_arg The string used as a query parameter in 127 * pagination links. Default: 'acpage'. 128 * @type array|bool $include Pass an array of activity IDs to 129 * retrieve only those items, or false to noop the 'include' 130 * parameter. 'include' differs from 'in' in that 'in' forms 131 * an IN clause that works in conjunction with other filters 132 * passed to the function, while 'include' is interpreted as 133 * an exact list of items to retrieve, which skips all other 134 * filter-related parameters. Default: false. 135 * @type int|bool $per_page Default: 20. 136 * @type string|bool $display_comments Default: 'threaded'. 137 * } 138 */ 139 public function __construct( $args ) { 140 $bp = buddypress(); 141 142 $function_args = func_get_args(); 143 144 // Backward compatibility with old method of passing arguments. 145 if ( !is_array( $args ) || count( $function_args ) > 1 ) { 146 _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__ ) ); 147 148 $old_args_keys = array( 149 0 => 'page', 150 1 => 'per_page', 151 2 => 'max', 152 3 => 'include', 153 4 => 'sort', 154 5 => 'filter', 155 6 => 'search_terms', 156 7 => 'display_comments', 157 8 => 'show_hidden', 158 9 => 'exclude', 159 10 => 'in', 160 11 => 'spam', 161 12 => 'page_arg' 162 ); 163 164 $args = bp_core_parse_args_array( $old_args_keys, $function_args ); 165 } 166 167 $defaults = array( 168 'page' => 1, 169 'per_page' => 20, 170 'page_arg' => 'acpage', 171 'max' => false, 172 'fields' => 'all', 173 'count_total' => false, 174 'sort' => false, 175 'include' => false, 176 'exclude' => false, 177 'in' => false, 178 'filter' => false, 179 'scope' => false, 180 'search_terms' => false, 181 'meta_query' => false, 182 'date_query' => false, 183 'filter_query' => false, 184 'display_comments' => 'threaded', 185 'show_hidden' => false, 186 'spam' => 'ham_only', 187 'update_meta_cache' => true, 188 ); 189 190 $r = bp_parse_args( 191 $args, 192 $defaults 193 ); 194 195 extract( $r ); 196 197 $this->pag_arg = sanitize_key( $r['page_arg'] ); 198 $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page'] ); 199 $this->pag_num = bp_sanitize_pagination_arg( 'num', $r['per_page'] ); 200 201 // Check if post/comment replies are disabled. 202 $this->disable_blogforum_replies = (bool) bp_core_get_root_option( 'bp-disable-blogforum-comments' ); 203 204 // Get an array of the logged in user's favorite activities. 205 $this->my_favs = bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true ); 206 207 // Fetch specific activity items based on ID's. 208 if ( !empty( $include ) ) { 209 $this->activities = bp_activity_get_specific( array( 210 'activity_ids' => explode( ',', $include ), 211 'max' => $max, 212 'count_total' => $count_total, 213 'page' => $this->pag_page, 214 'per_page' => $this->pag_num, 215 'sort' => $sort, 216 'display_comments' => $display_comments, 217 'show_hidden' => $show_hidden, 218 'spam' => $spam, 219 'update_meta_cache' => $update_meta_cache, 220 ) ); 221 222 // Fetch all activity items. 223 } else { 224 $this->activities = bp_activity_get( array( 225 'display_comments' => $display_comments, 226 'max' => $max, 227 'count_total' => $count_total, 228 'per_page' => $this->pag_num, 229 'page' => $this->pag_page, 230 'sort' => $sort, 231 'search_terms' => $search_terms, 232 'meta_query' => $meta_query, 233 'date_query' => $date_query, 234 'filter_query' => $filter_query, 235 'filter' => $filter, 236 'scope' => $scope, 237 'show_hidden' => $show_hidden, 238 'exclude' => $exclude, 239 'in' => $in, 240 'spam' => $spam, 241 'update_meta_cache' => $update_meta_cache, 242 ) ); 243 } 244 245 // The total_activity_count property will be set only if a 246 // 'count_total' query has taken place. 247 if ( ! is_null( $this->activities['total'] ) ) { 248 if ( ! $max || $max >= (int) $this->activities['total'] ) { 249 $this->total_activity_count = (int) $this->activities['total']; 250 } else { 251 $this->total_activity_count = (int) $max; 252 } 253 } 254 255 $this->has_more_items = $this->activities['has_more_items']; 256 257 $this->activities = $this->activities['activities']; 258 259 if ( $max ) { 260 if ( $max >= count($this->activities) ) { 261 $this->activity_count = count( $this->activities ); 262 } else { 263 $this->activity_count = (int) $max; 264 } 265 } else { 266 $this->activity_count = count( $this->activities ); 267 } 268 269 $this->full_name = bp_get_displayed_user_fullname(); 270 271 // Fetch parent content for activity comments so we do not have to query in the loop. 272 foreach ( (array) $this->activities as $activity ) { 273 if ( 'activity_comment' != $activity->type ) { 274 continue; 275 } 276 277 $parent_ids[] = $activity->item_id; 278 } 279 280 if ( !empty( $parent_ids ) ) { 281 $activity_parents = bp_activity_get_specific( array( 'activity_ids' => $parent_ids ) ); 282 } 283 284 if ( !empty( $activity_parents['activities'] ) ) { 285 foreach( $activity_parents['activities'] as $parent ) { 286 $this->activity_parents[$parent->id] = $parent; 287 } 288 289 unset( $activity_parents ); 290 } 291 292 if ( (int) $this->total_activity_count && (int) $this->pag_num ) { 293 $this->pag_links = paginate_links( array( 294 'base' => add_query_arg( $this->pag_arg, '%#%' ), 295 'format' => '', 296 'total' => ceil( (int) $this->total_activity_count / (int) $this->pag_num ), 297 'current' => (int) $this->pag_page, 298 'prev_text' => _x( '←', 'Activity pagination previous text', 'buddypress' ), 299 'next_text' => _x( '→', 'Activity pagination next text', 'buddypress' ), 300 'mid_size' => 1, 301 'add_args' => array(), 302 ) ); 303 } 304 } 305 306 /** 307 * Whether there are activity items available in the loop. 308 * 309 * @since 1.0.0 310 * 311 * @see bp_has_activities() 312 * 313 * @return bool True if there are items in the loop, otherwise false. 314 */ 315 function has_activities() { 316 if ( $this->activity_count ) { 317 return true; 318 } 319 320 return false; 321 } 322 323 /** 324 * Set up the next activity item and iterate index. 325 * 326 * @since 1.0.0 327 * 328 * @return object The next activity item to iterate over. 329 */ 330 public function next_activity() { 331 $this->current_activity++; 332 $this->activity = $this->activities[ $this->current_activity ]; 333 334 return $this->activity; 335 } 336 337 /** 338 * Rewind the posts and reset post index. 339 * 340 * @since 1.0.0 341 */ 342 public function rewind_activities() { 343 $this->current_activity = -1; 344 if ( $this->activity_count > 0 ) { 345 $this->activity = $this->activities[0]; 346 } 347 } 348 349 /** 350 * Whether there are activity items left in the loop to iterate over. 351 * 352 * This method is used by {@link bp_activities()} as part of the while loop 353 * that controls iteration inside the activities loop, eg: 354 * while ( bp_activities() ) { ... 355 * 356 * @since 1.0.0 357 * 358 * @see bp_activities() 359 * 360 * @return bool True if there are more activity items to show, 361 * otherwise false. 362 */ 363 public function user_activities() { 364 if ( ( $this->current_activity + 1 ) < $this->activity_count ) { 365 return true; 366 } elseif ( ( $this->current_activity + 1 ) == $this->activity_count ) { 367 368 /** 369 * Fires right before the rewinding of activity posts. 370 * 371 * @since 1.1.0 372 */ 373 do_action( 'activity_loop_end' ); 374 375 // Do some cleaning up after the loop. 376 $this->rewind_activities(); 377 } 378 379 $this->in_the_loop = false; 380 381 return false; 382 } 383 384 /** 385 * Set up the current activity item inside the loop. 386 * 387 * Used by {@link bp_the_activity()} to set up the current activity item 388 * data while looping, so that template tags used during that iteration 389 * make reference to the current activity item. 390 * 391 * @since 1.0.0 392 * 393 * @see bp_the_activity() 394 */ 395 public function the_activity() { 396 397 $this->in_the_loop = true; 398 $this->activity = $this->next_activity(); 399 400 if ( is_array( $this->activity ) ) { 401 $this->activity = (object) $this->activity; 402 } 403 404 // Loop has just started. 405 if ( $this->current_activity == 0 ) { 406 407 /** 408 * Fires if the current activity item is the first in the activity loop. 409 * 410 * @since 1.1.0 411 */ 412 do_action('activity_loop_start'); 413 } 414 } 415 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Oct 9 01:00:59 2024 | Cross-referenced by PHPXref 0.7.1 |