[ Index ]

PHP Cross Reference of BuddyPress

title

Body

[close]

/src/bp-groups/classes/ -> class-bp-groups-template.php (source)

   1  <?php
   2  /**
   3   * BuddyPress Groups Template loop class.
   4   *
   5   * @package BuddyPress
   6   * @since 1.2.0
   7   */
   8  
   9  // Exit if accessed directly.
  10  defined( 'ABSPATH' ) || exit;
  11  
  12  /**
  13   * The main Groups template loop class.
  14   *
  15   * Responsible for loading a group of groups into a loop for display.
  16   *
  17   * @since 1.2.0
  18   */
  19  class BP_Groups_Template {
  20  
  21      /**
  22       * The loop iterator.
  23       *
  24       * @var int
  25       * @since 1.2.0
  26       */
  27      public $current_group = -1;
  28  
  29      /**
  30       * The number of groups returned by the paged query.
  31       *
  32       * @var int
  33       * @since 1.2.0
  34       */
  35      public $group_count;
  36  
  37      /**
  38       * Array of groups located by the query.
  39       *
  40       * @var array
  41       * @since 1.2.0
  42       */
  43      public $groups;
  44  
  45      /**
  46       * The group object currently being iterated on.
  47       *
  48       * @var object
  49       * @since 1.2.0
  50       */
  51      public $group;
  52  
  53      /**
  54       * A flag for whether the loop is currently being iterated.
  55       *
  56       * @var bool
  57       * @since 1.2.0
  58       */
  59      public $in_the_loop;
  60  
  61      /**
  62       * The page number being requested.
  63       *
  64       * @var string
  65       * @since 1.2.0
  66       */
  67      public $pag_page;
  68  
  69      /**
  70       * The number of items being requested per page.
  71       *
  72       * @var string
  73       * @since 1.2.0
  74       */
  75      public $pag_num;
  76  
  77      /**
  78       * An HTML string containing pagination links.
  79       *
  80       * @var string
  81       * @since 1.2.0
  82       */
  83      public $pag_links;
  84  
  85      /**
  86       * The total number of groups matching the query parameters.
  87       *
  88       * @var int
  89       * @since 1.2.0
  90       */
  91      public $total_group_count;
  92  
  93      /**
  94       * Whether the template loop is for a single group page.
  95       *
  96       * @var bool
  97       * @since 1.2.0
  98       */
  99      public $single_group = false;
 100  
 101      /**
 102       * Field to sort by.
 103       *
 104       * @var string
 105       * @since 1.2.0
 106       */
 107      public $sort_by;
 108  
 109      /**
 110       * Sort order.
 111       *
 112       * @var string
 113       * @since 1.2.0
 114       */
 115      public $order;
 116  
 117      /**
 118       * Constructor method.
 119       *
 120       * @see BP_Groups_Group::get() for an in-depth description of arguments.
 121       *
 122       * @param array $args {
 123       *     Array of arguments. Accepts all arguments accepted by
 124       *     {@link BP_Groups_Group::get()}. In cases where the default
 125       *     values of the params differ, they have been discussed below.
 126       *     @type int $per_page Default: 20.
 127       *     @type int $page Default: 1.
 128       * }
 129       */
 130  	function __construct( $args = array() ){
 131  
 132          // Backward compatibility with old method of passing arguments.
 133          if ( ! is_array( $args ) || func_num_args() > 1 ) {
 134              _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__ ) );
 135  
 136              $old_args_keys = array(
 137                  0  => 'user_id',
 138                  1  => 'type',
 139                  2  => 'page',
 140                  3  => 'per_page',
 141                  4  => 'max',
 142                  5  => 'slug',
 143                  6  => 'search_terms',
 144                  7  => 'populate_extras',
 145                  8  => 'include',
 146                  9  => 'exclude',
 147                  10 => 'show_hidden',
 148                  11 => 'page_arg',
 149              );
 150  
 151              $args = bp_core_parse_args_array( $old_args_keys, func_get_args() );
 152          }
 153  
 154          $defaults = array(
 155              'page'               => 1,
 156              'per_page'           => 20,
 157              'page_arg'           => 'grpage',
 158              'max'                => false,
 159              'type'               => 'active',
 160              'order'              => 'DESC',
 161              'orderby'            => 'date_created',
 162              'show_hidden'        => false,
 163              'user_id'            => 0,
 164              'slug'               => false,
 165              'include'            => false,
 166              'exclude'            => false,
 167              'parent_id'          => null,
 168              'search_terms'       => '',
 169              'search_columns'     => array(),
 170              'group_type'         => '',
 171              'group_type__in'     => '',
 172              'group_type__not_in' => '',
 173              'meta_query'         => false,
 174              'update_meta_cache'  => true,
 175              'update_admin_cache' => false,
 176          );
 177  
 178          $r = bp_parse_args( $args, $defaults, 'groups_template' );
 179          extract( $r );
 180  
 181          $this->pag_arg  = sanitize_key( $r['page_arg'] );
 182          $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page']     );
 183          $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $r['per_page'] );
 184  
 185          if ( bp_current_user_can( 'bp_moderate' ) || ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) ) {
 186              $show_hidden = true;
 187          }
 188  
 189          if ( 'invites' == $type ) {
 190              $this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page, $exclude );
 191          } elseif ( 'single-group' == $type ) {
 192              $this->single_group = true;
 193  
 194              if ( groups_get_current_group() ) {
 195                  $group = groups_get_current_group();
 196  
 197              } else {
 198                  $group = groups_get_group( BP_Groups_Group::get_id_from_slug( $r['slug'] ) );
 199              }
 200  
 201              // Backwards compatibility - the 'group_id' variable is not part of the
 202              // BP_Groups_Group object, but we add it here for devs doing checks against it
 203              //
 204              // @see https://buddypress.trac.wordpress.org/changeset/3540
 205              //
 206              // this is subject to removal in a future release; devs should check against
 207              // $group->id instead.
 208              $group->group_id = $group->id;
 209  
 210              $this->groups = array( $group );
 211  
 212          } else {
 213              $this->groups = groups_get_groups( array(
 214                  'type'               => $type,
 215                  'order'              => $order,
 216                  'orderby'            => $orderby,
 217                  'per_page'           => $this->pag_num,
 218                  'page'               => $this->pag_page,
 219                  'user_id'            => $user_id,
 220                  'search_terms'       => $search_terms,
 221                  'search_columns'     => $search_columns,
 222                  'meta_query'         => $meta_query,
 223                  'group_type'         => $group_type,
 224                  'group_type__in'     => $group_type__in,
 225                  'group_type__not_in' => $group_type__not_in,
 226                  'include'            => $include,
 227                  'exclude'            => $exclude,
 228                  'parent_id'          => $parent_id,
 229                  'update_meta_cache'  => $update_meta_cache,
 230                  'update_admin_cache' => $update_admin_cache,
 231                  'show_hidden'        => $show_hidden,
 232              ) );
 233          }
 234  
 235          if ( 'invites' == $type ) {
 236              $this->total_group_count = (int) $this->groups['total'];
 237              $this->group_count       = (int) $this->groups['total'];
 238              $this->groups            = $this->groups['groups'];
 239          } elseif ( 'single-group' == $type ) {
 240              if ( empty( $group->id ) ) {
 241                  $this->total_group_count = 0;
 242                  $this->group_count       = 0;
 243              } else {
 244                  $this->total_group_count = 1;
 245                  $this->group_count       = 1;
 246              }
 247          } else {
 248              if ( empty( $max ) || $max >= (int) $this->groups['total'] ) {
 249                  $this->total_group_count = (int) $this->groups['total'];
 250              } else {
 251                  $this->total_group_count = (int) $max;
 252              }
 253  
 254              $this->groups = $this->groups['groups'];
 255  
 256              if ( !empty( $max ) ) {
 257                  if ( $max >= count( $this->groups ) ) {
 258                      $this->group_count = count( $this->groups );
 259                  } else {
 260                      $this->group_count = (int) $max;
 261                  }
 262              } else {
 263                  $this->group_count = count( $this->groups );
 264              }
 265          }
 266  
 267          // Build pagination links.
 268          if ( (int) $this->total_group_count && (int) $this->pag_num ) {
 269              $pag_args = array(
 270                  $this->pag_arg => '%#%'
 271              );
 272  
 273              if ( defined( 'DOING_AJAX' ) && true === (bool) DOING_AJAX ) {
 274                  $base = remove_query_arg( 's', wp_get_referer() );
 275              } else {
 276                  $base = '';
 277              }
 278  
 279              $add_args = array(
 280                  'num'     => $this->pag_num,
 281                  'sortby'  => $this->sort_by,
 282                  'order'   => $this->order,
 283              );
 284  
 285              if ( ! empty( $search_terms ) ) {
 286                  $query_arg = bp_core_get_component_search_query_arg( 'groups' );
 287                  $add_args[ $query_arg ] = urlencode( $search_terms );
 288              }
 289  
 290              $this->pag_links = paginate_links( array(
 291                  'base'      => add_query_arg( $pag_args, $base ),
 292                  'format'    => '',
 293                  'total'     => ceil( (int) $this->total_group_count / (int) $this->pag_num ),
 294                  'current'   => $this->pag_page,
 295                  'prev_text' => _x( '&larr;', 'Group pagination previous text', 'buddypress' ),
 296                  'next_text' => _x( '&rarr;', 'Group pagination next text', 'buddypress' ),
 297                  'mid_size'  => 1,
 298                  'add_args'  => $add_args,
 299              ) );
 300          }
 301      }
 302  
 303      /**
 304       * Whether there are groups available in the loop.
 305       *
 306       * @since 1.2.0
 307       *
 308       * @see bp_has_groups()
 309       *
 310       * @return bool True if there are items in the loop, otherwise false.
 311       */
 312  	function has_groups() {
 313          if ( $this->group_count ) {
 314              return true;
 315          }
 316  
 317          return false;
 318      }
 319  
 320      /**
 321       * Set up the next group and iterate index.
 322       *
 323       * @since 1.2.0
 324       *
 325       * @return object The next group to iterate over.
 326       */
 327  	function next_group() {
 328          $this->current_group++;
 329          $this->group = $this->groups[$this->current_group];
 330  
 331          return $this->group;
 332      }
 333  
 334      /**
 335       * Rewind the groups and reset member index.
 336       *
 337       * @since 1.2.0
 338       */
 339  	function rewind_groups() {
 340          $this->current_group = -1;
 341          if ( $this->group_count > 0 ) {
 342              $this->group = $this->groups[0];
 343          }
 344      }
 345  
 346      /**
 347       * Whether there are groups left in the loop to iterate over.
 348       *
 349       * This method is used by {@link bp_groups()} as part of the while loop
 350       * that controls iteration inside the groups loop, eg:
 351       *     while ( bp_groups() ) { ...
 352       *
 353       * @since 1.2.0
 354       *
 355       * @see bp_groups()
 356       *
 357       * @return bool True if there are more groups to show, otherwise false.
 358       */
 359  	function groups() {
 360          if ( $this->current_group + 1 < $this->group_count ) {
 361              return true;
 362          } elseif ( $this->current_group + 1 == $this->group_count ) {
 363  
 364              /**
 365               * Fires right before the rewinding of groups list.
 366               *
 367               * @since 1.5.0
 368               */
 369              do_action('group_loop_end');
 370              // Do some cleaning up after the loop.
 371              $this->rewind_groups();
 372          }
 373  
 374          $this->in_the_loop = false;
 375          return false;
 376      }
 377  
 378      /**
 379       * Set up the current group inside the loop.
 380       *
 381       * Used by {@link bp_the_group()} to set up the current group data
 382       * while looping, so that template tags used during that iteration make
 383       * reference to the current member.
 384       *
 385       * @since 1.2.0
 386       *
 387       * @see bp_the_group()
 388       */
 389  	function the_group() {
 390          $this->in_the_loop = true;
 391          $this->group       = $this->next_group();
 392  
 393          if ( 0 == $this->current_group ) {
 394  
 395              /**
 396               * Fires if the current group item is the first in the loop.
 397               *
 398               * @since 1.1.0
 399               */
 400              do_action( 'group_loop_start' );
 401          }
 402      }
 403  }


Generated: Mon Jul 22 01:01:43 2019 Cross-referenced by PHPXref 0.7.1