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