- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatecriterion.php
- Класс: Bitrix\Crm\Integrity\DuplicateCriterion
- Вызов: DuplicateCriterion::createDuplicate
public function createDuplicate( $entityTypeID, $rootEntityID, $userID, $enablePermissionCheck, $enableRanking, $limit = 0 ) { if ( $entityTypeID !== \CCrmOwnerType::Lead && $entityTypeID !== \CCrmOwnerType::Contact && $entityTypeID !== \CCrmOwnerType::Company ) { throw new Main\NotSupportedException( "Entity type: '" . \CCrmOwnerType::ResolveName($entityTypeID) . "' is not supported in current context" ); } /** @var Duplicate $dup **/ $dup = new Duplicate($this, array()); $query = static::createQuery(); $query->addSelect('ENTITY_ID'); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); static::setQueryFilter($query, $this->getMatches()); if($enablePermissionCheck) { $permissions = \CCrmPerms::GetUserPermissions($userID); $permissionSql = \CCrmPerms::BuildSql( \CCrmOwnerType::ResolveName($entityTypeID), '', 'READ', array('RAW_QUERY' => true, 'PERMS'=> $permissions) ); if($permissionSql === false) { //Access denied; return null; } if($permissionSql !== '') { $query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql)); } } $dedupeParams = new DedupeParams($entityTypeID, $userID, $enablePermissionCheck, $this->getScope()); $dedupeParams->setLimitByAssignedUser($this->limitByAssignedUser()); $query = DedupeDataSource::registerRuntimeFieldsByParams($query, $dedupeParams); if($limit > 0) { $query->setLimit($limit); } if($rootEntityID > 0) { $dup->setRootEntityID($rootEntityID); $query->addFilter('!ENTITY_ID', $rootEntityID); $query->addFilter( '!@ENTITY_ID', DuplicateIndexMismatch::prepareQueryField($this, $entityTypeID, $rootEntityID, $userID) ); } $dbResult = $query->exec(); $rankings = array(); while($fields = $dbResult->fetch()) { $entityID = isset($fields['ENTITY_ID']) ? intval($fields['ENTITY_ID']) : 0; if($entityID <= 0) { continue; } $entity = new DuplicateEntity($entityTypeID, $entityID); $entity->setCriterion($this); if($enableRanking) { $rankings[] = $entity->getRanking(); } $dup->addEntity($entity); } $this->onAfterDuplicateCreated($dup, $entityTypeID, $userID, $enablePermissionCheck, $enableRanking, $rankings); if($enableRanking) { DuplicateEntityRanking::initializeBulk($rankings, array('CHECK_PERMISSIONS' => $enablePermissionCheck, 'USER_ID' => $userID) ); } return $dup; }