bp_clone_field_for_repeater_sets( type $field_id )
Copy form fields for field sets that repeat.
Description
Parameters
- $field_id
-
(Required)
Return
(boolean)
Source
File: bp-xprofile/bp-xprofile-repeaters.php
function bp_clone_field_for_repeater_sets ( $field_id ) {
global $wpdb;
$bp = buddypress();
$db_row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->profile->table_name_fields} WHERE id = %d", $field_id ), ARRAY_A );
if ( !empty( $db_row ) && !is_wp_error( $db_row ) ) {
$template_field_id = $db_row['id'];
$new_field_column_names = array(
'group_id',
'parent_id',
'type',
'name',
'description',
'is_required',
'is_default_option',
'field_order',
'option_order',
'order_by',
'can_delete',
);
$new_field_column_data_types = array( '%d', '%d', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d' );
$new_field_column_data = array(
'group_id' => $db_row['group_id'],
'parent_id' => $db_row['parent_id'],
'type' => $db_row['type'],
'name' => $db_row['name'],
'description' => $db_row['description'],
'is_required' => $db_row['is_required'],
'is_default_option' => $db_row['is_default_option'],
'field_order' => $db_row['field_order'],
'option_order' => $db_row['option_order'],
'order_by' => $db_row['order_by'],
'can_delete' => $db_row['can_delete'],
);
$inserted = $wpdb->insert(
$bp->profile->table_name_fields,
$new_field_column_data,
$new_field_column_data_types
);
if ( $inserted ) {
$new_field_id = $wpdb->insert_id;
$metas = $wpdb->get_results( "SELECT * FROM {$bp->profile->table_name_meta} WHERE object_id = {$template_field_id} AND object_type = 'field'", ARRAY_A );
if ( !empty( $metas ) && !is_wp_error( $metas ) ) {
foreach ( $metas as $meta ) {
bp_xprofile_update_meta( $new_field_id, 'field', $meta['meta_key'], $meta['meta_value'] );
}
}
$current_clone_number = 1;
//get all clones of the template field
$all_clones = $wpdb->get_col( "SELECT object_id FROM {$bp->profile->table_name_meta} WHERE meta_key = '_cloned_from' AND meta_value = {$template_field_id}" );
if ( !empty( $all_clones ) && !is_wp_error( $all_clones ) ) {
$last_max_clone_number = $wpdb->get_var(
"SELECT MAX( meta_value ) FROM {$bp->profile->table_name_meta} WHERE meta_key = '_clone_number' AND object_id IN (". implode( ',', $all_clones ) .")"
);
$last_max_clone_number = !empty( $last_max_clone_number ) ? absint( $last_max_clone_number ) : 0;
$current_clone_number = $last_max_clone_number + 1;
}
bp_xprofile_update_meta( $new_field_id, 'field', '_is_repeater_clone', true );
bp_xprofile_update_meta( $new_field_id, 'field', '_cloned_from', $template_field_id );
bp_xprofile_update_meta( $new_field_id, 'field', '_clone_number', $current_clone_number );
//fix field order
$field_order = ( $current_clone_number * bp_profile_field_set_max_cap() ) + $db_row[ 'field_order' ];
$wpdb->update(
$bp->profile->table_name_fields,
array( 'field_order' => $field_order ),
array( 'id' => $new_field_id ),
array( '%d' ),
array( '%d' )
);
return $new_field_id;
}
}
return false;
}
Changelog
| Version | Description |
|---|---|
| BuddyBoss 1.0.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.