• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Timeline/Monitor.php
  • Класс: Bitrix\Crm\Service\Timeline\Monitor
  • Вызов: Monitor::calculateLastActivityInfo
public function calculateLastActivityInfo(ItemIdentifier $timelineOwner): array
{
	$lastTimelineEntryQuery =
		$this->timelineDataManager::query()
			->setSelect([
				'AUTHOR_ID',
				'CREATED',
			])
			->where('BINDINGS.ENTITY_TYPE_ID', $timelineOwner->getEntityTypeId())
			->where('BINDINGS.ENTITY_ID', $timelineOwner->getEntityId())
			->setOrder([
				'CREATED' => 'DESC',
			])
			->setLimit(1)
	;
	$this->addTimelineTypeFilter($timelineOwner, $lastTimelineEntryQuery);

	$lastTimelineEntry = $lastTimelineEntryQuery->fetchObject();

	$lastIncomingActivity = $this->incomingChannelDataManager::query()
		->where('BINDINGS.OWNER_TYPE_ID', $timelineOwner->getEntityTypeId())
		->where('BINDINGS.OWNER_ID', $timelineOwner->getEntityId())
		->setOrder([
			'ID' => 'DESC',
		])
		->setLimit(1)
		->setSelect(['ACTIVITY_ID'])
		->fetchObject()
	;

	$lastActivity = $lastIncomingActivity
		? $this->activityDataManager::query()
			->setSelect([
				'CREATED',
				'EDITOR_ID',
				'AUTHOR_ID',
				'RESPONSIBLE_ID',
				'PROVIDER_ID',
			])
			->where('ID', $lastIncomingActivity->getActivityId())
			->setLimit(1)
			->fetchObject()
		: null
	;

	$timeFromEntry = $lastTimelineEntry ? $lastTimelineEntry->getCreated() : null;
	$timeFromActivity = $lastActivity ? $lastActivity->getCreated() : null;

	if (
		($timeFromEntry && !$timeFromActivity)
		|| ($timeFromEntry && $timeFromActivity && $timeFromEntry->getTimestamp() > $timeFromActivity->getTimestamp())
	)
	{
		return [
			$timeFromEntry,
			$lastTimelineEntry->getAuthorId(),
		];
	}

	if (
		(!$timeFromEntry && $timeFromActivity)
		|| ($timeFromEntry && $timeFromActivity && $timeFromEntry->getTimestamp() <= $timeFromActivity->getTimestamp())
	)
	{
		return [
			$timeFromActivity,
			ActivityController::resolveAuthorID($lastActivity->collectValues()),
		];
	}

	//neither any activity nor any timeline entry exists
	return [
		null,
		null,
	];
}