ResultEntity::createSelector

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. ResultEntity
  4. createSelector
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/resultentity.php
  • Класс: Bitrix\Crm\WebForm\ResultEntity
  • Вызов: ResultEntity::createSelector
protected function createSelector()
{
	$fields = $this->fields;

	$targetFields = [
		'FM' => []
	];
	$entityTypeNames = [
		\CCrmOwnerType::ContactName,
		\CCrmOwnerType::CompanyName,
		\CCrmOwnerType::LeadName
	];
	foreach ($entityTypeNames as $entityTypeName)
	{
		// check available fields
		if (!isset($fields[$entityTypeName]))
		{
			continue;
		}
		$seedFields = $fields[$entityTypeName];

		// merge multi fields
		if (isset($seedFields['FM']))
		{
			EntityMerger::mergeMultiFields(
				$seedFields['FM'],
				$targetFields['FM']
			);
		}

		// check person fields
		$fieldNameMap = [
			[
				'typeName' => [\CCrmOwnerType::LeadName, \CCrmOwnerType::ContactName],
				'fieldName' => 'NAME',
			],
			[
				'typeName' => [\CCrmOwnerType::LeadName, \CCrmOwnerType::ContactName],
				'fieldName' => 'LAST_NAME',
			],
			[
				'typeName' => [\CCrmOwnerType::LeadName, \CCrmOwnerType::ContactName],
				'fieldName' => 'SECOND_NAME',
			],
			[
				'typeName' => [\CCrmOwnerType::LeadName],
				'fieldName' => 'COMPANY_TITLE',
			],
			[
				'typeName' => [\CCrmOwnerType::CompanyName],
				'fieldName' => 'TITLE',
				'fieldAlias' => 'COMPANY_TITLE'
			],
		];
		foreach ($fieldNameMap as $item)
		{
			if (!in_array($entityTypeName, $item['typeName']))
			{
				continue;
			}

			$fieldName = $item['fieldName'];
			$fieldAlias = isset($item['fieldAlias']) ? $item['fieldAlias'] : $fieldName;

			// skip if target field value filled
			if (isset($targetFields[$fieldName]) && $targetFields[$fieldName])
			{
				continue;
			}

			// skip if seed field not exists
			if (!isset($seedFields[$fieldName]) || !$seedFields[$fieldName])
			{
				continue;
			}

			$targetFields[$fieldAlias] = $seedFields[$fieldName];
		}
	}

	$criteria = ActualEntitySelector::createDuplicateCriteria(
		$targetFields,
		array(
			ActualEntitySelector::SEARCH_PARAM_PHONE,
			ActualEntitySelector::SEARCH_PARAM_EMAIL,
			ActualEntitySelector::SEARCH_PARAM_ORGANIZATION,
			ActualEntitySelector::SEARCH_PARAM_PERSON
		)
	);

	$selector = (new ActualEntitySelector)
		->setCriteria($criteria)
		->enableFullSearch()
		->disableExclusionChecking();

	$scheme = Entity::getSchemes($this->scheme);
	if (!empty($scheme['DYNAMIC']) && !empty($scheme['MAIN_ENTITY']))
	{
		$selector->setDynamicTypeId($scheme['MAIN_ENTITY']);
	}

	$isMainEntityAdded = false;
	foreach ($this->entities as $entity)
	{
		if (empty($entity['typeId']) || empty($entity['id']))
		{
			continue;
		}

		$entityName = \CCrmOwnerType::ResolveName($entity['typeId']);
		if(!$entityName || !$scheme || !in_array($entityName, $scheme['ENTITIES']))
		{
			continue;
		}

		$skipRanking = false;
		if (!in_array($entity['typeId'], [\CCrmOwnerType::Company, \CCrmOwnerType::Contact]))
		{
			$isMainEntityAdded = true;
		}
		else
		{
			$skipRanking = $isMainEntityAdded;
		}
		$selector->setEntity($entity['typeId'], $entity['id'], $skipRanking);
	}

	return $selector->search();
}

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