xprofile_admin_manage_field( int $group_id, int|null $field_id = null )
Handles the adding or editing of profile field data for a user.
Description
Parameters
- $group_id
-
(Required) ID of the group.
- $field_id
-
(Optional) ID of the field being managed.
Default value: null
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();
$new = true;
} else {
$field = xprofile_get_field( $field_id );
$new = 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'];
if ( 'socialnetworks' === $field->type ) {
if ( true === $new ) {
$disabled_social_networks = false;
$exists_social_networks = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}bp_xprofile_fields a WHERE parent_id = 0 AND type = 'socialnetworks' " );
if ( $exists_social_networks > 0 ) {
$disabled_social_networks = true;
}
if ( true === $disabled_social_networks ) {
$message = __( 'You can only have one instance of the "Social Network" profile field.','buddyboss' );
$type = 'error';
$field->render_admin_form( $message, $type );
return false;
}
}
}
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 ) ) {
//cloned fields should not be considered when determining the max order of fields in given group
$cloned_field_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT f.id FROM {$bp->profile->table_name_fields} AS f JOIN {$bp->profile->table_name_meta} AS fm ON f.id = fm.object_id "
. " WHERE f.group_id = %d AND fm.meta_key = '_is_repeater_clone' AND fm.meta_value = 1 ",
$group_id
) );
if ( !empty( $cloned_field_ids ) ) {
$field->field_order = (int) $wpdb->get_var( $wpdb->prepare( "SELECT max(field_order) FROM {$bp->profile->table_name_fields} WHERE group_id = %d AND id NOT IN ( ". implode( ',', $cloned_field_ids ) ." )", $group_id ) );
} else {
$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.', 'buddyboss' );
$type = 'error';
} else {
$message = __( 'The field was saved successfully.', 'buddyboss' );
$type = 'updated';
// Set profile 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' ) ) ) {
bp_xprofile_update_field_meta( $field_id, 'default_visibility', $_POST['default-visibility'] );
}
// Validate custom visibility.
if ( ! empty( $_POST['allow-custom-visibility'] ) && in_array( $_POST['allow-custom-visibility'], array( 'allowed', 'disabled' ) ) ) {
bp_xprofile_update_field_meta( $field_id, 'allow_custom_visibility', $_POST['allow-custom-visibility'] );
}
// Update alternate name.
$alternate_name = isset( $_POST['title_secondary'] ) ? $_POST['title_secondary'] : '';
bp_xprofile_update_field_meta( $field_id, 'alternate_name', $alternate_name );
// Validate signup.
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' );
}
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 BuddyPress 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();
}
$field->render_admin_form( $message, $type );
// Users Admin URL
$users_url = bp_get_admin_url( 'admin.php' );
$redirect = add_query_arg( array(
'page' => 'bp-profile-setup',
'mode' => 'edit_field',
'group_id' => (int) $group_id,
'type' => $type,
'field_id' => (int) $field_id
), $users_url );
wp_safe_redirect( $redirect );
exit();
} else {
$field->render_admin_form( $message );
}
} else {
$field->render_admin_form();
}
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.0.0 | BuddyPress 1.0.0 |
| BuddyBoss 1.0.0 Updated to continue showing the field-edit form, after field is saved/updated. Updated to exclude repeater field IDs while determining field_order for new field. | 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.