Cleaner::processStep

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Cleaner
  4. processStep
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/agent/duplicate/volatile/cleaner.php
  • Класс: Bitrix\Crm\Agent\Duplicate\Volatile\Cleaner
  • Вызов: Cleaner::processStep
protected function processStep(): bool
{
	$result = false;

	// Prefpare filter
	$entityTypeIds = DuplicateVolatileCriterion::getSupportedEntityTypes();
	$volatileTypeIds = DuplicateVolatileCriterion::getAllSupportedDedupeTypes();
	$activeTypeIds = [];
	$activeEntityTypeIds = [];
	foreach (TypeInfo::getInstance()->get() as $typeInfo)
	{
		if ($typeInfo['ACTIVE'] === 'Y')
		{
			$activeTypeIds[] = $typeInfo['ID'];
			$activeEntityTypeIds[] = $typeInfo['ENTITY_TYPE_ID'];
		}
	}
	$inactiveTypeIds = array_diff($volatileTypeIds, $activeTypeIds);
	$filter = [
		'LOGIC' => 'OR',
	];
	foreach ($inactiveTypeIds as $volatileTypeId)
	{
		$filter[] = [
			'=TYPE_ID' => $volatileTypeId,
			'@ENTITY_TYPE_ID' => $entityTypeIds,
		];
	}
	foreach ($activeTypeIds as $index => $volatileTypeId)
	{
		if (in_array($activeEntityTypeIds[$index], $entityTypeIds, true))
		{
			$entityTypeIdsToDelete = array_diff($entityTypeIds, [$activeEntityTypeIds[$index]]);
		}
		else
		{
			$entityTypeIdsToDelete = $entityTypeIds;
		}
		if (!empty($entityTypeIdsToDelete))
		{
			$filter[] = [
				'=TYPE_ID' => $volatileTypeId,
				'@ENTITY_TYPE_ID' => $entityTypeIdsToDelete,
			];
		}
	}

	$limit = static::ITEM_LIMIT;

	if (count($filter) > 1)
	{
		// Cleaning hashes
		$res = DuplicateEntityMatchHashTable::getList(
			[
				'select' => [
					'ENTITY_ID',
					'ENTITY_TYPE_ID',
					'TYPE_ID',
					'MATCH_HASH',
					'SCOPE',
				],
				'filter' => $filter,
				'limit' => $limit,
			]
		);
		if (is_object($res))
		{
			while ($row = $res->fetch())
			{
				$result = true;
				DuplicateEntityMatchHashTable::delete(
					[
						'ENTITY_ID' => (int)$row['ENTITY_ID'],
						'ENTITY_TYPE_ID' => (int)$row['ENTITY_TYPE_ID'],
						'TYPE_ID' => (int)$row['TYPE_ID'],
						'MATCH_HASH' => $row['MATCH_HASH'],
						'SCOPE' => $row['SCOPE'],
					]
				);
			}
		}

		// Cleaning match codes
		$res = DuplicateVolatileMatchCodeTable::getList(
			[
				'select' => ['ID'],
				'filter' => $filter,
				'limit' => $limit,
			]
		);
		if (is_object($res))
		{
			while ($row = $res->fetch())
			{
				$result = true;
				DuplicateVolatileMatchCodeTable::delete((int)$row['ID']);
			}
		}
	}

	return $result;
}

Добавить комментарий