• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/ui/entityselector/projectprovider.php
  • Класс: BitrixSocialnetworkIntegrationUIEntitySelectorProjectProvider
  • Вызов: ProjectProvider::fillRecentTab
private function fillRecentTab(Dialog $dialog, EO_Workgroup_Collection $projects): void
{
	$maxProjectsInRecentTab = 30;

	$recentItems = $dialog->getRecentItems()->getEntityItems('project');
	if (count($recentItems) < $maxProjectsInRecentTab)
	{
		$limit = $maxProjectsInRecentTab - count($recentItems);
		$recentGlobalItems = $dialog->getGlobalRecentItems()->getEntityItems('project');
		foreach ($recentGlobalItems as $recentGlobalItem)
		{
			if ($limit <= 0)
			{
				break;
			}

			if (!isset($recentItems[$recentGlobalItem->getId()]) && $recentGlobalItem->isLoaded())
			{
				$dialog->getRecentItems()->add($recentGlobalItem);
				$limit--;
			}
		}

		$recentItems = $dialog->getRecentItems()->getEntityItems('project');
	}

	if (count($recentItems) < $maxProjectsInRecentTab)
	{
		$recentIds = array_map('intval', array_keys($recentItems));

		$dialog->addRecentItems(
			$this->getProjectItems([
				'!projectId' => $recentIds,
				'viewed' => true,
				'order' => ['VIEWED_PROJECT.DATE_VIEW' => 'desc'],
				'limit' => $maxProjectsInRecentTab - count($recentItems)
			])
		);

		$recentItems = $dialog->getRecentItems()->getEntityItems('project');
	}

	if (count($recentItems) < $maxProjectsInRecentTab)
	{
		$limit = $maxProjectsInRecentTab - count($recentItems);
		foreach ($projects as $project)
		{
			if ($limit <= 0)
			{
				break;
			}

			if (isset($recentItems[$project->getId()]))
			{
				continue;
			}

			$dialog->getRecentItems()->add(
				new RecentItem([
					'id' => $project->getId(),
					'entityId' => 'project',
					'loaded' => true,
				])
			);

			$limit--;
		}
	}
}