bp_xprofile_get_user_progress( array $group_ids, array $photo_types )

Function returns logged in user progress based on options selected in the widget form.

Description

Parameters

$group_ids

(array) (Required) - set of fieldset selected to show in progress

$photo_types

(array) (Required) - profile or cover photo selected to show in progress

Return

(array) progress_details - raw details to calculate user progress

Source

File: bp-xprofile/bp-xprofile-functions.php

function bp_xprofile_get_user_progress( $group_ids, $photo_types ) {

	/* User Progress specific VARS. */
	$user_id                = get_current_user_id();
	$progress_details       = array();
	$grand_total_fields     = 0;
	$grand_completed_fields = 0;

	/* Profile Photo */

	// check if profile photo option still enabled.
	$is_profile_photo_disabled = bp_disable_avatar_uploads();
	if ( ! $is_profile_photo_disabled && in_array( 'profile_photo', $photo_types ) ) {

		++ $grand_total_fields;

		$is_profile_photo_uploaded = ( bp_get_user_has_avatar( $user_id ) ) ? 1 : 0;

		if ( $is_profile_photo_uploaded ) {
			++ $grand_completed_fields;
		}

		$progress_details['photo_type']['profile_photo'] = array(
			'is_uploaded' => $is_profile_photo_uploaded,
			'name'        => __( 'Profile Photo', 'buddyboss' ),
		);

	}

	/* Cover Photo */

	// check if cover photo option still enabled.
	$is_cover_photo_disabled = bp_disable_cover_image_uploads();
	if ( ! $is_cover_photo_disabled && in_array( 'cover_photo', $photo_types ) ) {

		++ $grand_total_fields;

		$is_cover_photo_uploaded = ( bp_attachments_get_user_has_cover_image( $user_id ) ) ? 1 : 0;

		if ( $is_cover_photo_uploaded ) {
			++ $grand_completed_fields;
		}

		$progress_details['photo_type']['cover_photo'] = array(
			'is_uploaded' => $is_cover_photo_uploaded,
			'name'        => __( 'Cover Photo', 'buddyboss' ),
		);

	}

	/* Groups Fields */

	// Get Groups and Group fields with Loggedin user data.
	$profile_groups = bp_xprofile_get_groups(
		array(
			'fetch_fields'     => true,
			'fetch_field_data' => true,
			'user_id'          => $user_id,
		)
	);

	foreach ( $profile_groups as $single_group_details ) {

		if ( empty( $single_group_details->fields ) ) {
			continue;
		}

		/* Single Group Specific VARS */
		$group_id              = $single_group_details->id;
		$single_group_progress = array();

		// Consider only selected Groups ids from the widget form settings, skip all others.
		if ( ! in_array( $group_id, $group_ids ) ) {
			continue;
		}

		// Check if Current Group is repeater if YES then get number of fields inside current group.
		$is_group_repeater_str = bp_xprofile_get_meta( $group_id, 'group', 'is_repeater_enabled', true );
		$is_group_repeater     = ( 'on' === $is_group_repeater_str ) ? true : false;

		/* Loop through all the fields and check if fields completed or not. */
		$group_total_fields     = 0;
		$group_completed_fields = 0;
		foreach ( $single_group_details->fields as $group_single_field ) {

			// If current group is repeater then only consider first set of fields.
			if ( $is_group_repeater ) {

				// If field not a "clone number 1" then stop. That means proceed with the first set of fields and restrict others.
				$field_id     = $group_single_field->id;
				$clone_number = bp_xprofile_get_meta( $field_id, 'field', '_clone_number', true );
				if ( $clone_number > 1 ) {
					continue;
				}
			}

			$field_data_value = maybe_unserialize( $group_single_field->data->value );

			if ( ! empty( $field_data_value ) ) {
				++ $group_completed_fields;
			}

			++ $group_total_fields;
		}

		/* Prepare array to return group specific progress details */
		$single_group_progress['group_name']             = $single_group_details->name;
		$single_group_progress['group_total_fields']     = $group_total_fields;
		$single_group_progress['group_completed_fields'] = $group_completed_fields;

		$grand_total_fields     += $group_total_fields;
		$grand_completed_fields += $group_completed_fields;

		$progress_details['groups'][ $group_id ] = $single_group_progress;

	}

	/* Total Fields vs completed fields to calculate progress percentage. */
	$progress_details['total_fields']     = $grand_total_fields;
	$progress_details['completed_fields'] = $grand_completed_fields;

	/**
	 * Filter returns User Progress array.
	 *
	 * @since BuddyBoss 1.2.5
	 */
	return apply_filters( 'xprofile_pc_user_progress', $progress_details );
}

Changelog

Changelog
Version Description
BuddyBoss 1.4.9 Introduced.

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.