- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/fieldsynchronizer.php
- Класс: Bitrix\Crm\WebForm\FieldSynchronizer
- Вызов: FieldSynchronizer::replaceOptionFields
public function replaceOptionFields(Options $options)
{
$this->isCreateMode = true;
$form = $options->getForm();
$fields = $form->getFields();
['DEPENDENCIES' => $dependencies, 'ENTITY_SCHEME' => $schemeId, 'INTEGRATION' => $integration] = $form->get();
$integration = $integration ?? [];
$srcFieldCodes = array_column($fields, 'CODE');
$fields = array_combine(
$srcFieldCodes,
$fields
);
foreach ($integration as $key => $integrationOption)
{
$integration[$key]['FIELDS_MAPPING'] = array_combine(
array_column($integrationOption['FIELDS_MAPPING'],'CRM_FIELD_KEY'),
$integrationOption['FIELDS_MAPPING']
);
}
$srcFieldMap = $this->getFieldMap($schemeId, $srcFieldCodes);
foreach($srcFieldMap as $entityTypeName => $entityFields)
{
foreach($entityFields as $fieldName => $entityField)
{
$oldFieldCode = $entityField['OLD_FIELD_CODE'];
$newFieldCode = $entityField['NEW_FIELD_CODE'];
if($oldFieldCode == $newFieldCode)
{
continue;
}
// replace field
$this->replaceField($fields, $entityField);
// replace dependencies
$this->replaceFieldDependencies($dependencies, $entityField);
// replace field mapping
$this->replaceIntegrationFields($integration,$entityField);
unset($fields[$entityField['OLD_FIELD_CODE']]);
}
}
$form->merge([
'FIELDS' => array_values($fields),
'DEPENDENCIES' => $dependencies,
'INTEGRATION' => array_map(
static function($integrationOption)
{
$integrationOption['FIELDS_MAPPING'] = array_values($integrationOption['FIELDS_MAPPING']);
return $integrationOption;
},$integration
)
]);
Options\Fields::clearCache();
}