xprofile_admin_manage_field( int $group_id, int|null $field_id = null )

Handles the adding or editing of profile field data for a user.


Parameters Parameters

$group_id

(int) (Required) ID of the group.

$field_id

(int|null) (Optional) ID of the field being managed.

Default value: null


Source Source

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

function xprofile_admin_manage_field( $group_id, $field_id = null ) {
	global $wpdb, $message, $groups;

	$bp = buddypress();

	if ( is_null( $field_id ) ) {
		$field = new BP_XProfile_Field();
	} else {
		$field = xprofile_get_field( $field_id, null, false );
	}

	$field->group_id = $group_id;

	if ( isset( $_POST['saveField'] ) ) {

		// Check nonce.
		check_admin_referer( 'bp_xprofile_admin_field', 'bp_xprofile_admin_field' );

		if ( BP_XProfile_Field::admin_validate() ) {
			$field->is_required = $_POST['required'];
			$field->type        = $_POST['fieldtype'];
			$field->name        = $_POST['title'];

			/*
			 * By default a Textbox field is created. To run field type's feature
			 * checks we need to set it to what it really is early.
			 */
			if ( is_null( $field_id ) ) {
				$field_type = bp_xprofile_create_field_type( $field->type );

				// If it's a placeholder, then the field type is not registered.
				if ( ! $field_type instanceof BP_XProfile_Field_Type_Placeholder ) {
					$field->type_obj = $field_type;
				}
			}

			if ( ! $field->field_type_supports( 'required' ) ) {
				$field->is_required = "0";
			}

			if ( ! empty( $_POST['description'] ) ) {
				$field->description = $_POST['description'];
			} else {
				$field->description = '';
			}

			if ( ! empty( $_POST["sort_order_{$field->type}"] ) ) {
				$field->order_by = $_POST["sort_order_{$field->type}"];
			}

			$field->field_order = $wpdb->get_var( $wpdb->prepare( "SELECT field_order FROM {$bp->profile->table_name_fields} WHERE id = %d", $field_id ) );
			if ( ! is_numeric( $field->field_order ) || is_wp_error( $field->field_order ) ) {
				$field->field_order = (int) $wpdb->get_var( $wpdb->prepare( "SELECT max(field_order) FROM {$bp->profile->table_name_fields} WHERE group_id = %d", $group_id ) );
				$field->field_order++;
			}

			// For new profile fields, set the $field_id. For existing profile
			// fields, this will overwrite $field_id with the same value.
			$field_id = $field->save();

			if ( empty( $field_id ) ) {
				$message = __( 'There was an error saving the field. Please try again.', 'buddypress' );
				$type    = 'error';
			} else {
				$message = __( 'The field was saved successfully.', 'buddypress' );
				$type    = 'success';

				// @todo remove these old options.
				if ( 1 == $field_id ) {
					bp_update_option( 'bp-xprofile-fullname-field-name', $field->name );
				}

				// Set member types.
				if ( isset( $_POST['has-member-types'] ) ) {
					$member_types = array();
					if ( isset( $_POST['member-types'] ) ) {
						$member_types = stripslashes_deep( $_POST['member-types'] );
					}

					$field->set_member_types( $member_types );
				}

				// Validate default visibility.
				if ( ! empty( $_POST['default-visibility'] ) && in_array( $_POST['default-visibility'], wp_list_pluck( bp_xprofile_get_visibility_levels(), 'id' ) ) ) {
					$default_visibility = $_POST['default-visibility'];

					if ( ! $field->field_type_supports( 'allow_custom_visibility' ) ) {
						$default_visibility          = 'public';
						$available_visibility_levels = bp_xprofile_get_visibility_levels();

						if ( isset( $field->type_obj->visibility ) && in_array( $field->type_obj->visibility, array_keys( $available_visibility_levels ), true ) ) {
							$default_visibility = $field->type_obj->visibility;
						}
					}

					bp_xprofile_update_field_meta( $field_id, 'default_visibility', $default_visibility );
				}

				// Validate custom visibility.
				if ( ! empty( $_POST['allow-custom-visibility'] ) && in_array( $_POST['allow-custom-visibility'], array( 'allowed', 'disabled' ) ) ) {
					$allow_custom_visibility = $_POST['allow-custom-visibility'];

					if ( ! $field->field_type_supports( 'allow_custom_visibility' ) ) {
						$allow_custom_visibility = 'disabled';
					}

					bp_xprofile_update_field_meta( $field_id, 'allow_custom_visibility', $allow_custom_visibility );
				}

				// Validate signup.
				if ( $field->field_type_supports( 'signup_position' ) ) {
					if ( ! empty( $_POST['signup-position'] ) ) {
						bp_xprofile_update_field_meta( $field_id, 'signup_position', (int) $_POST['signup-position'] );
					} else {
						bp_xprofile_delete_meta( $field_id, 'field', 'signup_position' );
					}
				}

				$do_autolink = '';
				if ( $field->field_type_supports( 'do_autolink' ) && isset( $_POST['do_autolink'] ) && $_POST['do_autolink'] ) {
					$do_autolink = wp_unslash( $_POST['do_autolink'] );
				}

				// Save autolink settings.
				if ( 'on' === $do_autolink ) {
					bp_xprofile_update_field_meta( $field_id, 'do_autolink', 'on' );
				} else {
					bp_xprofile_update_field_meta( $field_id, 'do_autolink', 'off' );
				}

				if ( $field->type_obj->do_settings_section() ) {
					$settings = isset( $_POST['field-settings'] ) ? wp_unslash( $_POST['field-settings'] ) : array();
					$field->admin_save_settings( $settings );
				}

				/**
				 * Fires at the end of the process to save a field for a user, if successful.
				 *
				 * @since 1.0.0
				 *
				 * @param BP_XProfile_Field $field Current BP_XProfile_Field object.
				 */
				do_action( 'xprofile_fields_saved_field', $field );

				$groups = bp_xprofile_get_groups();
			}

			xprofile_admin_screen( $message, $type );

		} else {
			$field->render_admin_form( $message );
		}
	} else {
		$field->render_admin_form();
	}
}


Top ↑

Changelog Changelog

Changelog
Version Description
1.0.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.