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