BP_XProfile_Field::save()
Save a profile field.
Description
Return
(boolean)
Source
File: bp-xprofile/classes/class-bp-xprofile-field.php
public function save() { global $wpdb; $bp = buddypress(); $this->group_id = apply_filters( 'xprofile_field_group_id_before_save', $this->group_id, $this->id ); $this->parent_id = apply_filters( 'xprofile_field_parent_id_before_save', $this->parent_id, $this->id ); $this->type = apply_filters( 'xprofile_field_type_before_save', $this->type, $this->id ); $this->name = apply_filters( 'xprofile_field_name_before_save', $this->name, $this->id ); $this->description = apply_filters( 'xprofile_field_description_before_save', $this->description, $this->id ); $this->is_required = apply_filters( 'xprofile_field_is_required_before_save', $this->is_required, $this->id ); $this->order_by = apply_filters( 'xprofile_field_order_by_before_save', $this->order_by, $this->id ); $this->field_order = apply_filters( 'xprofile_field_field_order_before_save', $this->field_order, $this->id ); $this->option_order = apply_filters( 'xprofile_field_option_order_before_save', $this->option_order, $this->id ); $this->can_delete = apply_filters( 'xprofile_field_can_delete_before_save', $this->can_delete, $this->id ); $this->type_obj = bp_xprofile_create_field_type( $this->type ); /** * Fires before the current field instance gets saved. * * Please use this hook to filter the properties above. Each part will be passed in. * * @since BuddyPress 1.0.0 * * @param BP_XProfile_Field $this Current instance of the field being saved. */ do_action_ref_array( 'xprofile_field_before_save', array( $this ) ); $is_new_field = is_null( $this->id ); if ( ! $is_new_field ) { $sql = $wpdb->prepare( "UPDATE {$bp->profile->table_name_fields} SET group_id = %d, parent_id = 0, type = %s, name = %s, description = %s, is_required = %d, order_by = %s, field_order = %d, option_order = %d, can_delete = %d, is_default_option = %d WHERE id = %d", $this->group_id, $this->type, $this->name, $this->description, $this->is_required, $this->order_by, $this->field_order, $this->option_order, $this->can_delete, $this->is_default_option, $this->id ); } else { $sql = $wpdb->prepare( "INSERT INTO {$bp->profile->table_name_fields} (group_id, parent_id, type, name, description, is_required, order_by, field_order, option_order, can_delete, is_default_option ) VALUES ( %d, %d, %s, %s, %s, %d, %s, %d, %d, %d, %d )", $this->group_id, $this->parent_id, $this->type, $this->name, $this->description, $this->is_required, $this->order_by, $this->field_order, $this->option_order, $this->can_delete, $this->is_default_option ); } /** * Check for null so field options can be changed without changing any * other part of the field. The described situation will return 0 here. */ if ( $wpdb->query( $sql ) !== null ) { if ( $is_new_field ) { $this->id = $wpdb->insert_id; } // Only do this if we are editing an existing field. if ( ! $is_new_field ) { /** * Remove any radio or dropdown options for this * field. They will be re-added if needed. * This stops orphan options if the user changes a * field from a radio button field to a text box. */ $this->delete_children(); } /** * Check to see if this is a field with child options. * We need to add the options to the db, if it is. */ if ( $this->type_obj->supports_options ) { $parent_id = $this->id; // Allow plugins to filter the field's child options (i.e. the items in a selectbox). $post_option = ! empty( $_POST["{$this->type}_option"] ) ? $_POST["{$this->type}_option"] : ''; $post_default = ! empty( $_POST["isDefault_{$this->type}_option"] ) ? $_POST["isDefault_{$this->type}_option"] : ''; /** * Filters the submitted field option value before saved. * * @since BuddyPress 1.5.0 * * @param string $post_option Submitted option value. * @param BP_XProfile_Field $type Current field type being saved for. */ $options = apply_filters( 'xprofile_field_options_before_save', $post_option, $this->type ); /** * Filters the default field option value before saved. * * @since BuddyPress 1.5.0 * * @param string $post_default Default option value. * @param BP_XProfile_Field $type Current field type being saved for. */ $defaults = apply_filters( 'xprofile_field_default_before_save', $post_default, $this->type ); $counter = 1; if ( ! empty( $options ) ) { foreach ( (array) $options as $option_key => $option_value ) { $is_default = 0; if ( is_array( $defaults ) ) { if ( isset( $defaults[ $option_key ] ) ) { $is_default = 1; } } else { if ( (int) $defaults == $option_key ) { $is_default = 1; } } if ( '' != $option_value ) { $sql = $wpdb->prepare( "INSERT INTO {$bp->profile->table_name_fields} (group_id, parent_id, type, name, description, is_required, option_order, is_default_option) VALUES (%d, %d, 'option', %s, '', 0, %d, %d)", $this->group_id, $parent_id, $option_value, $counter, $is_default ); if ( ! $wpdb->query( $sql ) ) { return false; } } $counter ++; } } } /** * Fires after the current field instance gets saved. * * @since BuddyPress 1.0.0 * * @param BP_XProfile_Field $this Current instance of the field being saved. */ do_action_ref_array( 'xprofile_field_after_save', array( $this ) ); // Recreate type_obj in case someone changed $this->type via a filter. $this->type_obj = bp_xprofile_create_field_type( $this->type ); $this->type_obj->field_obj = $this; return $this->id; } else { return false; } }
Changelog
Version | Description |
---|---|
BuddyPress 1.1.0 | 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.