• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integrity/volatile/eventhandler.php
  • Класс: Bitrix\Crm\Integrity\Volatile\EventHandler
  • Вызов: EventHandler::stopVolatileTypeIndexAgents
protected function stopVolatileTypeIndexAgents()
{
	foreach (DuplicateVolatileCriterion::getSupportedDedupeTypes() as $volatileTypeId)
	{
		$agent = Volatile\IndexRebuild::getInstance($volatileTypeId);
		if (is_object($agent))
		{
			$progressData = $agent->state()->getData();
			$finalActionsInfo = $progressData['FINAL_ACTIONS'] ?? [];
			$userTypeMap =
				is_array($progressData['FINAL_ACTIONS']['USER_TYPE_MAP'] ?? null)
					? $progressData['FINAL_ACTIONS']['USER_TYPE_MAP']
					: []
			;
			if (!empty($userTypeMap))
			{                                	
				foreach ($userTypeMap as $userId => $userInfo)
				{
					$userInfoModified = false;
					foreach (['types', 'notReadyVolatileTypes'] as $index)
					{
						$types = $userInfo[$index] ?? [];
						$modifiedTypes = [];
						$isModified = false;
						foreach ($types as $typeName)
						{
							if (in_array(DuplicateIndexType::resolveID($typeName), $this->volatileTypeIds, true))
							{
								$isModified = true;
							}
							else
							{
								$modifiedTypes[] = $typeName;
							}
						}
						if ($isModified)
						{
							$userInfo[$index] = $modifiedTypes;
							$userInfoModified = true;
						}
					}
					if ($userInfoModified)
					{
						if (empty($userInfo['types']) && empty($userInfo['notReadyVolatileTypes']))
						{
							unset($userTypeMap[$userId]);
						}
						else
						{
							$userTypeMap[$userId] = $userInfo;
						}
						if (empty($userTypeMap))
						{
							unset($finalActionsInfo['USER_TYPE_MAP']);
						}
						else
						{
							$finalActionsInfo['USER_TYPE_MAP'] = $userTypeMap;
						}
						$agent->setFinalActionsInfo($finalActionsInfo);
					}
				}
			}
		}
	}

	foreach ($this->volatileTypeIds as $volatileTypeId)
	{
		Volatile\IndexRebuild::getInstance($volatileTypeId)->delete();
	}
}