- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatepersoncriterion.php
- Класс: Bitrix\Crm\Integrity\DuplicatePersonCriterion
- Вызов: DuplicatePersonCriterion::onAfterDuplicateCreated
protected function onAfterDuplicateCreated(Duplicate $dup, $entityTypeID, $userID, $enablePermissionCheck, $enableRanking, array &$rankings)
{
$name = $this->name;
$lastName = $this->lastName;
$secondName = $this->secondName;
$rootEntityID = $dup->getRootEntityID();
if($secondName === '' && $name === '')
{
return;
}
$permissionSql = '';
if($enablePermissionCheck)
{
$permissions = isset($params['PERMISSIONS']) ? $params['PERMISSIONS'] : null;
if($permissions === null)
{
$permissions = \CCrmPerms::GetUserPermissions($userID);
}
$permissionSql = \CCrmPerms::BuildSql(
\CCrmOwnerType::ResolveName($entityTypeID),
'',
'READ',
array('RAW_QUERY' => true, 'PERMS'=> $permissions)
);
if($permissionSql === false)
{
//Access denied;
return;
}
}
if($secondName !== '')
{
$query = new Main\Entity\Query(DuplicatePersonMatchCodeTable::getEntity());
$query->addSelect('ENTITY_ID');
$query->addFilter('=ENTITY_TYPE_ID', $entityTypeID);
$query->addFilter('=LAST_NAME', $lastName);
$query->addFilter('=NAME', $name);
$query->addFilter('=SECOND_NAME', '');
if($rootEntityID)
{
$query->addFilter('!ENTITY_ID', $rootEntityID);
$query->addFilter(
'!@ENTITY_ID',
DuplicateIndexMismatch::prepareQueryField(
self::createFromMatches(array('LAST_NAME' => $lastName, 'NAME' => $name)),
$entityTypeID,
$rootEntityID,
$userID
)
);
}
if($enablePermissionCheck && $permissionSql !== '')
{
$query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql));
}
$dbResult = $query->exec();
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(self::createFromMatches(array('LAST_NAME' => $lastName, 'NAME' => $name)));
if($enableRanking)
{
$rankings[] = $entity->getRanking();
}
$dup->addEntity($entity);
}
}
if($name !== '')
{
$query = new Main\Entity\Query(DuplicatePersonMatchCodeTable::getEntity());
$query->addSelect('ENTITY_ID');
$query->addFilter('=ENTITY_TYPE_ID', $entityTypeID);
$query->addFilter('=LAST_NAME', $lastName);
$query->addFilter('=NAME', '');
$query->addFilter('=SECOND_NAME', '');
if($rootEntityID)
{
$query->addFilter('!ENTITY_ID', $rootEntityID);
$query->addFilter(
'!@ENTITY_ID',
DuplicateIndexMismatch::prepareQueryField(
self::createFromMatches(array('LAST_NAME' => $lastName)),
$entityTypeID,
$rootEntityID,
$userID
)
);
}
if($enablePermissionCheck && $permissionSql !== '')
{
$query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql));
}
$dbResult = $query->exec();
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(self::createFromMatches(array('LAST_NAME' => $lastName)));
if($enableRanking)
{
$rankings[] = $entity->getRanking();
}
$dup->addEntity($entity);
}
}
}