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