• Модуль: 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();
}