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 Description
Parameters Parameters
- $group_id
-
(Required) ID of the group.
- $field_id
-
(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 );
}
$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 ( ! 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' ) ) ) {
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'] );
}
// 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' );
}
// Save autolink settings.
if ( isset( $_POST['do_autolink'] ) && 'on' === wp_unslash( $_POST['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();
}
}
Changelog Changelog
| Version | Description |
|---|---|
| 1.0.0 | Introduced. |