- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/fieldsynchronizer.php
- Класс: Bitrix\Crm\WebForm\FieldSynchronizer
- Вызов: FieldSynchronizer::getFieldMap
protected function getFieldMap($schemeId, $srcFieldCodes)
{
$entityTypeNames = Entity::getNames();
$srcFieldMap = array();
foreach($srcFieldCodes as $srcFieldCodeTmp)
{
foreach($entityTypeNames as $entityTypeName)
{
$prefix = "{$entityTypeName}_";
if(mb_strpos($srcFieldCodeTmp, $prefix) !== 0)
{
continue;
}
$srcEntity = Entity::getMap($entityTypeName);
$srcEntityFields = EntityFieldProvider::getFieldsInternal($entityTypeName, $srcEntity);
$fieldName = mb_substr($srcFieldCodeTmp, mb_strlen($prefix));
$srcFieldMap[$entityTypeName][$fieldName] = array(
'FIELD_NAME' => $fieldName,
'OLD_FIELD_CODE' => $srcFieldCodeTmp,
'OLD_FIELD' => $this->findField($fieldName, $srcEntityFields),
'NEW_FIELD_CODE' => '',
'NEW_FIELD' => null
);
break;
}
}
foreach($srcFieldMap as $entityTypeName => $entityFields)
{
$fieldNames = array();
foreach($entityFields as $keyId => $entityField)
{
$fieldNames[] = $entityField['FIELD_NAME'];
}
if(count($fieldNames) == 0)
{
continue;
}
$specificLeadInvoiceSchema =
Entity::ENUM_ENTITY_SCHEME_LEAD_INVOICE === (int)$schemeId
&& $entityTypeName === \CCrmOwnerType::LeadName
;
$specificLeadWithContactSchema =
Entity::ENUM_ENTITY_SCHEME_LEAD === (int)$schemeId
&& $entityTypeName === \CCrmOwnerType::LeadName
&& ($srcFieldMap[\CCrmOwnerType::ContactName] || $srcFieldMap[\CCrmOwnerType::CompanyName])
;
$synchronizedFields = $this->getReplacedSchemeFields(
$entityTypeName,
$schemeId,
$fieldNames,
$specificLeadInvoiceSchema || $specificLeadWithContactSchema
);
foreach($synchronizedFields as $dstEntityTypeName => $syncFields)
{
$dstEntity = Entity::getMap($dstEntityTypeName);
$dstEntityFields = EntityFieldProvider::getFieldsInternal($dstEntityTypeName, $dstEntity);
$prefix = $dstEntityTypeName . '_';
foreach($syncFields as $syncFieldOld => $syncFieldNew)
{
if(!$syncFieldNew)
{
continue;
}
$srcFieldMap[$entityTypeName][$syncFieldOld]['NEW_FIELD_CODE'] = $prefix . $syncFieldNew;
$srcFieldMap[$entityTypeName][$syncFieldOld]['NEW_FIELD'] = $this->findField($syncFieldNew, $dstEntityFields);
}
if ($this->isCreateMode && is_callable($dstEntity['CLEAR_FIELDS_CACHE_CALL'] ?? null))
{
$dstEntity['CLEAR_FIELDS_CACHE_CALL']();
}
}
}
return $srcFieldMap;
}