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