...Человеческий поиск в разработке...
- Модуль: 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); } }