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.