• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/synchronization/userfieldsynchronizer.php
  • Класс: Bitrix\Crm\Synchronization\UserFieldSynchronizer
  • Вызов: UserFieldSynchronizer::getIntersection
static function getIntersection($srcEntityTypeID, $dstEntityTypeID, $languageID = '')
{
	if(!is_string($languageID) || $languageID === '')
	{
		$languageID = LANGUAGE_ID;
	}

	$srcUfEntityID = \CCrmOwnerType::ResolveUserFieldEntityID($srcEntityTypeID);
	$dstUfEntityID = \CCrmOwnerType::ResolveUserFieldEntityID($dstEntityTypeID);

	/** @var \CUserTypeManager $USER_FIELD_MANAGER */
	global $USER_FIELD_MANAGER;
	/** @var \CMain $APPLICATION */
	global $APPLICATION;

	$srcFields = $USER_FIELD_MANAGER->GetUserFields($srcUfEntityID, 0, $languageID);
	$dstFields = $USER_FIELD_MANAGER->GetUserFields($dstUfEntityID, 0, $languageID);

	$map = array();
	foreach($dstFields as $field)
	{
		$label = self::getFieldComplianceCode($field);
		if($label === '')
		{
			continue;
		}

		$typeID = $field['USER_TYPE_ID'];
		if(!isset($map[$typeID]))
		{
			$map[$typeID] = array();
		}

		$isMultiple = $field['MULTIPLE'] === 'Y' ? 'Y' : 'N';
		if(!isset($map[$typeID][$isMultiple]))
		{
			$map[$typeID][$isMultiple] = array();
		}

		if(!isset($map[$typeID][$isMultiple][$label]))
		{
			$map[$typeID][$isMultiple][$label] = array('NAME' => $field['FIELD_NAME'], 'IS_BUSY' => false);
		}
	}

	$results = array();
	foreach($srcFields as $field)
	{
		$label = self::getFieldComplianceCode($field);
		if($label === '')
		{
			continue;
		}

		if(isset($results[$label]))
		{
			continue;
		}

		$typeID = $field['USER_TYPE_ID'];
		$isMultiple = $field['MULTIPLE'] === 'Y' ? 'Y' : 'N';
		if(isset($map[$typeID]) && isset($map[$typeID][$isMultiple]) && isset($map[$typeID][$isMultiple][$label])
			&& !($map[$typeID][$label]['IS_BUSY'] ?? null))
		{
			$results[$label] = array(
				'LABEL' => $label,
				'SRC_FIELD_NAME' => $field['FIELD_NAME'],
				'DST_FIELD_NAME' => $map[$typeID][$isMultiple][$label]['NAME']
			);
			$map[$typeID][$isMultiple][$label]['IS_BUSY'] = true;
		}
	}

	return $results;
}