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