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