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