- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatecriterion.php
- Класс: Bitrix\Crm\Integrity\DuplicateCriterion
- Вызов: DuplicateCriterion::getEntityIDs
public function getEntityIDs($entityTypeID, $rootEntityID, $userID, $enablePermissionCheck, array $options = null)
{
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");
}
if(!is_array($options))
{
$options = 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 array();
}
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);
$limit = isset($options['limit']) ? (int)$options['limit'] : 0;
if($limit > 0)
{
$query->setLimit($limit);
}
if($rootEntityID > 0)
{
$query->addFilter('!ENTITY_ID', $rootEntityID);
$query->addFilter(
'!@ENTITY_ID',
DuplicateIndexMismatch::prepareQueryField($this, $entityTypeID, $rootEntityID, $userID)
);
}
$entityIDs = array();
$dbResult = $query->exec();
while($fields = $dbResult->fetch())
{
if(isset($fields['ENTITY_ID']) && $fields['ENTITY_ID'] > 0)
{
$entityIDs[] = (int)$fields['ENTITY_ID'];
}
}
return $entityIDs;
}