BP_XProfile_Data_Template
The main profile template loop class.
Description Description
This is responsible for loading profile field, group, and data and displaying it.
Source Source
File: bp-xprofile/classes/class-bp-xprofile-data-template.php
class BP_XProfile_Data_Template {
/**
* The loop iterator.
*
* @since 1.5.0
* @var int
*/
public $current_group = -1;
/**
* The number of groups returned by the paged query.
*
* @since 1.5.0
* @var int
*/
public $group_count;
/**
* Array of groups located by the query.
*
* @since 1.5.0
* @var array
*/
public $groups;
/**
* The group object currently being iterated on.
*
* @since 1.5.0
* @var object
*/
public $group;
/**
* The current field.
*
* @since 1.5.0
* @var int
*/
public $current_field = -1;
/**
* The field count.
*
* @since 1.5.0
* @var int
*/
public $field_count;
/**
* Field has data.
*
* @since 1.5.0
* @var bool
*/
public $field_has_data;
/**
* The field.
*
* @since 1.5.0
* @var int
*/
public $field;
/**
* A flag for whether the loop is currently being iterated.
*
* @since 1.5.0
* @var bool
*/
public $in_the_loop;
/**
* The user ID.
*
* @since 1.5.0
* @var int
*/
public $user_id;
/**
* Get activity items, as specified by parameters.
*
* @see BP_XProfile_Group::get() for more details about parameters.
*
* @since 1.5.0
* @since 2.4.0 Introduced `$member_type` argument.
*
* @param array|string $args {
* An array of arguments. All items are optional.
*
* @type int $user_id Fetch field data for this user ID.
* @type string|array $member_type Limit results to those matching member type(s).
* @type int $profile_group_id Field group to fetch fields & data for.
* @type int|bool $hide_empty_groups Should empty field groups be skipped.
* @type int|bool $fetch_fields Fetch fields for field group.
* @type int|bool $fetch_field_data Fetch field data for fields in group.
* @type array $exclude_groups Exclude these field groups.
* @type array $exclude_fields Exclude these fields.
* @type int|bool $hide_empty_fields Should empty fields be skipped.
* @type int|bool $fetch_visibility_level Fetch visibility levels.
* @type int|bool $update_meta_cache Should metadata cache be updated.
* }
*/
public function __construct( $args = '' ) {
$function_args = func_get_args();
// Backward compatibility with old method of passing arguments.
if ( ! is_array( $args ) || count( $function_args ) > 1 ) {
_deprecated_argument( __METHOD__, '2.3.0', 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__ ) );
$old_args_keys = array(
0 => 'user_id',
1 => 'profile_group_id',
2 => 'hide_empty_groups',
3 => 'fetch_fields',
4 => 'fetch_field_data',
5 => 'exclude_groups',
6 => 'exclude_fields',
7 => 'hide_empty_fields',
8 => 'fetch_visibility_level',
9 => 'update_meta_cache'
);
$args = bp_core_parse_args_array( $old_args_keys, $function_args );
}
$r = wp_parse_args( $args, array(
'profile_group_id' => false,
'user_id' => false,
'member_type' => 'any',
'hide_empty_groups' => false,
'hide_empty_fields' => false,
'fetch_fields' => false,
'fetch_field_data' => false,
'fetch_visibility_level' => false,
'exclude_groups' => false,
'exclude_fields' => false,
'update_meta_cache' => true
) );
$this->groups = bp_xprofile_get_groups( $r );
$this->group_count = count( $this->groups );
$this->user_id = $r['user_id'];
}
/**
* Whether or not the loop has field groups.
*
* @since 1.0.0
*
* @return bool
*/
public function has_groups() {
if ( ! empty( $this->group_count ) ) {
return true;
}
return false;
}
/**
* Increments to the next group of fields.
*
* @since 1.0.0
*
* @return object
*/
public function next_group() {
$this->current_group++;
$this->group = $this->groups[ $this->current_group ];
$this->field_count = 0;
if ( ! empty( $this->group->fields ) ) {
/**
* Filters the group fields for the next_group method.
*
* @since 1.1.0
*
* @param array $fields Array of fields for the group.
* @param int $id ID of the field group.
*/
$this->group->fields = apply_filters( 'xprofile_group_fields', $this->group->fields, $this->group->id );
$this->field_count = count( $this->group->fields );
}
return $this->group;
}
/**
* Rewinds to the start of the groups list.
*
* @since 1.0.0
*/
public function rewind_groups() {
$this->current_group = -1;
if ( $this->group_count > 0 ) {
$this->group = $this->groups[0];
}
}
/**
* Kicks off the profile groups.
*
* @since 1.0.0
*
* @return bool
*/
public function profile_groups() {
if ( $this->current_group + 1 < $this->group_count ) {
return true;
} elseif ( $this->current_group + 1 == $this->group_count ) {
/**
* Fires right before the rewinding of profile groups.
*
* @since 1.1.0
*/
do_action( 'xprofile_template_loop_end' );
// Do some cleaning up after the loop.
$this->rewind_groups();
}
$this->in_the_loop = false;
return false;
}
/**
* Sets up the profile group.
*
* @since 1.0.0
*/
public function the_profile_group() {
global $group;
$this->in_the_loop = true;
$group = $this->next_group();
// Loop has just started.
if ( 0 === $this->current_group ) {
/**
* Fires if the current group is the first in the loop.
*
* @since 1.1.0
*/
do_action( 'xprofile_template_loop_start' );
}
}
/** Fields ****************************************************************/
/**
* Increments to the next field.
*
* @since 1.0.0
*
* @return int
*/
public function next_field() {
$this->current_field++;
$this->field = $this->group->fields[ $this->current_field ];
return $this->field;
}
/**
* Rewinds to the start of the fields.
*
* @since 1.0.0
*/
public function rewind_fields() {
$this->current_field = -1;
if ( $this->field_count > 0 ) {
$this->field = $this->group->fields[0];
}
}
/**
* Whether or not the loop has fields.
*
* @since 1.0.0
*
* @return bool
*/
public function has_fields() {
$has_data = false;
for ( $i = 0, $count = count( $this->group->fields ); $i < $count; ++$i ) {
$field = &$this->group->fields[ $i ];
if ( ! empty( $field->data ) && ( $field->data->value != null ) ) {
$has_data = true;
}
}
return $has_data;
}
/**
* Kick off the profile fields.
*
* @since 1.0.0
*
* @return bool
*/
public function profile_fields() {
if ( $this->current_field + 1 < $this->field_count ) {
return true;
} elseif ( $this->current_field + 1 == $this->field_count ) {
// Do some cleaning up after the loop.
$this->rewind_fields();
}
return false;
}
/**
* Set up the profile fields.
*
* @since 1.0.0
*/
public function the_profile_field() {
global $field;
$field = $this->next_field();
// Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731.
if ( ! empty( $field->data ) && ( ! empty( $field->data->value ) || ( '0' === $field->data->value ) ) ) {
$value = maybe_unserialize( $field->data->value );
} else {
$value = false;
}
if ( ! empty( $value ) || ( '0' === $value ) ) {
$this->field_has_data = true;
} else {
$this->field_has_data = false;
}
}
}
Changelog Changelog
| Version | Description |
|---|---|
| 1.0.0 | Introduced. |
Methods Methods
- __construct — Get activity items, as specified by parameters.
- has_fields — Whether or not the loop has fields.
- has_groups — Whether or not the loop has field groups.
- next_field — Increments to the next field.
- next_group — Increments to the next group of fields.
- profile_fields — Kick off the profile fields.
- profile_groups — Kicks off the profile groups.
- rewind_fields — Rewinds to the start of the fields.
- rewind_groups — Rewinds to the start of the groups list.
- the_profile_field — Set up the profile fields.
- the_profile_group — Sets up the profile group.