- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/Service/Timeline/Repository.php
- Класс: Bitrix\Crm\Service\Timeline\Repository
- Вызов: Repository::loadHistoryItems
private function loadHistoryItems(
?DateTime $offsetTime,
?DateTime &$nextOffsetTime,
int $offsetId,
int &$nextOffsetId,
array $params = []
): array
{
$onlyFixed = isset($params['onlyFixed']) && $params['onlyFixed'] == true;
$limit = (int)($params['limit'] ?? 0);
$filter = (array)($params['filter'] ?? []);
$isOffsetExist = isset($offsetTime) && $offsetId > 0;
$bindingQuery = $this->prepareLoadHistoryBindingQuery($onlyFixed);
$query = $this->prepareLoadHistoryQuery($limit, false, $bindingQuery, $filter, $offsetTime, $offsetId);
$items = $this->fetchHistoryItems($offsetId, $query);
$fetchDiff = $limit - count($items);
if ($fetchDiff > 0 && $isOffsetExist)
{
$query = $this->prepareLoadHistoryQuery($fetchDiff, true, $bindingQuery, $filter, $offsetTime, $offsetId);
$extraItems = $this->fetchHistoryItems($offsetId, $query);
$items = array_merge($items, $extraItems);
}
$nextOffsetTime = null;
if (!empty($items))
{
$item = $items[count($items) - 1];
if (isset($item['CREATED']) && $item['CREATED'] instanceof DateTime)
{
$nextOffsetTime = $item['CREATED'];
$nextOffsetId = (int)$item['ID'];
}
}
$itemIDs = array_column($items, 'ID');
$itemsMap = array_combine($itemIDs, $items);
/*
* @todo reorganize TimelineManager::prepareDisplayData and do not use it here
*/
TimelineManager::prepareDisplayData(
$itemsMap,
0,
null,
true,
['type' => $this->context->getType()]
);
$itemsMap = array_values($itemsMap);
foreach ($itemsMap as $key => $item)
{
$itemsMap[$key] = Container::getInstance()->getTimelineHistoryItemFactory()::createItem($this->context, $item);
}
return $itemsMap;
}