- Модуль: 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);
}
}
}