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(); } }
Expand full source code Collapse full source code View on Trac
Changelog Changelog
Version | Description |
---|---|
1.0.0 | Introduced. |