- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicateindexbuilder.php
- Класс: Bitrix\Crm\Integrity\DuplicateIndexBuilder
- Вызов: DuplicateIndexBuilder::internalBuild
protected function internalBuild(array &$progressData)
{
$offset = isset($progressData['OFFSET']) ? max((int)$progressData['OFFSET'], 0) : 0;
$limit = isset($progressData['LIMIT']) ? max((int)$progressData['LIMIT'], 0) : 0;
$dataSource = $this->getDataSource();
$result = $dataSource->getList($offset, $limit);
$rankings = $result->getAllRankings();
DuplicateEntityRanking::initializeBulk($rankings,
array('CHECK_PERMISSIONS' => $this->isPermissionCheckEnabled(), 'USER_ID' => $this->getUserID())
);
$rootEntityIDs = array();
$items = $result->getItems();
foreach($items as $matchHash => $item)
{
$rootEntityInfo = array();
if($this->tryResolveRootEntity($item, $matchHash, $rootEntityInfo))
{
$entityID = $rootEntityInfo['ENTITY_ID'];
$rootEntityIDs[] = $entityID;
$item->setRootEntityID($entityID);
}
else
{
$result->removeItem($matchHash);
}
}
$sortParams = $this->prepareSortParams($rootEntityIDs);
$effectiveItemCount = 0;
$items = $result->getItems();
foreach($items as $matchHash => $item)
{
$enableOverwrite = $item->getOption('enableOverwrite', true);
if(
!$enableOverwrite
&& $this->duplicateIndexExists($this->getPrimaryKey($matchHash)))
{
if ($this->params->limitByDirtyIndexItems())
{
$this->markAsNotDirty($this->getPrimaryKey($matchHash));
}
continue;
}
$data = $this->prepareTableData($matchHash, $item, $sortParams, true);
$data['STATUS_ID'] = DuplicateStatus::PENDING;
$this->saveDuplicateIndexItem($data);
$effectiveItemCount++;
}
if ($this->params->limitByDirtyIndexItems())
{
$this->processInvalidDirtyItems($result->getInvalidItems());
}
$processedItemCount = $result->getProcessedItemCount();
$progressData['EFFECTIVE_ITEM_COUNT'] = $effectiveItemCount;
$progressData['PROCESSED_ITEM_COUNT'] = $processedItemCount;
$progressData['OFFSET'] = $offset + $processedItemCount;
return $this->isInProgress($progressData);
}