FieldSynchronizer::getFieldMap

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. FieldSynchronizer
  4. getFieldMap
  • Модуль: 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;
}

Добавить комментарий