ConfigurableRestApp::syncBadges

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. ConfigurableRestApp
  4. syncBadges
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/activity/provider/configurablerestapp.php
  • Класс: Bitrix\Crm\Activity\Provider\ConfigurableRestApp
  • Вызов: ConfigurableRestApp::syncBadges
static function syncBadges(int $activityId, array $activityFields, array $rawBindings): void
{
	$badgeType = (string)($activityFields['PROVIDER_PARAMS']['badgeCode'] ?? '');
	if ($badgeType !== '')
	{
		if (!\Bitrix\Crm\Badge\Model\CustomBadgeTable::getByCode($badgeType))
		{
			$badgeType = '';
		}
	}
	$bindings = [];
	foreach ($rawBindings as $rawBinding)
	{
		$ownerTypeId = (int)$rawBinding['OWNER_TYPE_ID'];
		$ownerId = (int)$rawBinding['OWNER_ID'];
		if (\CCrmOwnerType::IsDefined($ownerTypeId) && $ownerId > 0)
		{
			$bindings[] =  new ItemIdentifier($ownerTypeId, $ownerId);
		}
	}

	$sourceIdentifier = new Badge\SourceIdentifier(
		Badge\SourceIdentifier::CRM_OWNER_TYPE_PROVIDER,
		\CCrmOwnerType::Activity,
		$activityId,
	);
	$existedBadges = [];
	$existedBadgesIterator = BadgeTable::query()
		->where('TYPE', Badge\Type\RestAppStatus::REST_APP_TYPE)
		->where('SOURCE_PROVIDER_ID', $sourceIdentifier->getProviderId())
		->where('SOURCE_ENTITY_TYPE_ID', $sourceIdentifier->getEntityTypeId())
		->where('SOURCE_ENTITY_ID', $sourceIdentifier->getEntityId())
		->setSelect([
			'ID',
			'VALUE',
			'ENTITY_TYPE_ID',
			'ENTITY_ID',
		])
		->exec()
	;
	while($existedBadge = $existedBadgesIterator->fetch())
	{
		$existedBadges[$existedBadge['ENTITY_TYPE_ID']][$existedBadge['ENTITY_ID']] = $existedBadge['VALUE'];
	}

	$isCompleted = isset($activityFields['COMPLETED']) && $activityFields['COMPLETED'] === 'Y';
	if ($isCompleted || $badgeType === '') // remove existed badges
	{
		foreach ($existedBadges as $existedBadgeEntityTypeId => $byTypeId)
		{
			foreach ($byTypeId as $existedBadgeEntityId => $value)
			{
				$existedBadge = Container::getInstance()->getBadge(
					Badge\Type\RestAppStatus::REST_APP_TYPE,
					$value,
				);
				$itemIdentifier = new ItemIdentifier((int)$existedBadgeEntityTypeId, (int)$existedBadgeEntityId);
				$existedBadge->unbind($itemIdentifier, $sourceIdentifier);
			}
		}

		return;
	}
	$newBadge = Container::getInstance()->getBadge(
		Badge\Type\RestAppStatus::REST_APP_TYPE,
		$badgeType
	);

	foreach ($bindings as $singleBinding)
	{
		$existedBadgeValue = $existedBadges[$singleBinding->getEntityTypeId()][$singleBinding->getEntityId()] ?? null;
		if ($existedBadgeValue === $badgeType) // existed record was not changed
		{
			continue;
		}
		if ($existedBadgeValue)
		{
			$existedBadge = Container::getInstance()->getBadge(
				Badge\Type\RestAppStatus::REST_APP_TYPE,
				$existedBadgeValue,
			);
			$existedBadge->unbind($singleBinding, $sourceIdentifier);
		}

		$newBadge->bind($singleBinding, $sourceIdentifier);
	}
}

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