• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/timeline/activitycontroller.php
  • Класс: Bitrix\Crm\Timeline\ActivityController
  • Вызов: ActivityController::notifyTimelinesAboutActivityUpdateForBindings
protected function notifyTimelinesAboutActivityUpdateForBindings(array $activity, array $bindings, ?int $userId = null, bool $forceUpdateHistoryItems = false): void
{
	$identifiers = array_map(
		fn(array $binding) => ItemIdentifier::createFromArray($binding),
		$bindings,
	);
	$identifiers = array_filter($identifiers);

	if (empty($identifiers))
	{
		return;
	}

	$activityId = (int)$activity['ID'];

	if (!array_key_exists('IS_INCOMING_CHANNEL', $activity))
	{
		$activity['IS_INCOMING_CHANNEL'] = \Bitrix\Crm\Activity\IncomingChannel::getInstance()->isIncomingChannel($activityId) ? 'Y' : 'N';
	}
	if (!array_key_exists('LIGHT_COUNTER_AT', $activity))
	{
		$activity['LIGHT_COUNTER_AT'] = ServiceLocator::getInstance()->get('crm.activity.actcounterlighttimerepo')->queryLightTimeByActivityId($activityId);
	}

	$isCompleted = ($activity['COMPLETED'] ?? 'N') === 'Y';
	if ($isCompleted || $forceUpdateHistoryItems)
	{
		$timelineEntryIds = TimelineEntry::getEntriesIdsByAssociatedEntity(
			\CCrmOwnerType::Activity,
			$activityId,
			self::MAX_SIMULTANEOUS_PULL_EVENT_COUNT,
		);

		foreach ($timelineEntryIds as $timelineEntryId)
		{
			foreach ($identifiers as $identifier)
			{
				$this->sendPullEventOnUpdate($identifier, $timelineEntryId, $userId);
			}
		}
	}

	if (!$isCompleted)
	{
		$scheduledData = $activity;
		$items = [$activityId => &$scheduledData];

		self::loadCommunicationsAndMultifields(
			$items,
			Crm\Service\Container::getInstance()->getUserPermissions($userId)->getCrmPermissions(),
			[
				'ENABLE_PERMISSION_CHECK' => false,
			]
		);
		$items = NoteTable::loadForItems($items, NoteTable::NOTE_TYPE_ACTIVITY);

		foreach ($identifiers as $identifier)
		{
			$this->sendPullEventOnUpdateScheduled($identifier, $scheduledData, $userId);
		}
	}
}