• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatemanager.php
  • Класс: Bitrix\Crm\Integrity\DuplicateManager
  • Вызов: DuplicateManager::getDedupeTypeScopeMap
static function getDedupeTypeScopeMap($entityTypeID)
{
	$result = [];

	$rqFieldScopeMap = $bdFieldScopeMap = null;
	foreach (self::getSupportedDedupeTypes($entityTypeID) as $typeID)
	{
		$scopes = [''];

		$isRequisite = (($typeID & DuplicateIndexType::REQUISITE) === $typeID);
		$isBankDetail = (($typeID & DuplicateIndexType::BANK_DETAIL) === $typeID);
		if($isRequisite || $isBankDetail)
		{
			if ($isRequisite)
				$fieldScopeMap = &$rqFieldScopeMap;
			else
				$fieldScopeMap = &$bdFieldScopeMap;
			if ($fieldScopeMap === null)
			{
				$fieldScopeMap = [];
				if ($isRequisite)
					$fieldsMap = DuplicateRequisiteCriterion::getIndexedFieldsMap($entityTypeID, true);
				else
					$fieldsMap = DuplicateBankDetailCriterion::getIndexedFieldsMap($entityTypeID, true);
				foreach ($fieldsMap as $scope => $fields)
				{
					foreach ($fields as $fieldName)
					{
						$fieldScopeMap[DuplicateIndexType::resolveID($fieldName)][$scope] = true;
					}
				}
			}
			$scopes = isset($fieldScopeMap[$typeID]) ? array_keys($fieldScopeMap[$typeID]) : [];
			unset($fieldScopeMap);
		}
		else
		{
			$isVolatile = false;
			$volatileTypeId = DuplicateIndexType::UNDEFINED;
			foreach (DuplicateVolatileCriterion::getSupportedDedupeTypes() as $currentTypeId)
			{
				if ((($typeID & $currentTypeId) === $currentTypeId))
				{
					$volatileTypeId = $currentTypeId;
					$isVolatile = true;
					break;
				}
			}
			if ($isVolatile)
			{
				$typeInfo = Volatile\TypeInfo::getInstance();
				$info = $typeInfo->getById($volatileTypeId);
				if (
					!empty($info)
					&& isset($info['CATEGORY_INFO']['categoryId'])
					&& isset($info['CATEGORY_INFO']['params']['countryId'])
				)
				{
					$categoryId = $info['CATEGORY_INFO']['categoryId'];
					$countryId = $info['CATEGORY_INFO']['params']['countryId'];
					switch ($categoryId)
					{
						case Volatile\FieldCategory::REQUISITE:
							$scopes = [EntityRequisite::formatDuplicateCriterionScope($countryId)];
							break;
						case Volatile\FieldCategory::BANK_DETAIL:
							$scopes = [EntityBankDetail::formatDuplicateCriterionScope($countryId)];
							break;
					}
				}
			}
		}
		if (!empty($scopes))
		{
			$result[$typeID] = $scopes;
		}
	}

	return $result;
}