in web/wp-content/plugins/acf-extended/includes/fields-settings/bidirectional.php [328:437]
function field_settings_update($field){
// bypass
if(acf_is_filter_enabled('acfe/bidirectional_setting')){
return $field;
}
// previous setting values
$_field = acf_get_field($field['key']);
// turning off - Remove related field
if($this->has_field_bidirectional($_field) && !$this->has_field_bidirectional($field)){
// get related bidirectional related
$r_fields = acf_get_array($_field['acfe_bidirectional']['acfe_bidirectional_related']);
foreach($r_fields as $r_field_key){
$r_field = acf_get_field($r_field_key);
if(!$this->has_field_bidirectional($r_field)){
continue;
}
$r_field_related = acf_get_array($r_field['acfe_bidirectional']['acfe_bidirectional_related']);
if(in_array($field['key'], $r_field_related)){
foreach($r_field_related as $i => $r_field_r){
if($r_field_r !== $field['key']){
continue;
}
unset($r_field_related[$i]);
}
$r_field['acfe_bidirectional']['acfe_bidirectional_related'] = $r_field_related;
if(empty($r_field_related)){
$r_field['acfe_bidirectional']['acfe_bidirectional_enabled'] = false;
$r_field['acfe_bidirectional']['acfe_bidirectional_related'] = false;
}
acf_enable_filter('acfe/bidirectional_setting');
// Update related bidirectional
acf_update_field($r_field);
// Update field group (json/php sync)
$field_group = acfe_get_field_group_from_field($r_field);
acf_update_field_group($field_group);
acf_disable_filter('acfe/bidirectional_setting');
}
}
}
// turning on (or already on) - add related field
elseif(($this->has_field_bidirectional($_field) && $this->has_field_bidirectional($field)) || (!$this->has_field_bidirectional($_field) && $this->has_field_bidirectional($field))){
// get related bidirectional related
$r_fields = acf_get_array($field['acfe_bidirectional']['acfe_bidirectional_related']);
foreach($r_fields as $r_field_key){
$r_field = acf_get_field($r_field_key);
// reset related bidirectional related
$r_field['acfe_bidirectional']['acfe_bidirectional_enabled'] = true;
$r_field_related = array();
if(isset($r_field['acfe_bidirectional']['acfe_bidirectional_related'])){
$r_field_related = acf_get_array($r_field['acfe_bidirectional']['acfe_bidirectional_related']);
}
if(!in_array($field['key'], $r_field_related)){
$r_field_related[] = $field['key'];
$r_field['acfe_bidirectional']['acfe_bidirectional_related'] = $r_field_related;
}
acf_enable_filter('acfe/bidirectional_setting');
// update related bidirectional
acf_update_field($r_field);
// update field group (json/php sync)
$field_group = acfe_get_field_group_from_field($r_field);
acf_update_field_group($field_group);
acf_disable_filter('acfe/bidirectional_setting');
}
}
// return
return $field;
}