Hi everyone,
I'm facing an issue with auto-populating repeater fields in Formidable Forms. I have a form (Form ID: 113) that includes a repeater section (Field ID: 3678) and several fields within this repeater. My goal is to duplicate an entry from the same form and populate all the fields within the repeater section. While the code successfully populates most of the fields, I'm encountering an issue.
The repeater section contains two lookup fields. The first lookup field (Field ID: 3680) is being populated correctly, but the second lookup field (Field ID: 3681), which is dependent on the first, remains empty. The second lookup field is supposed to filter its options based on the value of the first lookup field.
I would appreciate any insights or solutions you might have or suggest.
Thank you in advance for your help!
Here is the code I use:
add_filter('frm_setup_new_fields_vars', 'frm_auto_populate_repeating_fields', 20, 2);
function frm_auto_populate_repeating_fields($values, $field) {
// Mapping for each repeater field
$repeaters = [
3678 => [
'form_id' => 113,
'field_mappings' => [
3679, 3680, 3681, 3682, 3683, 3684, 3686, 3687, 3689, 3690,
3691, 3692, 3694, 3695, 3698, 3699, 3700, 3703
]
],
// Other repeater fields and their mappings
36333 => [
'form_id' => 113,
'field_mappings' => [
3992,
]
]
];
if (array_key_exists($field->id, $repeaters)) {
if (!isset($_POST['item_meta'][$field->id])) {
$original_entry_id = isset($_GET['pass_entry']) ? sanitize_text_field($_GET['pass_entry']) : 0;
if ($original_entry_id) {
$original_entry = FrmEntry::getOne($original_entry_id, true);
if ($original_entry) {
$repeater_field_id = $field->id;
$repeater_values = isset($original_entry->metas[$repeater_field_id]) ? $original_entry->metas[$repeater_field_id] : array();
$values['value'] = array('form' => $repeaters[$repeater_field_id]['form_id'], 'row_ids' => array());
foreach ($repeater_values as $repeater_entry_id) {
$repeater_entry = FrmEntry::getOne($repeater_entry_id, true);
if ($repeater_entry) {
// Populate the repeater fields
$values['value']['row_ids'][] = $repeater_entry_id;
$values['value'][$repeater_entry_id] = array();
foreach ($repeaters[$repeater_field_id]['field_mappings'] as $field_id) {
$values['value'][$repeater_entry_id][$field_id] = $repeater_entry->metas[$field_id] ?? '';
}
}
}
}
}
}
}
return $values;
}
Please login or Register to submit your answer