...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatechecker.php
- Класс: Bitrix\Crm\Integrity\DuplicateChecker
- Вызов: DuplicateChecker::findDuplicates
public function findDuplicates(\Bitrix\Crm\EntityAdapter $adapter, DuplicateSearchParams $params); public function findMultifieldDuplicates($type, \Bitrix\Crm\EntityAdapter $adapter, DuplicateSearchParams $params) { if(!is_string($type)) { throw new Main\ArgumentTypeException('type', 'string'); } if($type !== 'EMAIL' && $type !== 'PHONE') { throw new Main\NotSupportedException("Type: '{$type}' is not supported in current context"); } $allMultiFields = $adapter->getFieldValue('FM'); $multiFields = is_array($allMultiFields) && isset($allMultiFields[$type]) ? $allMultiFields[$type] : null; if(!is_array($multiFields) || empty($multiFields)) { return array(); } $criterions = array(); $dups = array(); foreach($multiFields as &$multiField) { $value = isset($multiField['VALUE']) ? $multiField['VALUE'] : ''; if($value === '') { continue; } $criterion = new DuplicateCommunicationCriterion($type, $value); $criterion->setCategoryId($params->getCategoryId()); $isExists = false; foreach($criterions as $curCriterion) { /** @var DuplicateCriterion $curCriterion */ if($criterion->equals($curCriterion)) { $isExists = true; break; } } if($isExists) { continue; } $criterions[] = $criterion; $duplicate = $criterion->find($params->getEntityTypeId() ?? \CCrmOwnerType::Undefined); if($duplicate !== null) { $dups[] = $duplicate; } } unset($multiField); return $dups; }