• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/fieldsynchronizer.php
  • Класс: Bitrix\Crm\WebForm\FieldSynchronizer
  • Вызов: FieldSynchronizer::getReplacedSchemeFields
protected function getReplacedSchemeFields(
	string $srcEntityTypeName,
	string $dstSchemeId,
	array $fieldNames,
	bool $specificSchema
): array
{
	$synchronizedFieldMap = [];
	$scheme = Entity::getSchemes($dstSchemeId);

	if (!$specificSchema && in_array($srcEntityTypeName, $scheme['ENTITIES'], true))
	{
		foreach($fieldNames as $fieldName)
		{
			$synchronizedFieldMap[$srcEntityTypeName][$fieldName] = $fieldName;
		}

		return $synchronizedFieldMap;
	}

	$mainEntity = $this->getSchemaMainEntity($scheme);
	$unresolvedFields = [];

	if ($specificSchema)
	{
		if (!empty($contactFields = array_intersect($this::CLIENT_CONTACT_FIELDS_FIELDS, $fieldNames)))
		{
			$unresolvedFields = $contactFields;
			$fieldNames = array_diff($fieldNames,$contactFields);
		}
	}

	$synchronizedFieldMap[$mainEntity] = $this->findSyncFields(
		$srcEntityTypeName,
		$mainEntity,
		$fieldNames
	);


	foreach ($synchronizedFieldMap[$mainEntity] as $name => $item)
	{
		if (!$item)
		{
			$unresolvedFields[] = $name;
		}
	}

	if (empty($unresolvedFields))
	{
		return $synchronizedFieldMap;
	}

	foreach($this->orderSchemaEntities($scheme) as $dstTypeName)
	{
		if (in_array($dstTypeName,[\CCrmOwnerType::InvoiceName, $mainEntity],true))
		{
			continue;
		}

		$synchronizedFieldMap[$dstTypeName] = $this->findSyncFields(
			$srcEntityTypeName,
			$dstTypeName,
			$unresolvedFields
		);

		foreach ($unresolvedFields as $key => $name)
		{
			if ($synchronizedFieldMap[$dstTypeName][$name])
			{
				unset($unresolvedFields[$key], $synchronizedFieldMap[$mainEntity][$name]);
				continue;
			}

			unset($synchronizedFieldMap[$dstTypeName][$name]);
		}

		if (empty($synchronizedFieldMap[$dstTypeName]))
		{
			unset($synchronizedFieldMap[$dstTypeName]);
		}
	}

	if ($this->isCreateMode)
	{
		$this->createSyncEntityField($synchronizedFieldMap,$srcEntityTypeName);
	}

	return $synchronizedFieldMap;
}