...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/restservice.php
- Класс: \CCrmDuplicateRestProxy
- Вызов: CCrmDuplicateRestProxy::processMethodRequest
public function processMethodRequest($name, $nameDetails, $arParams, $nav, $server) { $userPerms = CCrmPerms::GetCurrentUserPermissions(); if(!CCrmLead::CheckReadPermission(0, $userPerms) && !CCrmContact::CheckReadPermission(0, $userPerms) && !CCrmCompany::CheckReadPermission(0, $userPerms)) { throw new RestException('Access denied.'); } if(mb_strtoupper($name) === 'FINDBYCOMM') { $type = mb_strtoupper($this->resolveParam($arParams, 'type')); if($type !== 'EMAIL' && $type !== 'PHONE') { if($type === '') { throw new RestException("Communication type is not defined."); } else { throw new RestException("Communication type '{$type}' is not supported in current context."); } } $values = $this->resolveArrayParam($arParams, 'values'); if(!is_array($values) || count($values) === 0) { throw new RestException("Communication values is not defined."); } $entityTypeID = CCrmOwnerType::ResolveID( $this->resolveMultiPartParam($arParams, array('entity', 'type')) ); if($entityTypeID === CCrmOwnerType::Deal) { throw new RestException("Deal is not supported in current context."); } $criterions = array(); $dups = array(); $qty = 0; foreach($values as $value) { if(!is_string($value) || $value === '') { continue; } $criterion = new \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion($type, $value); $isExists = false; foreach($criterions as $curCriterion) { /** @var \Bitrix\Crm\Integrity\DuplicateCriterion $curCriterion */ if($criterion->equals($curCriterion)) { $isExists = true; break; } } if($isExists) { continue; } $criterions[] = $criterion; $duplicate = $criterion->find($entityTypeID, 20); if($duplicate !== null) { $dups[] = $duplicate; } $qty++; if($qty >= 20) { break; } } $entityByType = array(); foreach($dups as $dup) { /** @var \Bitrix\Crm\Integrity\Duplicate $dup */ $entities = $dup->getEntities(); if(!(is_array($entities) && !empty($entities))) { continue; } //Each entity type limited by 50 items foreach($entities as $entity) { /** @var \Bitrix\Crm\Integrity\DuplicateEntity $entity */ $entityTypeID = $entity->getEntityTypeID(); $entityTypeName = CCrmOwnerType::ResolveName($entityTypeID); $entityID = $entity->getEntityID(); if(!isset($entityByType[$entityTypeName])) { $entityByType[$entityTypeName] = array($entityID); } elseif(!in_array($entityID, $entityByType[$entityTypeName], true)) { $entityByType[$entityTypeName][] = $entityID; } } } return $entityByType; } throw new RestException('Method not found!', RestException::ERROR_METHOD_NOT_FOUND, CRestServer::STATUS_NOT_FOUND); }