- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/automaticduplicateindexbuilder.php
- Класс: Bitrix\Crm\Integrity\AutomaticDuplicateIndexBuilder
- Вызов: AutomaticDuplicateIndexBuilder::build
public function build(array &$progressData)
{
if (isset($progressData['STEP']) && in_array($progressData['STEP'],
[self::STEP_BUILD_NEW_ITEMS, self::STEP_PROCESS_UPDATED_ITEMS]))
{
$this->step = $progressData['STEP'];
}
if ($this->step === self::STEP_BUILD_NEW_ITEMS)
{
$this->params->setLimitByDirtyIndexItems(false);
$inProgress = $this->internalBuild($progressData);
if ($inProgress)
{
return true;
}
elseif ($this->rebuildChangedOnly)
{
$progressData['STEP'] = self::STEP_PROCESS_UPDATED_ITEMS;
return true;
}
}
if ($this->step === self::STEP_PROCESS_UPDATED_ITEMS)
{
$progressData['OFFSET'] = 0;
$this->params->clearIndexDate();
$this->params->setLimitByDirtyIndexItems(true);
$inProgress = $this->internalBuild($progressData);
if ($inProgress)
{
return true;
}
// remove dirty index items
static::deleteDuplicateIndexByFilter([
'TYPE_ID' => $this->getTypeID(),
'ENTITY_TYPE_ID' => $this->getEntityTypeID(),
'USER_ID' => $this->getUserID(),
'SCOPE' => $this->getScope(),
'IS_DIRTY' => true
]);
// set pending status to all queue
Entity\AutomaticDuplicateIndexTable::setStatusByFilter(
\Bitrix\Crm\Integrity\DuplicateStatus::PENDING,
[
'TYPE_ID' => $this->getTypeID(),
'ENTITY_TYPE_ID' => $this->getEntityTypeID(),
'USER_ID' => $this->getUserID(),
'=SCOPE' => $this->getScope(),
'!STATUS_ID' => \Bitrix\Crm\Integrity\DuplicateStatus::PENDING
]
);
}
return false;
}