...Человеческий поиск в разработке...
- Модуль: 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(); }