...Человеческий поиск в разработке...
- Модуль: 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; }